I need to rev ASPiK for the new VST3 SDK 3.7.
In addition, I made a couple of changes to help with synth plugins while working on the new synths for the new synth book - nothing big and won't break old code.
I have a few RackAFX feature requests for updated Status Window functions and fixing an edit box, and the need for a string-control that can accept and transfer a string (like a file path).
I have also fixed a few annoyances with the copy/move when copying/moving blocks of controls, which I used a lot with the synth plugins, which have 50+ controls each.
If you have any reasonable feature requests for RackAFX and/or ASPiK, let me know.
Welcome back and congratulations on completing your synth book update. I really look forward to reading it when it's done.
ASPiK is great but since you asked here's my wish list of features, obviously don't feel compelled;
⊗ Better preset management. Mainly the ability for the end user to save, recall and overwrite presets from within the GUI.
⊗ Removing the FFTW dependency for the FFT spectral display. Perhaps https://github.com/mborgerding/kissfft or similar could be a good alternative. It has a simple BSD-3 clause.
⊗ Removing the FFTW dependency for oversampling. https://github.com/JayKickliter/Multirate.jl for instance has an extremely open expat MIT licence.
⊗ Customizable backgrounds and font selection for jazzing up COptionMenu.
⊗ A method for controlling CViewSwitchContainer via parameter rather than a GUI linked switch, so it can respond accordingly to preset changes.
I definitely think ASPiK is already an amazing platform though. Thanks again for all of your hard work.
1) preset management: this is supposed to be done via the Host DAW, and Steinberg, Apple and Avid all issue warnings about maintaining presets in the plugin (though many vendors ignore/violate this suggestion, especially synth plugins whose presets have scores, or even hundreds of parameter settings). Factory presets are supposed to be "burned in" but also presented to the host so that they may be combined into one drop-list. Using the plugin to maintain presets opens up many cans of worms, especially with automation and state save/restore. If you want to manage presets from within the plugin itself, you'd need to add that code manually. And, I am guessing that no matter how you implement it, someone will want a different mechanism, or it won't make sense to them.
This very issue pops up on the VST3 Forum from time to time, and has other implications for exposing new bugs, especially if you want to use program changes to change presets (e.g. from a synth/MIDI)
2) FFTW: I can't really change this, in part because it is published already in my book. However, if you (or anyone else) would like to do this coding and write the modules, that would be great!!! The same thing goes for sample-rate conversion. You can fork the repository here, and make the changes, add the other libraries etc... Then you can make a pull-request to merge the new code.
Once you get that working, I can change the ASPiKreator to allow different choices for the FFT linking to allow the user to choose. I know that FFTW is disliked because of its licensing, but I have been burned far too many times by relying on 3rd party code and libraries, where either something changed in a major way, or the code/libraries simply vanished for whatever reason - for my own development, it is one thing, but for a published book that will likely outlive those links you posted above, it is too risky. That is why I would prefer to see these as additions/options (via GitHub) rather than replacements.
FFTW isn't going anywhere. And, if nothing else, you can use it to profile the efficiency of other FFT libraries and make comparisons specifically as related to ASPiK's implementation. I would love to see those comparisons and I'm sure others in the community would as well.
3) COptionMenu - I'm not sure if you are talking about RackAFX or ASPiK, but in either event, the COptionMenu is already customizable via the VSTGUI4 editor. If you use the VSTGUI4 editor and add those items, they will be preserved if you use the RackAFX GUI designer. As with the other controls, you can subclass it as a custom view - I did this for my new synth projects that dynamically load strings. If I'm missing something here, let me know.
4) The UIViewSwitchContainer default behavior uses any GUI control that can issue integer control values as the switcher - CSegmentButton, CHorizontalSwitch, CVerticalSwitch, and COptionMenu all issue integers rather than floats. This means you can link an COptionMenu as the view switcher, and have that connect to your preset selection. In at least one case a while back, a user had linked an invisible option menu control to a non GUI-bound parameter and figured out a hack to change the UI switching programmatically with the send GUI update function.
You can also design a sub-controller to connect the view switcher to other controls and I did this a long time ago, to implement the old fashioned LCD control with alpha wheel and selection buttons. There is a sub-controller example in the custom views projects.
When I released ASPiK in January 2018, I had made the decision to make it fully open source, hosted on GitHub so that the community could contribute changes, upgrades, bug fixes, etc... many of the same things you are requesting here. The repository has been forked and starred many times, but to date (nearly 2 years), not a single person in the community has made a pull request to merge their new functionality into ASPiK. I think it seems to be a one-way deal, and perhaps I made a mistake in this decision.
I'm distributing the new synth projects as open-source as well, with the Git repository already sitting there, because of the way these C++ synths and objects are non-API and non-plugin-framework specific, and of course in hopes that I will get community contributions.
RackAFX is different, and not open source, so I can make those changes specifically on my own, due to feature requests, etc... Currently, the only major request I have is for a MacOS version.
The ASPiK VSTSDK 3.7 integration was nearly instant (they changed the location of the artwork, as you found out), but they also added a new interface, and you will need to modify your VST3 constructors if you want to get host BPM, time signature and buffer locations. I've already added that to the next ASPiK and will add a Forum post to show you what to add once I've merged the code on the Git repo - but some plugins don't use that information, which may be the reason that they added a new interface for your plugin to expose it's needs at construction time.
I will for my work add these elements in my personal templates:
- all preparations for including CustomMovieBitmaps
- all preparations for including CustomTextLabels
- all preparations for including CustomDraw areas
- Basic implementation of MIDI-in (btw, which hosts do support MIDI-out?)
- and an implementation of 64-bit audio-processing
Thank you for the good reply.
1) I wanted to spend some time dealing with that preset management issue myself before I was sure I should continue using the framework. I understand that Steinberg would like to Host to manage this duty as I would also, but as for the most part they don't, then it's hardly an option to deny that extremely common/basic facility to the end user.
It took some time but I worked something out and it doesn't break or alter the DAW' s or Steinbergs normal preset operation in anyway (i.e it can handle Program Changes). However as you forewarned there's probably no perfect solution. Certainly had to deal with a lot of wormy design choices and bugs along the way, but I do have a basic functionality now. I can load, overwrite and save as to a set number of presets from a set file, at a set location. I'd be more than happy to outline the approach I've taken to you or any other forum users interested, but it's nowhere worthy of a git pull at this stage.
2) I'm knee deep in several other projects which don't yet require a FFT display. But I think it sounds like a good project to get an open source version up and running in the future. I haven't messed with FT's before though or studied the math's yet, so it might be a while before I attempt to tackle this.
2.5 )Actually I probably should have suggested R8Brain by the developer of Voxengo as it seems to be the gold standard of resampling. But for the moment I'm also unsure how to implement that into the ASPiK framework myself.
3. )I've also tried subclassing the COptionMenu but have found that Draw() and other overwritable functions didn't allow to change the visual appearance of the drop down which is always grey and containing platform font. I don't know if that is changeable but it's no big deal as many VST's currently offer that style of menu and you could always use a tabbed view displaying a CSegmentButton to achieve that same effect but with a bit more effort.
4.) I had been finding that the UISwitchView won't respond to a bound parameter control no matter what is happening (but only if the GUI is open!). I recently raised a post at the VSTGUI4 developers forum about this and the user Pongasoft has somewhat confirmed the issue, however Arne maybe thinks othewise?
I only now just noticed that you wrote someone had hacked a method for a non bound control to operate this way. That's an amazing effort, but surely it needn't have been hacked in the first place? as I'm way out of my depth here though, would you mind giving an opinion about that thread. Sorry to have dragged your name in, I had thought my issue was VSTGUI4 specific at the point of posting there.
Thanks for the new update as well.
Not sure wha the COptionMenu issue is, exactly, but that control is quite complex as it relies heavily on the underlying platform control (Mac vs. Win edit boxes). I have successfully subclassed the COptionMenu and there is a new version if it in that latest custom controls object files.
Could you describe your UIViewSwitch issue in more detail? I am using it all over the place in one of my new plugins, that include UIVewSwitchers embedded in more UIViewSwitchers without issues.
Also, is the "not replying to a bound variable" the controlID for the view switching, or is it a control embedded in one of the sub-views?
Most Users Ever Online: 152
Currently Browsing this Page:
Guest Posters: 1
Newest Members:lance, Mistahbrock, Jas, Rowan, sojourn, fabhenr, rg1, Niklas, Wutru, Tim Campbell
Moderators: W Pirkle: 573
Administrators: Tom: 74, JD Young: 80, Will Pirkle: 0, W Pirkle: 573, VariableCook: 3