TLDR, here is the program: Metamodule Preset Bank Generator
This is quite a long story for the preset modules in SunVox which everything was happened during creating the Accipiter supersaw module:
In june of 2021, after I have completed the core structure of Accipiter, I didn’t think of a preset module, but I was solving a tedious problem. Normally, the more modules you have, the more routing you must done, and you usually end up with a hugely confusing spider web like the following Aqulia (which is my older supersaw) module:

Lol, If you miss a connection in the controller section, you probably don’t notice it.
Missing a connection, you are doomed since it is hard to trace the problematic connection covered under the web. Thus, I was wondering: If I can send audio and midi to output, can I do the same thing with the control signal?
To answer the question, I made a simple setup; on the surface level, there is a MetaModule pointing to a generator connected to the output:

Inside the project, there is a LFO controlling the sound2ctl:

After leaving the internal project of the metamodule, we can see the analog generator is manipulated by the LFO stored inside the metamodule, suggested that metamodules can all pass audio, midi and control event signal.

Since I have found such property, I can now build a control interface which it only requires a metamodule with full of multictl pointing to the corresponding module parameters. Because every controllers are now pointing to the output, the output of the metamodule will send the control signal to all the connected modules.
Using interfaces to reduce the complexity is actually a design pattern in software development, facade.
We can borrow a similar concept to SunVox: Without an interface, if you want to control 10 controllers for 10 identical modules, you have to connect 100 times since a multictl connect to 10 modules, while you have to repeat 10 times to achieve all 10 controllers. With a control interface, you only need to connect all the controls 10 times internally and another 10 to your target modules, in a total of 20 times. Hence, facade pattern can reduce the complexity from O(mn) to O(m+n).

Control interface in Accipiter
Now I have an control interface, and I can connect it to all of the core sound modules. As you can see, the project is much clear to read, and you have reduced a lot more time on routing the modules:

“Stop talking about the control interface!!! How does it related to the preset module???”. I can hear others screaming because sounds like I am out of topic. It is related since if I can use this trick internally, I can use it externally for creating a preset module. I did that not only to demonstrate such discovery, but also to show the potential of my synth, as I just found while there are a lot of cool sounding modules in the community, I can’t seem to use it effectively due the overwhelmed number of controllers, which is really sad, so I created my first prototype.
Starting from the core logic. Instead of using multictl, I have used a bunch of vel2ctl not only smaller in size, but they also can trigger by a midi input so that I can switch the preset by a key press.
The way to change a parameter is to fire a midi signal with full velocity, and once those vel2ctl modules have received the midi signal, it will send a control event signal to the destination synth, based on the value in the OUT max controller of vel2ctls.
There is a midi out as well, to play a sound of the chosen preset, so user can know which sound they have chosen immediately, without switching modules back and forth.

Externally, there is nothing special which they are just a few copies of the core logic with different settings, and there is a multisynth with Out.port mode based on the note of the keys which each voice is corresponding to a specific key. There are 12 presets, so the initial preset re-occurs for every C notes.
That’s it. this is the original story of my Accipiter presets, and you can download the original preset system in here. Autumn Cheney have inspired from the Accipiter preset module and he made a stand alone version, so you can play around with that also.

Nevertheless, the story is not over yet, as this system has a few drawbacks:
The first problem is the size of the project. The preset module has only 12 presets, but the file size has already reached to 265 kB, which is massive considering that is a module just for switching presets and it does not produce or modify sound. Another problem is the effort; even we now have the interface method to simplify the process, it is still tedious to map all the controllers from the metamodule. Since we are music producers and sound designers (or developers for making modules and writing programs), we shouldn’t waste all our valuable time just to routing the modules and building the same structure over and over again. We must end this suffer, so I had to come up with some solutions.
Instead of storing each preset into a separate core logic, we only need one core logic, but all the preset setting are stored into a pattern.

There are six presets in total; four line per preset while the last line has a stop command.

While all six preset group controls the same set of vel2ctl, to reduce the repetitive use the same structure.
To choose the correct preset, we need to change the playhead externally and precisely to ensure that every automations must be triggered, by using some multisynths with different phase setting. To pointing to the correct position of the pattern in the core logic, we have to based on the following equation:
pos = ( 32768 / preset count ) * n
While n is nth number of presets, started at 0 for the first preset.
As usual, there is a midi out for demonstration, with a delay to prevent race condition which the sound must be played after changed the preset.

External Structure of CaRaCaRa Preset
Despite being more compact due to less number of vel2ctl, creating a preset is even more counter-intuitive since we have to copy everything into a pattern after we have designed a sound. That is the reason why the CaRaCaRa only has 6 presets while Accipiter has 12. We are not deserved to spend the whole day just to routing modules and setting patterns repetitively; hence, as a developer, I must end the suffer, so I decided to hand this task to our computer, by writing a program.
Introducing… This SunVox Preset Bank Generator!!!
This is a c++ console program for generating a compact preset bank for your favorite meta-module! Don’t scared by the console program, all you need is to provide a file path of your sunvox project containing different setting of the same metamodule of your choice! The program can supports up to 60 presets and 96 controllers, so you will have plenty of presets to unleash the sonic possibilities for your modules!
Soar Beyond your Imagination, have fun with the program and see you next time!!!
Hey, my friend! I’m a big fan and myself working an quite a couple projects I’m not able to finalise cause it’s number and my incompetence in prioritisation. Feel free to have a look on my projects and join or develope. I’m incompetent in programming and reduce my part on advanced conception. Would be proud to receive help or inspiration from you.
knd rds
GØ aka мета
___________________________________
ояг – fullspectrumfrequency.band
cø.cc
ꇁDo you have a github account? Or anything equivalent? Or can I find you in the SunVox Discord Group? So that I can have a look to your project 🙂