Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Vital synth MATRIX data can not be controlled as parameters #212

Open
tiianhk opened this issue Jan 5, 2025 · 5 comments
Open

Vital synth MATRIX data can not be controlled as parameters #212

tiianhk opened this issue Jan 5, 2025 · 5 comments

Comments

@tiianhk
Copy link

tiianhk commented Jan 5, 2025

Hi,

The MATRIX data in a synthesizer plugin shows which source (e.g., filter/envelope/LFO) is applied to which destination (e.g. filter cutoff frequency). An example:

Screenshot 2025-01-05 at 02 49 48

Using the vital synthesizer, I found that the matrix data can not be controlled as parameters: If I use synth.open_editor() to add a row or remove a row from the matrix, the parameters I access via dawdreamer won't change (I have compared all the parameters before and after the change). Thus, synth.get_parameter(idx) can not be used to read data from the matrix and synth.set_parameter(idx, value) can not be used to write data to the matrix. However, save_state() and load_state() are able to capture such changes, but manual effort is needed.

As serum also has matrix data, I wonder if anyone has encountered a similar problem and knows why this is happening?

@DBraun
Copy link
Owner

DBraun commented Jan 6, 2025

I have examined Vital and Serum and have the same conclusion. These matrix routings can't be changed from the VST API of getting and setting parameters. As far as I'm aware, no one has reverse engineered the Serum preset file format. In theory, if you did, you could make changes to the text file and then those changes could show up as different matrix routings. Vital's preset format is JSON, so it should be possible to programmatically change those files and then load them as presets, resulting in different matrix routings.

@tiianhk
Copy link
Author

tiianhk commented Jan 7, 2025

Thanks! I can confirm that the matrix routings are explicitly saved in Vital preset files under ['settings']['modulations'] and one can programmatically change them. However, to my knowledge there is currently no tool that converts Vital presets into Dawdreamer states, which enables audio rendering w/ python.

This can be linked to an old issue #131. Following the suggestion you gave, I've spent some time trying to extract JUCE parameters from Vital presets, mainly according to this file and this file from the Vital repo. I haven't finished the code, but it seems that 771 out of 775 values under the [''settings'] key in Vital presets are transferrable. The non-transferrable ones are ['modulations'], ['lfos'], ['samples'], and ['wavetables'], because I can not find corresponding keys in parameters accessed via DawDreamer (this is kind of expected, because ['samples'] and ['wavetables'] contain even audio data). I'll give an update if I finish the code. If you want to show the parser as an example as said here, we can do that.

Anyway, do you have any insights on how to convert the ['modulations'] (which includes the matrix routings), ['lfos'], ['samples'], ['wavetables'] data to Dawdreamer states?

@DBraun
Copy link
Owner

DBraun commented Jan 7, 2025

Sorry I forgot that Vital presets aren’t FXP presets and can’t be loaded via DawDreamer. You’d have to dig into the Vital source code to automate this.

@DBraun
Copy link
Owner

DBraun commented Jan 8, 2025

New module for this! https://github.com/DBraun/Vita

@tiianhk
Copy link
Author

tiianhk commented Jan 8, 2025

This is crazy!! I'll give it a try tomorrow. I can never expect you're working on such a project when I started this issue. Much appreciated for sharing it!!!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants