Please review my poly synth voices


#1

Hey guys,
this is work in progress and kind of messy but i though maybe someone has fun looking at this and pointing out some obvious mistakes i am making...

here's the main patch, i limited polyphony to 3 for developement, in the end i might have to split my 6 voice polyphony to 3 axoloti boards due to CPU limitations.

and here's the voice patch. couple issues.
what i am trying to achieve is a 3 OSC synth with several diffferent osc models per oscillator, similar to eg. the waldorf quantum. you can switch from VA waves, to sample layers, to physical modeling or FM oscillators.

the loop play and looping functions work but aren't fully implemented or even patched yet. the alternate output of the oscillator muxers is in "experimental stage"...

also i am still pretty uneducated on exectution order, iirc its left to right then up/down so i tried ordering the objects in a way that seemed to make sense to me. all wrong?

everything is working quite nicely so far but i am sure there is a lot of things that could be done more efficiently and/or elegant. so please advise here...


#2

multiple oscillator models might prove to be hard as each model will take ram, limiting the possibilities of modulation and effects (often keeping the synth rather tame and uninteresting in the end).
I've made quite a bunch oscillators (sss-folder) trying to get more possibilities in harmonic sources.
Eg. wavetable based oscillators in which you can create the timbre of the wave yourself by adding more and more harmonies to the wave (like: phase*harmony->sineshape->level->add to table).
Also have some versions of the factory oscillators (saw, pulse, square,triangle) in a single module, so you can select your wave without the others being played and taking up cpu (blep oscillators).

A possible way to reduce CPU load by different oscillator models would be to embed the module, add an "active" boolean input and use that value to switch off/on the oscillator code inside. Though this still loads the code into the ram, it won't be using the code as long as it ain't selected, saving up precious cpu.

As for the table, you've probably noticed that loading the table using the table-load module, will pause your sound output. In my wave-folder, I have a modded version of the wave-player that loads the table as if it's playing a sample straight off the sd-card. As long as you don't use too many of them at the same time, you can load tables without glitches or pauses in the sound. Though, the module will load the table in realtime (48000 samples/second), so a sample/table of 5 seconds will take 5 seconds to load plus a few mili seconds to open the file as you can notice with the factory waveplayer).
update just trying it myself with a wavetable.. shoot.. this doesn't work correctly. Somehow part of the waveform gets lost when loading..


#3

@SirSickSik thanks so much man!

Yeah the osc objects used in this are not the final choice yet, i plan on having one multi VA, one sample player and one "extra" which is different for each oscillator. the sample player takes the biggest role though. I agree just basic VA can become uninteresting quite quick, so yeah i will definately still do a shootout with all the oscillators and already discovered some of the seemingly hundreds of great osc objects you made!
so far i dont think i am running close to RAM limitations at all, 3 MB for the tables the rest is just a little code. but cpu is at 82% with 3 voices right now. and i think with 3 osc objects (which i could still wrap in one object somehow i guess) times 3 oscillators i should be able to handle modulation? effects will be analog and on an extra FX axoloti anyways.

you made me remember i did do a test with the "bypass/active" if loop a while ago after reading about it here, and i found it actually works so yeah.. if i thoroughly implement this i might be able to run all 6 voices of one axo after all. thanks for the reminder!!

table loading, yeah i actually posted in some other threads about this in the last few weeks and have my own stream-to-table object somewhat functional, just not in this project yet. but i will definately check out yours, will probably be 20 times smoother than mine. i think you might have mentioned this in said other thread too?

edit: here's a current work-in-progress signal flow diagram of the whole thing so there is some context to the patches.