Reverse delay

The new Airwindows module has PitchDelay (amoung 300 other things) that does it. I think. I’m not 100% sure.

2 Likes

This thread about Reverse Delay is steering ever further off course toward pitch shifted delay…but adding to that…

Chris…from Airwindows…has extensive desciptions and videos about all his plugins (which are now available in VCV Rack).

On PitchDelay he states in the first line of the descriptive text:

‘PitchDelay is TapeDelay2 but with pitch shift instead of flutter.’

As usual he has also made a video in which he goes into the details of concepts and implementation… https://www.airwindows.com/pitchdelay/

Ah, one of my favourite topics! It’s premium, but Unfiltered Audio have a pitch delay in one of their collections. I bought it a few years ago and it’s very good. Hora also has a delay that can do reverse, and Hora Millennial has a v/oct input, although that’s for pitching tones created from short delay times, like a resonator or Karplus-Strong. I don’t think you can pitch the regular delay by musical intervals. There is also the mighty Portland Weather, which does both reverse and pitch shifting of the delay taps, although the pitch shift doesn’t sound that great to my ears. For the classic effect of rising or falling delays, I’ve had a lot of fun using Clouds to pitch shift in the feedback loop of Chronoblob, that can get fairly mental. Finally, why don’t I spam my own effort where I’ve made a kind of granular delay with Simpliciters and tried to rip off the Microcosm!

Cheers!

3 Likes

Ooh, great suggestions, also the MICROCOSM recreation is a awesome idea, I’ll have to dig into that more, looks like a nice overview of multiple effects!

Thanks all!

Totally different effect, but it’s an old trick to patch a frequency shifter in the feedback loop of a delay. Surge has at least on, and my old booty shifter will do the job nicely.

4 Likes

Nice video, and I tried the patch, very impressive sound! Those Simpliciters are such beautiful modules.

In a DAW environment one can simply reverse the track, add delay, and reverse it again. But this approach is tricky in a modular/live environment using samplers (Or so I’ve found so far), as it causes alot of clicks and cutoffs, unless it’s timed perfectly. I tried to do it with reverb and it sounded terrible, or maybe I missed a crucial piece of the chain. :person_shrugging:

Yeah, my basic project is trying to track down the clicks I seem to get with different reverse delays (edit). So far the Nysthi Clockable Delay has the fewest clicks on live reverse delay.

My suspicion is that when the read head and the write head go past each other, this is introducing a click. I’m wondering if I might have to write one that is double buffered and does a smooth crossfade between buffers whenever the read and write head pass each other.

But right now that still feels like a presumptuous assumption.

Double buffering does make alot of sense though, I think you’re onto something.

I mistyped there, everybody’s got my mind on pitch shifters, I meant with reverse delays.

My Lubadh is basically perfect with the newest firmware, except that when I mix reverse and forward taps on the same reel, I get clicks sometimes and I can’t seem to predict when they happen.

Tonight I tried all the options mentioned above, and all of these reverse delays get clicks too to varying degrees. So maybe it’s time to try programming up a simple reverse delay module and explore the problem further. I think my subconscious has partly just been secretly scheming to find a way to convince me to find a personal module project :slight_smile:

3 Likes

It will be awesome if you can pull it off. I for one would definitely use it.

I suspect there would always be clicks with a single buffer, I mean the playhead records a length of material, and then records the next length while it’s processing the first one, an so on, there will be gaps, especially where it cuts straight through the wave. IDK, I could be talking rubbish, I’ll leave it up to the experts🙂

2 Likes

Thanks Dan. I’ve noticed that all the reverse delays click too, which is why I stopped using them. It’s probably fine with synth sounds, but when you use acoustic instruments like guitar, it’s really annoying. I’m guessing what happens is it’s recording a buffer then taking a random chunk of sound with the length set by the delay time and reversing it. Because that chunk isn’t necessarily a good point to start playing back from, it clicks (similar to when you loop a sample at the wrong point). I’m thinking of learning Pure Data and trying to knock something together with a short envelope going into the record/playback function to take the click off.

