@rorywalsh FWIW, that won’t provide the same type of effect. Think of a short note reversed & thru reverb, a fast rise & ambient reverb tail that might last a few seconds. Which also sounds really cool:
[Dropbox]
A reverse reverb can give you a long ambient swell that cuts off sharply, sometimes leading into the played note.
A few issues with that code you posted in regards to using for reverse delay or reverb, although I know it’s primarily intended as a foundation. For one, writing in realtime with tablew will cause random single sample or multi-sample dropouts, even at setksmps = 1. I documented that here:
[Discord]
If tabw/tab are used, and a phasor to read/write the tables, you can use any size ksmps without issue & it’s still sample accurate. A bit more efficient I think (?), as are tab/tabw. I’m not sure they were available in 2005(?). I suppose the phasor could also run at k-rate and be converted using a(kPhs):
ex. tab(aSig, a(kPhs), iTab, 1)
but I’m not sure that would be any more efficient(?).
Also, there’s no protection to write silence to the table when the instr stops playing, so if you extend the UDO with xtratime to allow the last delays to continue after the instr is finished playing it can be problematic, depending on how it’s implemented (UDO in the instr vs in a seperate send instr vs used in a live playing situation, always on etc.).
Another issue is declick enveloping. A Hanning or triangle can be really invasive. Often reverse delays/reverb use long delay times, like > 3 seconds, so you get nice phrases, like Hendrix “Are You Experienced” . So if you have a delay time of say 3 seconds with a Hanning, you can lose much of the detail, especially with plucky timbres. It would take 1.5 sec each for attack and decay. With GEN16 you can create a long flat table with att/dec around 10ms without aliasing. Here’s a few pics to illustrate Hanning/sinc win vs GEN16 with a 2 sec delay. In the second pic you can see how the env decays over 10ms.
One other thing, it’s nice to have the read/write tables inside the UDO and setup to just accept the delay time (loop length) as a variable in seconds. Here’s an example, in this case a reverse reverb which goes thru another reverb: Sorry for the long post but some (relatively) important considerations for anyone attempting this.



