Smooth Delay Time Changes?

gener's icon

Hi all, I'm writing cause I'm kinda stumped on something. I'm trying to make an analog delay pedal emulator in MSP. Everything is pretty much finished except two things:

1 - When I move the delay "knob" in MSP...say from 500 ms to 100 ms, I can't get the output to smoothly emit a "delay time" change of the signal from 500 to 100. Right now the patch basically just skips and pops a bit until it reaches 100 ms. Hard to describe, but I'd love it to sorta sound like a spacy time change effect that's portamento-y until it settles at the new delay time setting.

2 - When I get the feedback delay to "self-oscillate," it gets out of control unlike the analog version. I put in a limiter (from the OMX tutorial) that works great in limiting the feedback loop, but I have to manually move the threshold down everytime the patch is loaded, and I'm having trouble getting the patch to just open at, say, -12 dB as the threshold.

But, part 1 is more important so any help would be really really appreciated!!

generalh's icon

use vdb~ made by Ben Thigpen it's nice, works good and well it's god
dam cool
or for free ej.vdb~
cheers
Hubert

Steven Miller's icon

Just an FYI - generally for questions like this, posting the patch is
pretty much required if you want anything other than speculation back
in response.

On Dec 17, 2007, at 10:41 AM, gener wrote:

>
> Hi all, I'm writing cause I'm kinda stumped on something. I'm
> trying to make an analog delay pedal emulator in MSP. Everything is
> pretty much finished except two things:
>
> 1 - When I move the delay "knob" in MSP...say from 500 ms to 100
> ms, I can't get the output to smoothly emit a "delay time" change
> of the signal from 500 to 100. Right now the patch basically just
> skips and pops a bit until it reaches 100 ms. Hard to describe, but
> I'd love it to sorta sound like a spacy time change effect that's
> portamento-y until it settles at the new delay time setting.

Which delay object are you using? If you are using [tapin~] and
[tapout~], are you using a signal to specify the delay time? Using a
signal will help make smooth changes in delay time while a float will
'skip' etc. I also use a 'smoother' patch to help with this.

>
> 2 - When I get the feedback delay to "self-oscillate," it gets out
> of control unlike the analog version. I put in a limiter (from the
> OMX tutorial) that works great in limiting the feedback loop, but I
> have to manually move the threshold down everytime the patch is
> loaded, and I'm having trouble getting the patch to just open at,
> say, -12 dB as the threshold.

Are you scaling the feedback amount? In order to avoid problems, it's
best to scale the feedback signal to no more than about 0.9 or so.

Another 'analog' characteristic would be to low-pass filter the
feedback signal so the repeats are less bright than the direct signal.

Here's a quick and easy example of all of the above you can mess
around with for your own fun & delight. ;)

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

----
Steven M. Miller
Professor, Contemporary Music Program
College of Santa Fe

Home
SFIFEM
Atrium Sound Space
OVOS
CMP

Anthony Palomba's icon

If you are trying to do variable delay line stuff, you might
want to look into Emmanuel Jourdan's "ejies" externals.
It has a great variable delay line external.
http://www.e--j.com/sphpblog/

Anthony

----- Original Message -----
From: Steven Miller
Date: Monday, December 17, 2007 1:39 pm
Subject: Re: [maxmsp] Smooth Delay Time Changes?

