Per sample processing and loops in graph


Is there a way to process a graph or a sub graph in per sample way or is it only block based processing ?

Another interrogation is : is it possible to create loops in a graph ?

As example, to build a modular synth, it is important to handle loops and per sample processing on an entire graph or only a needed sub part of it.

All processing within SOUL is specified per sample - the processor loops advance time one sample at a time, and graphs simply indicate how the processors and other graphs are connected together without reference to whether processing is on a sample by sample or block level.

How this is implemented (the fact that the audio device is block based) is handled by the compiler and SOUL runtime, but as a writer of DSP in SOUL you don’t get involved in the block based nature of the callbacks.

As for loops, the answer is currently no, they are not supported, but yes, they will be. Loops imply delay, so how this will appear is syntax to specify a loop by specifying a delay on a graph connection, which will break the implied cycle (where an output depends on itself), and will allow the graph to be rendered efficiently. This feeds into a discussion about delay compensation which is another aspect of the system that is currently unspecified, but we will want to handle automatically within the graph.

Good news. In my opinion, it is a good choice to let the compiler and the runtime to choose when it can do loop processing and when it needs to do per sample processing.

About the loops, I know it is a very complex problem. And to avoid the delay, a root finding method can be difficult to declare with explicit way in your language.

Keep continue the good work !