I'm working on an application using PD and want to allow for feedback loops in the signal path. I want to have the logic to offset the processing by 1 block within each object instance so I don't have to deal with lots of send receive objects between the modules. Since there can be multiple instances of the same model a send/receive or delwrite/delread within the module would be broadcast to all other instances of that object. I have read up on the block~ object but haven't had any luck using it and it seems to up the resources needed for the program. Are there any other methods that will allow me to accomplish these feedback loops?
-
Feedback Loop without send and delwrite
-
When making an abstraction with [send]/[receive], tables and the like, you need to use $0 in their name, which creates a unique number for every instance of the abstraction. This way you can avoid name clashes.
As for the feedback, you can use [block~ 1] in your abstraction, but I would advise you to use that only in the absolutely necessary part of your abstraction (by placing it inside a subpatch in the abstraction). [send~]/[receive~] only work at the fixed block size of 64 iirc, but you can use [tabsend~]/[tabreceive~] with a [table] or [array] (if you're on vanilla). I've done this and it works perfectly.. -
@alexandros Works perfectly, thanks!
-
would you mind sharing some examples?
-
Here's my delay abstraction. No help file, but it's rather easy. Left inlet takes signal to be delayed, middle inlet takes delay in ms, and right inlet takes feedback amount, between 0 and 1. All inlets are signal inlets.
delay_abs~.pd -
This is what I added into my patches to deal with feedback loops, As long as it exists right after inlets or before outlets it wont get a DSP loop
feedbacker~.pd
Edit: These only add a 1 block offset to the cycle, so if there is very little computation in the feedback loop they will not stop the DSP Loop issue -
My abstraction is very different than @jersupereq abstraction. You can't have feedback loops with mine, it just demonstrates how to use a 1 sample block and $0.