> Just an FYI - generally for questions like this, posting the patch
> is
> pretty much required if you want anything other than speculation
> back
> in response.
>
> On Dec 17, 2007, at 10:41 AM, gener wrote:
>
> >
> > Hi all, I'm writing cause I'm kinda stumped on something. I'm
> > trying to make an analog delay pedal emulator in MSP. Everything
> is
> > pretty much finished except two things:
> >
> > 1 - When I move the delay "knob" in MSP...say from 500 ms to 100
> > ms, I can't get the output to smoothly emit a "delay time" change
>
> > of the signal from 500 to 100. Right now the patch basically just
>
> > skips and pops a bit until it reaches 100 ms. Hard to describe,
> but
> > I'd love it to sorta sound like a spacy time change effect that's
>
> > portamento-y until it settles at the new delay time setting.
>
> Which delay object are you using? If you are using [tapin~] and
> [tapout~], are you using a signal to specify the delay time? Using
> a
> signal will help make smooth changes in delay time while a float
> will
> 'skip' etc. I also use a 'smoother' patch to help with this.
>
> >
> > 2 - When I get the feedback delay to "self-oscillate," it gets
> out
> > of control unlike the analog version. I put in a limiter (from
> the
> > OMX tutorial) that works great in limiting the feedback loop, but
> I
> > have to manually move the threshold down everytime the patch is
> > loaded, and I'm having trouble getting the patch to just open at,
>
> > say, -12 dB as the threshold.
>
> Are you scaling the feedback amount? In order to avoid problems,
> it's
> best to scale the feedback signal to no more than about 0.9 or so.
>
> Another 'analog' characteristic would be to low-pass filter the
> feedback signal so the repeats are less bright than the direct signal.
>
> Here's a quick and easy example of all of the above you can mess
> around with for your own fun & delight. ;)
>
> #P window setfont "Sans Serif" 9.;
> #P window linecount 1;
> #P hidden newex 553 73 88 196617 unpack 1. 1. 1. 1.;
> #P hidden newex 553 50 161 196617 loadmess 0.85 440. 1000. 100.;
> #P window setfont "Sans Serif" 10.;
> #P window linecount 2;
> #P user com 245 62 82 196618 12;
> #K set 0 18021 25956 25185 25451 8275 25441 27753 28263 8257 28015
> 30062 29696;
> #K end;
> #P window linecount 1;
> #P user com 393 63 100 196618 5;
> #K set 0 17509 27745 31008 21609 28005;
> #K end;
> #P user com 663 174 100 196618 7;
> #K set 0 21357 28527 29800 26990 26400 21609 28005;
> #K end;
> #P window setfont "Sans Serif" 9.;
> #P newex 230 203 93 196617 onepole~ 2500. Hz;
> #P flonum 663 206 71 9 0. 1000. 3 3 0 0 0 221 221 221 222 222 222 0
> 0 0;
> #N vpatcher 20 74 620 474;
> #P window setfont "Sans Serif" 9.;
> #P newex 110 59 55 196617 unpack s f;
> #P newex 27 57 54 196617 unpack f f;
> #N comlet (bang) smooth time finished;
> #P outlet 61 142 15 0;
> #N comlet (signal) data smoothed over N ms.;
> #P outlet 27 142 15 0;
> #P newex 110 37 108 196617 patcherargs name 10.;
> #N comlet (int or float) smooth time (ms);
> #P inlet 89 37 15 0;
> #P newex 46 97 35 196617 f 10;
> #P newex 27 77 29 196617 t f b;
> #N comlet (int , float , or list) control data , smooth time (ms);
> #P inlet 27 37 15 0;
> #P newex 27 121 44 196617 line~ 0.;
> #P connect 1 0 8 0;
> #P connect 8 0 2 0;
> #P connect 2 0 0 0;
> #P connect 0 0 6 0;
> #P connect 2 1 3 0;
> #P fasten 3 0 0 1 51 117 66 117;
> #P connect 0 1 7 0;
> #P fasten 9 1 3 1 160 89 76 89;
> #P fasten 8 1 3 1 76 81 76 81;
> #P fasten 4 0 3 1 94 81 76 81;
> #P connect 5 0 9 0;
> #P pop;
> #P newobj 557 241 111 196617 p control-smooth 100.;
> #P flonum 557 206 71 9 0. 1000. 3 3 0 0 0 221 221 221 222 222 222 0
> 0 0;
> #P flonum 394 93 35 9 20. 4000. 3 3 0 0 0 221 221 221 222 222 222 0
> 0 0;
> #P user meter~ 422 521 502 534 50 0 168 0 103 103 103 255 153 0 255
> 0
> 0 217 217 0 153 186 0 12 3 3 3 3;
> #P user meter~ 422 369 502 382 50 0 168 0 103 103 103 255 153 0 255
> 0
> 0 217 217 0 153 186 0 12 3 3 3 3;
> #P user meter~ 422 292 502 305 50 0 168 0 103 103 103 255 153 0 255
> 0
> 0 217 217 0 153 186 0 12 3 3 3 3;
> #P flonum 247 93 47 9 0. 0.99 3 3 0 0 0 221 221 221 222 222 222 0 0 0;
> #N vpatcher 20 74 620 474;
> #P window setfont "Sans Serif" 9.;
> #P newex 110 59 55 196617 unpack s f;
> #P newex 27 57 54 196617 unpack f f;
> #N comlet (bang) smooth time finished;
> #P outlet 61 142 15 0;
> #N comlet (signal) data smoothed over N ms.;
> #P outlet 27 142 15 0;
> #P newex 110 37 108 196617 patcherargs name 10.;
> #N comlet (int or float) smooth time (ms);
> #P inlet 89 37 15 0;
> #P newex 46 97 35 196617 f 10;
> #P newex 27 77 29 196617 t f b;
> #N comlet (int , float , or list) control data , smooth time (ms);
> #P inlet 27 37 15 0;
> #P newex 27 121 44 196617 line~ 0.;
> #P connect 1 0 8 0;
> #P connect 8 0 2 0;
> #P connect 2 0 0 0;
> #P connect 0 0 6 0;
> #P connect 2 1 3 0;
> #P fasten 3 0 0 1 51 117 66 117;
> #P connect 0 1 7 0;
> #P fasten 4 0 3 1 94 81 76 81;
> #P fasten 8 1 3 1 76 81 76 81;
> #P fasten 9 1 3 1 160 89 76 89;
> #P connect 5 0 9 0;
> #P pop;
> #P newobj 247 132 105 196617 p control-smooth 10.;
> #P newex 230 167 27 196617 *~;
> #P user ezdac~ 394 553 438 586 0;
> #P user gain~ 394 389 24 100 158 0 1.071519 7.94321 10.;
> #P newex 394 345 71 196617 tapout~ 1000;
> #P newex 394 315 65 196617 tapin~ 1000;
> #P user gain~ 394 158 24 100 158 0 1.071519 7.94321 10.;
> #P newex 394 112 49 196617 tri~ 440;
> #P window setfont "Sans Serif" 10.;
> #P user com 556 175 100 196618 5;
> #K set 0 17509 27745 31008 21609 28005;
> #K end;
> #P hidden connect 22 3 16 0;
> #P connect 16 0 15 1;
> #P connect 14 0 15 0;
> #P hidden connect 22 2 14 0;
> #P hidden connect 21 0 22 0;
> #P connect 5 0 6 0;
> #P connect 5 0 12 0;
> #P connect 5 0 6 1;
> #P fasten 4 0 7 0 399 369 215 369 215 159 235 159;
> #P connect 4 0 5 0;
> #P connect 4 0 11 0;
> #P connect 2 0 3 0;
> #P connect 2 0 10 0;
> #P connect 3 0 4 0;
> #P fasten 15 0 4 0 562 336 399 336;
> #P fasten 17 0 3 0 235 301 399 301;
> #P connect 1 0 2 0;
> #P connect 13 0 1 0;
> #P hidden connect 22 1 13 0;
> #P connect 8 0 7 1;
> #P connect 9 0 8 0;
> #P hidden connect 22 0 9 0;
> #P connect 7 0 17 0;
> #P window clipboard copycount 23;
>
> ----
> Steven M. Miller
> Professor, Contemporary Music Program
> College of Santa Fe
>
> Home
> SFIFEM
> Atrium Sound Space
> OVOS
> CMP
>
>
>

