After a few days more work on this algorithm, I have managed to migrate most of the timing and cell selection logic stuff to the DSP side, and the timing is solid there. The trouble is, the likely objects that I wanted to use to express the logic of this algorithm are on the control side, and may only have murky counterparts on the DSP side.
For example, using an LFO to scan through a a bunch of sequencers seemed like a reasonable approach to generate triggers for the envelopes, but the LFO doesn’t have a true sawtooth, so all the sequencer stages fire during the LFO “flyback.” I worked around this by gating the output of the LFO when it was falling, which is a sort of ugly bandaid, involving a PICODELAY, COMPARATOR, BOUND, and CROSSIN.
This sort of issue popped up a few times when trying to do moderately complex logic things on the DSP side. There are still a couple things I’m trying to improve in this patch, but it’s right on the edge of what the Orville will load. Here are a couple longish examples of the now usable patch in action:
These are both real-time improvs