Hi everyone,
I'm trying to build a polysynth that can be used in a live-looping manner (synthesizing one "instrument" loop at a time over the playback of loops previously created).
I’ve been considering different approaches to polyphony and would like advice on CPU usage and DSP scalability on a Teensy 4.1 with audio board and an additional 8 MB PSRAM chip.
When I play a note, I allocate a free voice from the pool and configure it using the instrument’s parameters. When the note ends, the voice is released back into the pool.
This seems to be a the standard polyphonic synth architecture.
-> Question 1 : How many voices can I realistically expect, given I don't use CPU hungry effects and 1 oscillator ? What about 3 oscillators per voice (with detune) ? I've seen up to 8 voices polysynths (overclocked) and I'm afraid that wouldn't be enough for my use case.
-> Question 2 : How many instruments can I expect (broadly speaking) ?
-> Question 3 : Does a module that is not patched to anything still consume CPU ? If not, can dynamically disconnecting the oscillators (like in the library example) to the rest of the DSP chain of the instrument decrease CPU usage when the note is off ?
Each instrument is effectively printed into audio and then mixed in playback rather than continuously synthesized.
This minimizes CPU load but shifts the problem to memory bandwidth and storage management.
-> Question 4 : How many instruments can I expect (playing loops around 1 min each) ?
I'd love to have a list of modules on my TFT display and be able to add them and patch them on the fly.
I'm a beginner regarding a lot of concepts at play here so please tell me if I've understood anything the wrong way (and I hope I'm making sense, english is not my first langage).
Thank you so much in advance!
I'm trying to build a polysynth that can be used in a live-looping manner (synthesizing one "instrument" loop at a time over the playback of loops previously created).
I’ve been considering different approaches to polyphony and would like advice on CPU usage and DSP scalability on a Teensy 4.1 with audio board and an additional 8 MB PSRAM chip.
1) Voice Pool (parameter-based instruments)
I define a fixed number of voices. Each voice is a reusable DSP instance (oscillator + filters + envelope + FX state). Instruments are just parameter containers (structs), not actual DSP chains.When I play a note, I allocate a free voice from the pool and configure it using the instrument’s parameters. When the note ends, the voice is released back into the pool.
This seems to be a the standard polyphonic synth architecture.
-> Question 1 : How many voices can I realistically expect, given I don't use CPU hungry effects and 1 oscillator ? What about 3 oscillators per voice (with detune) ? I've seen up to 8 voices polysynths (overclocked) and I'm afraid that wouldn't be enough for my use case.
2) Per-instrument DSP chains (fully duplicated engines) but with dynamic patching
Each instrument owns its own complete DSP graph: oscillators, filters, envelopes, and effects are instantiated per instrument and they are all running in parallel.-> Question 2 : How many instruments can I expect (broadly speaking) ?
-> Question 3 : Does a module that is not patched to anything still consume CPU ? If not, can dynamically disconnecting the oscillators (like in the library example) to the rest of the DSP chain of the instrument decrease CPU usage when the note is off ?
3) Single DSP chain + audio looping (render-and-playback)
I only run one active DSP chain at a time (1 instrument). When I play something, I render it into an audio buffer (loop), then stop or freeze the synthesis and replay it using a loop player (e.g. SD / PSRAM-backed buffers), stacking multiple recorded layers.Each instrument is effectively printed into audio and then mixed in playback rather than continuously synthesized.
This minimizes CPU load but shifts the problem to memory bandwidth and storage management.
-> Question 4 : How many instruments can I expect (playing loops around 1 min each) ?
And last but not least :
Question 5 : Is it possible to instantiate modules at runtime like in this example from the library where it's done with AudioConnections ?I'd love to have a list of modules on my TFT display and be able to add them and patch them on the fly.
I'm a beginner regarding a lot of concepts at play here so please tell me if I've understood anything the wrong way (and I hope I'm making sense, english is not my first langage).
Thank you so much in advance!
Last edited: