How to smooth out the output when delay time of tap changes

Nikolozi's icon

Hey guys,

I'm new to Gen and I'm building a simple delay. I've attached a screenshot of my gen patch. Basically out1 sends unmodified signal that comes into inlet 1 while out2 delays the signal based on the delay time (in ms) provided by inlet 2. In my test Max patch I have a slider sending values to inlet 2 of the Gen patch. If I move the slider to modify the delay time I hear crackling/glitchy noise coming out the gen patch.

How do I go about smoothing this out? I tried interpolating the current output value with the previous one, but clearly that's not a correct way to do this, as it still sounds glitchy.

Thanks for help
Niko

Screen-Shot-2015-04-22-at-4.10.07-pm.png
png
brendan mccloskey's icon

Hi
no need to explain why this is happening, as you will already know. While I am not a gen-guru, the options I see are as follows:

1. smooth out the changing values
2. only pass the destination value (ignore changes)

Max Patch
Copy patch and select New From Clipboard in Max.

The first introduces pitch shifting due to the Doppler effect, and the second relies on more mathematical extraction of velocity (than I can muster), but here is my humble example of both approaches:

Brendan

Nikolozi's icon

Hi Brendan,

Thanks for providing me with the sample patch. It's much appreciated.

I think I will stick with the first approach, as I'm trying to design a tape delay type effect. Also, mstosamps is a useful operator, I was doing the conversion myself.

Quick question. I want to generate C code from the patch. Say, if I'm designing a delay and I want a maximum of 1 second delay settable by user, but I don't know a sample rate until the runtime of the code.. is it possible to specify delay time dynamically as opposed to hardcoding 44100 or 48000 inside the gen patch?

Cheers
Niko

Christopher Dobrian's icon

In gen~ there is a macro called SAMPLERATE.

Regarding your original question, I think maybe what you want is a quick amplitude crossfade between the old delayed signal (with the old delay time) and the new delayed signal (with the new delay time). You'd have two delayed signals, and fade the old one out as you fade the new one in. Here's a non-gen~ version of what I mean.

Nikolozi's icon

Hi Christopher,

I didn't realise you could just just type SAMPLERATE as one of the arguments. That worked perfectly.

And thanks for the link! It has a lot of interesting patches. I'll look into it.

Cheers
Niko

anthony karetsos's icon

Hey everyone ,

I'm starting now to learn max 4 live and i am in the midle of making a simple delay and i have the same problem with the delay time. Can someone explain exactly how i can use this "SAMPLERATE" insade the gen~ ?