-
-
Notifications
You must be signed in to change notification settings - Fork 96
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
VST2: Implement programs #401
base: develop
Are you sure you want to change the base?
Conversation
d0b6268
to
6e3d846
Compare
This is not up to spec. Say your plugin has 8 programs, and uses states. We need to query the full state of those 8 programs during load so that a save chunk operation is able to store this info. This is the main reason it is not implemented, it is just a big waste of memory for any non-trivial plugin. |
A few other notes:
|
So when and how I haven't seen those two methods invoked in VST2 implementation. Seems that they have no effect in VST2 builds. This patch is just to let them work. In my project, |
The current DPF implementation is none for this, which is why those methods are not called. As I said, if we want to expose those we need to have quite a few other extra things on top. It is not just a matter of mapping the calls, that is not how things work regarding presets in VST2.
again: we cant simply map the vst2 set-program to dpf load program, that is not how vst2 plugins are supposed to work. say your plugin has 128 parameters and 50 programs. I am not against having this implemented in VST2 for DPF, but it really needs to be proper. |
Thanks for your patient and detailed explanations! According to your instruction, the only way conforms to VST2 specification is to cache all the states of programs. The specification is somewhat troublesome on practice, so I understand why the program feature is not implemented. My implementation seems to be non-standard. Although non-standard, it really fits with my own projects, and in a way it gets rid of the large storage of programs. This is how my implementation work:
You can view my code in amsynth (mentioned in the head of PR) for details about practical usage. If this patch is unsuitable for merging, I will keep it myself. |
yup, so when plugin state (not dpf related, but with the whole plugin market) started to get big and complex, plugins also started to drop vst2 factory preset implementations. Now with VST3 the situation is a bit different, so myself and others just stopped caring about this.
you are correct here. and in my opinion we should not add to more vst2 broken plugins that exist out there |
Why I want to implement program for VST2 is that many VST2 plugins supports it. For example, Memorymoon series, MixCraft's Classic Effects. But they are old plugins (maybe were born 10+ years ago), only providing VST2 versions. During this discussion, I start to consider that implementing programs for VST2 is not really essential. The biggest problem is: host-side VST2 program implementation is not universal. For example, my amsynth fork has 3000+ programs, however:
Also, I spotted that REAPER's factory plugins are also in VST2 versions, but they don't implement programs, instead they use RPL (REAPER user preset file). So in conclusion I may prefer built-in preset manager instead. (But I will still keep this implementation in my own fork.)
By the way, I have found that you use a parameter "Current preset" to allow user to pick a program, and However, it could be better if DPF can implement VST3 factory programs as drop-down menu. U-he's VST3 ports supports loading their factory programs (maybe user programs as well) into host's drop-down menu, which is similar to VST2's behavior. |
This should be handled by the host I think, DPF already uses a specially designated parameter to list the programs. can you show in pics how these are different? |
This is the VST3 version of Dexed. It's built with JUCE. Perhaps JUCE handles VST3 programs in another way. What's more, JUCE allows developer to change the program list on demand. For instance, when user loads another program cartridge, host's preset drop-down menu will be updated conforming to the cartridge. (Some VST2 plugins also have this feature, e.g. Xhip synthesizer, Memorymoon series.) |
7599a6e
to
52c2e78
Compare
59cc6ed
to
470c5b7
Compare
8507aec
to
7cd4819
Compare
I've implemented built-in program access for VST2.
It has been tested in my DPF port of amsynth. Related source code:
void AmsynthPlugin::initProgramName()
andvoid AmsynthPlugin::loadProgram()
)