Code: Select all
operator 1 modulates 2, 2 modulates 3, 3 modulates 1.
1. All oscillators are rendered each block, this output is cached somewhere and the destination oscillator updates its phase with that cached modulation. Repeat this process in each block/sample.
Code: Select all
each block:
step 1: render 1, 2 and 3
step 2: modulate 2, 3 and 1
2. Somehow order the oscillators depending on their connections: the sources are rendered first, then they update the destination's phases with the cached output, then the destinations are rendered. Stay in a loop until all the modulations have been performed.
Code: Select all
each block:
step 1: render 1
step 2: modulate 2
step 3: render 2
step 4: modulate 3
step 5: render 3
step 4: modulate 1
I'd really love to mantain a "block rendering" aproach (i.e rendering the X samples of the oscillator each block) instead of tick rendering since it's much more cache friendly and better for optimizations.