gener's icon

hi all, thanks for the replies. basically, i've been scaling feedback to about 1.25 because I want to the feedback "loop" to overdrive the patch, if that makes sense, much like how selfoscillation in an analog delay pedal will overdrive the chipset.

Using the OMX limiter works great, I'm just trying to figure out how to set it so the limiter's threshold is at a fixed dB so I don't have to adjust it.

The delay smoothing patches have been very helpful and I've been able to work a version of them into the patch. Thanks so much!

Steven Miller's icon

Analog overdrive is very different from digital distortion. You might
find one of the built-in distortion objects to be more sonically
satisfactory, to say nothing of more stable, than digitally
overdriving the feedback path - just an idea. Have a look at [clip~],
[overdrive~], and [deltaclip~]. You could also create a wavetable
transfer function for your own distortion characteristics with
[lookup~].

Please post your patch when you've finished it.

On Dec 17, 2007, at 5:22 PM, gener wrote:

>
> hi all, thanks for the replies. basically, i've been scaling
> feedback to about 1.25 because I want to the feedback "loop" to
> overdrive the patch, if that makes sense, much like how
> selfoscillation in an analog delay pedal will overdrive the chipset.
>
>

----
Steven M. Miller
Professor, Contemporary Music Program
College of Santa Fe

Home
SFIFEM
Atrium Sound Space
OVOS
CMP

Adam Murray's icon

Quote: smill wrote on Mon, 17 December 2007 11:38
----------------------------------------------------
> Here's a quick and easy example of all of the above you can mess
> around with for your own fun & delight. ;)

Thanks for sharing this Steven. Clear, simple, functional. Very nice! I will probably be stealing this at some point :)

-Adam

Steven Miller's icon

No problem. It's simple, and could use some refinement, but it gets
the idea across.

Have fun with it.

On Dec 18, 2007, at 11:18 PM, Adam Murray wrote:

>
> Quote: smill wrote on Mon, 17 December 2007 11:38
> ----------------------------------------------------
>> Here's a quick and easy example of all of the above you can mess
>> around with for your own fun & delight. ;)
>
> Thanks for sharing this Steven. Clear, simple, functional. Very
> nice! I will probably be stealing this at some point :)
>
> -Adam

----
Steven M. Miller
Professor, Contemporary Music Program
College of Santa Fe

Home
SFIFEM
Atrium Sound Space
OVOS
CMP