What is this??
I’ve found a way to develop simple VST panel for my midi gear (e.g. synths) and combine that with the existing Midi Remote features so I can:
- Control my synths/gear from the panel
- Control the panel from my synths/gear
- Have automation lanes, recording and editing of paramters as automation lanes with correct names like “cutoff”, “resonance”, etc.
- Play my synths through Cubase’s “External Instrument” system so that they consider Plugin Delay Compensation
- Save and recall presets for my external gear (without patch change sysex) directly from the Cubase preset menus
So indeed… it is turning your synth into a proper VST experience… much like what we thought or hoped we might be getting with the old device panels system.
This functionality is literally a dream come true for me
I’ve created a second dummy post below this which I might end up popping panels and Midi Remote scripts into for the various (many) things I own.
Example
Here’s my Waldorf Pulse panel (i.e. the orginal version rack mount):
OK - so how…?
So, first up, this is off the back of my feature request for the Midi Remote interface to be expanded to also be able to make device panels to control your extenrnal midi gear (like synths and drum machines and fx). This feature is still my absolute preference, and would be quicker and more sreamlined than this workaround I’ve come up with. Please check out that thread here:
And if that interests you please use the vote feature in the top left of the above thread’s opening post so that a more streamlined integration gets higher up on the to-do list for Stienberg
That thread is a hefty read at times, because I get carried away and type too much. That stands a warning here too - and apologies in advance - because for once I KNOW this will be a long post. But if you have external midi gear and the above interests you, then read on… This might just be a game changer for you too.
Ok… but seriously, how…??
I’m going to assume people know at least some of the basics for setting things up… This is all windows related too, but it all can be achieved on mac as well… here’s the basic steps needed:
-
- We need to setup our midi synth as an external instrument (or external FX if that’s what the unit is). Search online if you don’t know how.
-
- We need to setup a Midi Remote for our synth (or whatever). Currently this limits us to CC/NRPN 7bit and NRPN 14bit… OR if you’re savvy enough you could use the remote API to get sysex, which I’m starting to look into. But, again, search online for “how”. This is the midi controller interface - this is what sneds/recieves controller midi for our extenral synth / device.
-
- We then need to create a VST panel (not VSTi) using external software that has all of the same controllers as our synth / device… and pop this in the first FX insert slot of the External Instrument or FX we created.
- You then assign the midi remote device to this VST panel, assigning each hardware controller to its own dedicated fake controller on the VST you make… so cutoff on your synth is mapped to a knob on the VST panel you make (e.g. called cutoff).
The game changer is step 3 above…
Cubase can nearly do all of this… all we need to do to get this functionality in full is develop a VST FX unit that has controllers on it. The FX is doing nothing - it just routes the audio in straight to the audio out (does NOTHING)… but these controllers that you create (sliders / knobs / buttons / lists) are still registered within the VST as controllers… this means that Midi remote can target these, and they can send data back to midi remote (and back to your equipment).
How to create the VST panel
First up - ANY system that allows you to develop a VST panel can in theory do this… There’s lots of options, and I encourage you to search for options that work for you.
After a lot of faffing arond and getting confused, I literally stumbled on “HISE” which is an open source project for developing VSTi’s and VSTs. It’s focus is on VSTi’s, but it quickly jumped to the top of my list because it’s so SO easy to do the simple panel creation that I needed. The rest of this post will be about HISE and a bit about Mid Remote and what needs to be done there too…
Let’s talk panel creation first though…
Installing and setting up HISE
This will take some time, but I’ll run through the key lessons I’ve learned to hopefully speed things up for you…
Go here and download HISE - it’s free, Java script based for anyone who cares to know…
Run through the installation process:
https://docs.hise.dev/introduction/installation.html
NOTE that this software still needs support software to compile VSTs (window’s visual studio)
This stage is all of the nerdy stuff you need to make HISE work… Let’s run through this here just to help as I found it a little confusing. NOTE - if this sounds overwhelming, keep in mind that I HAVE NO CODING SKILLS at all… If you know any JAVA then you’ll be laughing, sure, but you don’t need any coding… it’s all GUI based and easy once you get your head around it.
You NEED to install support software from microsoft (the free community version of Visual Studio)… Get that here:
Run the installer for the community version (free) and then also install the C++ desktop extensions within that installer process…
There’s also the IPP extensions you get from somewhere else (also microsoft I think)… that I don’t understand and can’t get working so I’ve disabled them. I think that helps with resizable GUIs… I’ll update if I work it out.
When you hit export in HISE it uses these other programs to compile the code into the VST plugin (this is a common system for compiling code).
Now open HISE (if you don’t tell it where to install it installs direct to C: somewhere… program files I think). I suggest you make a shortcut to desktop too.
After you create a project it looks like this:
Each plugin you want to make MUSt have anew project… all the files created for a project are plugin specific.
We STILL need to set this up a little more… sorry… nearly there…! Go Export → Setup Export Wizard…
Go through the list… you should see things checked already if they installed correctly… so these should be green (although like I said IPP isn’t essential)
Runj through the rest of the wizard… and your DONE…
Ready to make your panel!!
Creating a device panel with HISE
If you survived the above, then you’re in… you’re going to find the rest of this more enjoyable lol…
If you get lost in the interface, watch some you-tube basics. You should get the hang of things quickly. Here’s some fundamentals though:
you want to create a panel that ideally matches the direct functions of your external gear… e.g.
- Synth has a pan knob that goes -64 to 0 to +63?? You want that same knob in HISE.
- Synth has wave selecft with 3 options… Pulse, Saw, Tri? You want that same number of variables in your knob, slider or menu.
I’ll quickly run through the main options you’ll likely want, and then I’ll leave it to you…
Let’s add a knob… this type of control (which moves with the mouse) is called a “slider” in VST speak… so that’s what it is here, even though it’s a knob!.. Right click in the main GUI window and add a slider:
When selected the right pane of the interface fills out with variables / options…
So things like the above are important… here we have:
- At the VERY top is parameter ID… this is what the plugin will think it’s called within its own code… this is how is remembers presets etc. It thinks “oh… so knob1 was this value”. It’s important to either leave this as is, or name it something solid you won’t change.
- Then basic properties is the name you SEE in your panel (under the feild “text”)… so call this the same as the synth controller you want (e.g. cutoff)
- Then we have parameter properties… “pluginParameterName” is what the VST paramter list that the USER sees calls this knob… so this is e.g. the name ofd the automation lane it uses, and I THINK this is the name that Midi Remote will see when mapped. For this to work as a parameter you also need to check the item above “Is PluginParameter”.
Component size below these menus is just the location and size of the text box, and the colour windows below that are fun but not essential functions. Don’t worry about these for now.
Below that is component specific properties… THIS is a gold mie of functionality. Match the Min and max values to the synths parameter you’re creating… For typical 7bit midi, this would be e.g. 0-127:
Set step size to 1.0… This forces the value to be whole numbers (1,2,3…), not annoying decimels (1.0, 1.1, 1.2…).
Back up abbove component size you can also set “Defalut value”… so perhaps set this at zero for e.g. a filter attack, but perhaps set it to 80 for master volume. Double clicking your VST knob will jump it back to default
Once you’re done… great! Hit the little HOME image, for a preview of your plugin:
Marvel at your fine work.
Great - so let’s do some more things that took me a while to work out…
Let’s duplicate this knob… select it and hit ctrl-d … GREAT!..
Change the name and plugin parameter name (ID auto updates to next number), perhaps you’re default value… and you’re done… you have your second knob finished already!.. Colour this knob…
Red e.g… Say you want to copy that colour to the first knob?.. select the new red knob, select the component name (e.g. “itemcolour” from the coloumn (not the value, the actual name "itemcolour), go to the top right of the panel and hit the little copy, then select the first knob and hit the little paste symbol.
This has copied this field… the beauty of this approach is you can select multiple properties, copy them and then paste them to multiple items at once… this overwrites the selected paraters, but not all… very handy way to change colours or min/max values etc without overwrting things like names.
How to make a centre detent knob like a pan knob? Well, for 7bit midi this might be just setting “min” to -64; max to 63 and “default” to zero.
What else can we create…
Just quickly, try:
Combo Box… say your synth sends a CC with values 0-2 for wave type… combo boxes are nice and descriptive:
Here I’ve added the CC to name just to explain what selects what, but just type anything that suits in the properties window for the combo box, with each item seraprated by a new line (enter)…
Buttons… perfect for e.g. on/off state items like oscillator syncs; legato on/off…
Most items can be resized by dragging the bottom left, but it can crew up text placement… I leave knobs as is, and resize buttons and lists more frequently.
… And also sizing the actual plugin window…
At the top, click on the text “interface designer” and it’ll collapse that window and show you the basic script editor:
That purple 600, 600 is the default panel size in hieght/width… each grid square is 10, so adjust however you like…
Click the top panel name to go back to the gui editor and hit F5 to refresh the code (you can do that F5 anytime to refresh the code).
Lets add a panel just to organise things… right click,add new panel, and place it over your knobs… Hit the home button to demo… and… wait, you can’t move the sliders/knobs anyomre… that’s because this panel is on TOP of them… let’s fix that… Left of the main GUI is the component list… grab the “panel” item, and just manually drag it above the other items in the list… the top of the list is the BOTTOM of the image… you can now move the sliders again
So here’s what I did while typing this:
Nothing special, but - let’s export this as a VST:
And hopefully that goes fine with no errors… if you get IPP errors, then you’re like me!.. and you have to turn off “use IPP” in the Edit → Settings → Development tab.
Once you export your VST, find it and then manually place it in a VST folder your cubase will recognise… start up Cubase, and load this in as an insert (first in the extenrnal isntrument as I say above)…
WARNING TIME
Now get your midi remote panel, and BEFORE YOU CONNECT IT TO YOUR VST, just make sure you have the Mid Remote min and max settings correct and VST min Maxs setting correct for the actual synth parameter (RTFM)… so if the knob can send and recieve e.g. only 0-2 for e.g. wave type, then make sure both the VST you make AND THE MIDI REMOTE setting are limited to these…Otherwise you can accientally send messages that your synth won’t understand and it’s even possible to slightly f#ck your equipment up if they don’t have a way to handle that… old myth??? NO… I’ve fried my Waldorf Pulse oscillators in the past doing this (about ten years ago), and kinda did it again with my panel here lol… But if you folllow the rules and just send the correct limtis, there’s no issue.
So scary warning aside, and that IS a rare scenario - most synths don’t freak out with incorrect essages like that - go ahead, target one of these knobs or lists and there you go… full remote control of your synth integrated into cubase. Twiddle the knobs around and save them as presets? Then loading a preset sends those back to your synth as parametere changes. Try arming automation and enjoy twiddlig your physical synth’s cutoff as you watch an automation lane appear called “cutoff” (or whatever you named it in your panel)… oh the joy lol…
With this test aside, you can now make any panel you need for any CC /NRPN paramter that the Midi Remote can see and use. Just make sure you have “transmit to hardware” turned on on midi remote. Sysex is possible too with Cubase Midi Remote API scripting… I have no idea at the moment, but will hopefully work that out. If anyone knows, PLEAse reach out and let me know how to send / recieve midi sysex messages within Midi Remote!!
Very nice
A quick thought on midi processing…
Just keep in mind that midi is serial, and hardware needs to process things and does it typically slower than your brand new super computer you’re running cubase on. This means that unlike a soft synth VSTi, where you can go totally bananas automating every paramter you like, a hardware synth might start to freak out if you automate too much. Common issues would be poor timing (a note-on message needs to wait in line for competing paramter change messages, so it may play late), and for anyone who’s tried heavy automation of hardware synths over the years would know, stuck notes can start to occur (where a note-off message gets missed because there’s too many other messages flying around)… You might find yourself wanting to install a “panic button” on your panel that sends an all-notes-off message (I’m doing this for every panel i make… just makes things easier). If you do that use the paramter “isMomentary” in the button parameters so it realeases after being clicked; and create a new button in Midi Remote an manually program in a all-notes-off message there and link the two in cubase.
All in all, use automation sparingly or with the above in mind and you’ll be living the dream in no time!..
Copying items across to a new project…
LAST THING… Using items across projects… like say you want to use your last plugin as the starting point for a new project?.. Well, as i said right at the top the MUST create a new project for each new synth… here’s how you copy and paste from one to another!..
Creat a panel (like above)… put it right at the top of the component list; grab EVRY OTHER COMPONENT (highlight them), and drag and drop them ONTO the panel… they enter it like a folder. This panel now contains ALL of the things you’ve made…
Select this master panel in the list and hit “j”
This code window opens up that has the code for this panel… this panel now contains literally ALL the code for all objects inside it. Highlight all hit ctrl C (i.e. copy this text).
Create a new project from scratch with a new project name… then create a new panel object… this is empty and doing nothing. Hit “J” again, and highlight everything, delete it / copy over it with the huge text content you copied above.
Hit the magic “F5” to compile that code…
BOOM - that panel is now the same as the master panel from the previous project. You could even just save favorite setups to a text file and copy those into new projects if you like.
And… although you didn’t code a thing just now, it feels nerdy in a cool way doing this
Hopefully this is approachable and gets people dreaming up panels for their equipment. Just remember though: Any “presets” you save into cubase are linked to and useful only with VST panel you make… if that stops working or something, then the presets are GONE… so back up sysex and save things you really like, just loike you normally would
Also, feel free to invest time and energy into this, sure, but hopefully Cubase will integrate this functionality into e.g. Cubase 15… which would might make you efforts redundant!.. Invest only if youre like me - not willing to assume cubase will create all the things I WANT (which is fair enough), so I’ll do waht I can to work arond and get that functinality myself. I’m quite happy to spend the time to get this functionality now (and I have a painful number of synths, drum machines and midi controllable fx to program up too… so it’s gonna be a long road lol)…
Also note that I’m currently only doing VST2 exports, because they work… I THINK you can do VST3 with the VST3 SDK installed… perhaps someone can look into that for me!