delaying samples

JesterN's icon

Hi all i have few questions for some feedback experiments:
1 - how can i provide just a single value in the input, e.g., one sample, in MSP
2 - how can i delay of one sample the processing in order to have feedback. I tried with delay but i must be doing something wrong because it produces no sound (check the patch)
Thanks
A

1424.NL.maxpat
Max Patch
Roman Thilenius's icon

1.

fixed value:
[sig~]

only one sample:
basically impossible, but if it is ok for you to have zeros in the rest
time, you should do that using a buffer with play or index.

2.

when you wqnt to create a feedback loop in maxmsp (and many other languages)
you need to interrupt the signal chain by delaying it for one vector.

in your patch one would do that for example by putting [send~ bubu] [receive~ bubu]
before you go bck into the selector.

-110

Roman Thilenius's icon

you should also put a [clip~ -0.9995 0.9995] into the feedback connection.

JesterN's icon

cool it works, only strange that delay~ cannot do that...
A

Emmanuel Jourdan's icon

note that send~/receive~ introduce one vector size of delay, not one sample. You can set your vector size down to 1, but that's probably going to take a lot of CPU, poly~ can also do that which will still take CPU, but you can mute it when you don't need.

JesterN's icon

ok i see, still works for some of my chaotic purposes, but it would be nice to see how you do one sample delay. Maybe you can post an example. I still find it difficult when it shouldn't be in my head. Why delay~ doesn't do that?
A

Roman Thilenius's icon

if delay would already contain a vectordelay of one sample, it would require 10 times
more CPU as it does now - but the vectordelay is not needed when you do not build
a feedback loop.

when you do a feedback loop and you want to have a delay of 7 samples, you would
do it like this:

1.
make a patcher like that:

[in~ 1]
[send~ #0_bubu]
[receive~ #0_bubu]
[out~ 1]

2.
save it do disk and call it in your main patcher using a poly~, and set the vectorsize to 1 sample:

[poly~ mypatcher 1 vs 1]

3.
insert [poly~ mypatcher 1 vs 1] into your feedback loop.
(it does not do anything except that it is required to make a feedback loop work.)

4.
now you can/have to substract 1 sample from the delay time of [delay~]:
for a delay of 1 sample, use [delay~ 0], for a delay of 7 samples, use [delay~ 6].
of course, now the "first" delay is wrong - so you have to make one extra delay~
object in parallel, which does not go to the feedback, i.e. you make one delay
for the first delay, and another one with 1 sample less, for the looped ones.

btw, a feedback loop of only sample delay will give you a nice sqare wave of 22 Khz - noone
needs that. 2 or 4 samples should be just fine for any kind of audio effects, or in other words:

loop ----- first delay

[delay~ 0] ----- [delay~ 5]

[poly~ mypatcher 1 vs 4]

JesterN's icon

Hi Roman, sorry i was busy the last days. I tried building your patch but i don't get it somehow. This is what i did, but the delay~ doesn't work. I don't see how a second one can solve that. I'm lost. A

1491.FBmain.maxpat
Max Patch
Roman Thilenius's icon

i cant look into the missing poly patcher :) but the feedbackloop belongs INTO the poly.
more tomorrow, when i have max.

JesterN's icon

into the poly i put the four objects you suggested
basically just a send return thing

[in~ 1]
[send~ #0_bubu]
[receive~ #0_bubu]
[out~ 1

but i have to close the loop. i expect this is just to introduce the delay right? I don't think i quite follow your logic into this. Maybe you can show me the patch?
A

JesterN's icon

So Roman,
any news for this patch? :)
A