I’ve done something similar before using Simpliciter as a basic looper. One of the things I often like to do is use reverb/granular delays into a looper and loop the wet signal so you’re looping the effects instead of the original signal (if that makes sense!). This clicks really badly, so I used Nysthi’s AUTO-X-FADER to perform a really short fade in at the start of the loop record, and a fade out before playing back (around 40ms I think). I found it works really well for perfectly looping fairly long sections, but when I tried to use it as more of a granular delay, the logic was getting out of sync and fading in/out at the wrong times. I have a video on this and the patch somewhere if anyone’s interested.

I would love a proper module with click-free reverse delay if you have the chops to code that! Probably more useful than a Pd patch (especially as we don’t have Prototype in v2 yet).

P.S. @Squinky freq shifter in a delay loop is great fun, thanks for that idea! Makes a lovely metallic rising ring-mod sound :slight_smile:

3 Likes

Glad I’m not just being crazy, haha, I was a bit surprised at first, but then I started mentally designing the click-free reverse delay, and I can see it’s non-trivial, especially for a multi-tap implementation. But I feel pretty good about being able to solve the problem, just as soon as I pick up enough C++ to write it for a VCV module.

I think, in addition to the issue you’re seeing with randomly starting the sample, there’s also the problem that right where the write head is writing new information into the buffer (over the old information), there’s a high likelihood of discontinuity.

Imagine you’re continuously writing a sine wave into a ring-buffer, it’s easy to imagine that there might be a complete phase mismatch of the new data vs the old data. If your play head follows your write head and never crosses over, it never sees that. But if it passes the play head, going either forward or backwards, there will be a click right there.


As I thought about the double-buffer idea more, I finally decided that maybe all you need to do is constantly preserve a portion of the old buffer samples trailing behind the writehead, then whenever a playhead crosses over you should be able to do a smooth crossfade on the audio as they fly past each other.

2 Likes

First proof of concept tonight, and it works great! Super fun to code my first module, even if it’s still really just a shell.

I might have found a new addicting hobby. It will take me a while to make it nice and understand a bit more of the way vcv rack works internally, and understand c++ a bit better, but, I made a six second buffer with a three second delay, and a little fade ramp when the pointers pass each other and I get nice smooth reversing. I think this is a good project to continue with.

4 Likes

Sounds interesting…honestly, I don’t fully understand the idea of having two buffers, but if you want anyone to beta test a Windows build I’d happily help with that. Would the concept still work if you modulate the delay time?

Yeah, it shouldn’t be a problem, but it just might take me a bit to figure out all the nice features. But hopefully I’ll have something later this year!

Would an earlier version that only does 1x speed be of interest?

I’m thinking it could have one or two taps, and you could pick the direction, forward or backwards for each of them, and distance from the record head.

3 Likes

Yep, that would still be interesting. A smooth reverse delay would be a good option if you could get it in the library.

1 Like

I must say, having now worked on my own reverse delay finally, I do think that the Lubadh implementation is even more impressive than I’d realized before. I think I’ll have something to share soonish, but they did an exceptional job on that V2 firmware.

3 Likes

Okay, this is my first attempt at making a module for VCV Rack, so I don’t know what all could go wrong, but here’s a proof of concept for the reverse delay, I’d be curious to know if it works for anybody else. I don’t have a proper git release page or anything yet, but I compiled for macOS, Windows, and Linux. I’ll sort out licenses and sharing the code in the future when I get a chance to clean it up and hopefully figure out cross compiling.

Note that there’s no dry in the output, everything is wet. There are two taps with a fixed 1x speed, one goes in reverse and the other goes forward. You can adjust their relationship to the write head with the location knob. That control is more useful for the forward tap.

I also haven’t added any niceness on the controls, so if you’re changing controls live, you might get some clicks, and if you’re changing the buffer size, you might hear some old audio in there.

But if I get some feedback and feel like it works for people, I’ll probably be inspired to come back and improve it for a proper release.

Drop the appropriate vcvplugin file into your plugins folder to test:

4 Likes

Also, since this topic is technically closed, I made a top level post for this here:

1 Like