One sample feedback delay

danvales82's icon

Hi everyone,

I'm trying to realize a FM feedback modulation and I need to have one sample delay of my carrier signal.
If I use the delay~ object in a feedback configuration (see thee attached patch) no sound is produced.

Otherwise, using the tapin~/tapout~ system I can't manage one sample delay because (in my opinion) the minimum appreciated delay time is 1 ms.

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

Are there other solutions?
Thanks to everyone

Daniele

commathe's icon

delay~ specifies delays by samples, not sure if it goes down as low as 1 sample though.

LiamCormacGould's icon

if you have MAX 6 you could do this inside gen~ it allows single sample feedback connections

danvales82's icon

Unfortunately I'm using MAX 5 and I cannot use the delay~ object in feedback configuration because in that case the sound will stop.
Is there something similar to gen~ in the previous versions of MAX 6?

Thanks to all

halsallian's icon

Can you use tapin and tapout?

Christopher Dobrian's icon

The minimum delay time of tapin~/tapout~ is one signal vector, and you're correct that delay~ does not permit feedback.

The easiest way to write an algorithm requiring one sample of delay is to use gen~, but if you don't have Max 6 then I'd suggest looking at mxj~ (or an external written in C).

JavaProgrammer's icon

Edit: Incorrect solution deleted.

3912.oneSampleDelay.maxpat
Max Patch
Floating Point's icon
Max Patch
Copy patch and select New From Clipboard in Max.

doesn't send~ and receive~ create a 1 samp delay by default? or is it the non-msp-flavour send/receive?
anyway, this works:

btw it says max 6 but i only have max 5

Roman Thilenius's icon

nope, send~ gives you/needs one vector, which is why it works for loops.

what works, in theorie, is to do a vector brake under a vector size which is as small as one sample.

what could also work for an FM operator is that you delay the feedbackloop for exactly one cycle
of the oscillator (in case the oscillator type allows that)

-110

Floating Point's icon
Max Patch
Copy patch and select New From Clipboard in Max.

can't detect a vector's delay here....

Owen Green's icon
Max Patch
Copy patch and select New From Clipboard in Max.

That's because there's not a feedback loop in your patch - send~ / receive~ are clever enough only to introduce the delay when a feedback condition is detected. MSP passes audio between objects in vectors, so causality dictates that the minimum possible delay in a MSP feedback loop will be sigvs samples:

Christopher Dobrian is correct that C/mxj~/faust/whatever or a vector size of 1 (e.g. in a poly~) is the way forward in Max 5.

Floating Point's icon

Thanks for the clarification Owen-- it's a good example of the advantages of Max 6 w gen (or more precisely the disadvantages of Max 5). I guess the OP could put my send/receive 'solution' into a poly~ with a vector size of 1 to fix their problem as you've suggested.