I am hosting VSTs. I built a DAW. I want that DAW to handle VST gracefully. And I am learning – a bunch…
Generic user interface
There are good VST effects that do not provide their own windows. I have to create them. This is easy, as each VST can provide information: how many controls, type (continuous or discrete), names, and so on.
I can do this for all VST. I can do it even for VSTs that have their own windows.
Handling VST windows is the difficult part. Handling the sound processing is the easy part. Different systems – Windows, Linux, and MacOS – handle VST sound processing in the same way. How they handle VST windows though is very different. It is a lot of work for programmers. If I can create VST windows of my own and ignore the ones provided by VST developers, life would be easier.
But I cannot. Developers don’t do the extra work to give parameter titles. They don’t distinguish between a button that has two values (on and off) and knobs that can take many values. They don’t define the user values of controls (e.g., 20 Hz to 20 kHz for frequencies instead of 0 to 1). If I make my own windows, they end up full of knobs. There are knobs that should have been buttons or something else. All knobs go from 0 to 1 even if they should just have only on and off. All of them are called Parameter 1, Parameter 2, and so on. It works, but it is not pretty.
I can’t blame the VST developers. They care about their graphics. There is nothing wrong with that.
Effect tails
Most effects have a tail. They may produce sound even after incoming sound has stopped. A delay effect may delay the signal by up to 1 second and so it will have a tail of 1 second. The input may stop, but there is still the delayed signal in the output.
If I am hosting the effect, I should be able to handle the tail. You don’t want the delay to stop before its output is complete.
In fact, almost all effects have some tail. Even a compressor, simply because the computations that check the amplitude of the sound delay the sound by a tiny bit, will have a tiny tail.
But then the effects I am handling say they have an infinite tail. Like, how long is your reverb?
I am writing complex code to handle potentially infinite tails. Yes, the sound will decay eventually, but it might be in 1 second or it might be in 10 seconds.
64-bit processing
I am not a fan of 64-bit sound data. Most people record at 16 bits or 24 bits. Most DAWs probably process at 32 bits, although I could be wrong.
16 is plenty. 16 can handle both the dynamic range and noise floor appropriate for human hearing. 24 bits may provide some protection against noise introduced by computations. 32 is a huge improvement. 64 is just going overboard.
I have tested potential errors at 16 bits and 24 bits, like those from rounding. They are small. I’d be surprised if anyone could hear the difference. There could be some effects that are really, really computationally intensive – a multi-band, multi-threshold compressor / de-esser or a linear phase parametric equalizer. I’ve worked on both. Yes, they do a lot of work – so much so that it is hard to test automations on top of controls. The computer can’t handle the extra work. But they work perfectly well at 32 bits.
VSTs will handle 32 or 64 or both. You must ask the VST which one. I need more code to handle both and extra code to ask the VST which it should receive.
So many effects
I am testing various effects of course. I am getting my hands on as many free ones as I can.
I now have effects called something like "Milky Way" that sound like a compressor but have controls like an equalizer. What is it? How am I supposed to use it and what should I expect to sound like?
Thankfully, there is no shortage of effects. It is sad though. I bet some of these are great, but nobody will use them.
Errors? Not many
VSTs crash right? Not really. I am quite impressed by both the VST base created by Steinberg and the VST effects available online. There are a lot of reverbs that are better than the ones I created for Orinj, although the Orinj simple compressor is probably better than most compressors out there and one Orinj equalizer is more intuitive.
We will put out version 9 of Orinj soon – one with a completely revised use of VST (processors, not instruments), new automations, new SoundFont and MIDI handling, and so on.
A lot of work went into handling VSTs. I am thinking about this. The whole VST thing is in C/C++. If a VST crashes, there are no good ways of handling it. And then, we will never know whether it is the Steinberg VST base (unlikely), the work of some VST developer (more likely), or something in Orinj (much more likely).
Thankfully, there should be no loss of sound data in Orinj. In fact, we’ve recorded and mixed multiple songs on it and never lost data. Only in one case did we lose a session, but the tracks of the session were still there. All we had to do was import them.
I am done with this for a bit. VSTs in Orinj are stable (on Windows and Linux at least). I am enjoying a few.
authors: mic
Add new comment