My first synth, looking for feedback and improvisements


#1

Hey there, so i just got into axoliti like 2 weeks ago, i want to build both a toy-ish synth for my daughter and a more serious one for myself. The architecture on both is supposed to be rather classic, 2-3 osc polyphonic, adsr for filter and amp, some effects. The osc's are supposed to be switchable between some classic VA waveforms and also most importantly some (20-30) simple rompler sample playback choices. for the bibg one i am also playing with the thought of having one axo per osc and including even more synthesis forms, fm, wavetable etc, so you could have 3 totally different osc engines running parallel. i think this would be way to much to ask from a single axo?

so i have a basic version running surprisingly nice already. 6 voice poly, with each voice playing a VA osc and two sample layers at the same time. here's some screenshots:


single voice sub patch:

please ignore the abandoned disp and vca objects and pointless mixer channels, they were for debugging/i just now realized i should eb using the vca over the math mul, to get k-rate interpolation.

now what i'm looking for right now is general feedback and hints. since this is my first axo project and also the first time coding in like 20 years. i am running into CPU limitations with this patch already (currently around 90%). While that would even be ok, i could just use 2-3 axos in series for effects and things, i am also looking for ways to optimize the CPU efficiency. eg. i think streaming from SD might make a lot of things easier and lighter on the CPU, but couldn't find a ready-made pitchable player module. i also tried benchmarking the CPU load of several OSC objects, here's my finding for 6 voice plyphony - not sure if there's a list or anything like this?

Brds fm 10%
Play pitch loop 1mb table 12%
Saw sync 14%
Saw medium 3%
Brds pluckd > 20%
Brds saw 4%
Brds square 7%
Brds triangle 5%
Brds vowel 20%
pwm 22%
supersquare 12%
PTRSaw 7%
EPTRSaw 4%
Sptnk multi 6%

there's a couple more questions i have that i will keep adding to this thread, but feel free to post any notes, ideas or thoughts you guys have!

edit: adding random questions here:

  • does it make more sense to have the midi CCs linked in the subpatch, or copy all parameters to parent patch and assign CCs there? probably makes a difference for the preset system? same with the midi note/gate in. main patch? i probably can have one in both?

  • would love to add some meta data to each of the samples, like NAME, LOOP START/END... how would i go aout this? do i have to manually parse a txt file from sd card or something like that? how can i dynamically assign the loop-parameters on play_pitch_loop? just add inlets instead?

  • the table load via midi cc gives me audio dropouts of about half a second and makes everything stutter while i move it. other than that it works perfect though. is that the usual loading time for a table or might that be caused by the CC sending like 100 triggers in a row. when being touched? should i insert some kind of sample&hold there so that it triggers the load object at most every 300ms or something like that?
    edit: i added a sample and hold in the midi code, while it seems to work perfectly and limits triggers to one every third of a second, i still get the dropouts. from reading the forum more i gathered this actually is the table load. clicks could be prevented with quick fades but faster sound change could only be achieved with streaming or preloading? what if i add a third table, which preloads the new sound, once its finished loading the playing table gets overwritten with the preload table - would be faster ram operations only then, no sd card involved?