how to work around midi in VST3?
-
- KVRAF
- Topic Starter
- 1972 posts since 14 Mar, 2006
In addition to the above, the output from a VST3 plugin is also problematic. So if someone is attempting to make a helpful midi plugin for processing switching or other complicated stuff that is currently not supported by ExpressionMaps, for example, then they might write a VST3 midi plugin...except...that in addition to problems with the midi coming into the plugin in separate queues or data structures...the only way to get some of those non-note events out of the plugin is via the legacy option..again...seperate queue....so exact event synchronization will be lost.
MacPro 5,1 12core x 3.46ghz-96gb MacOS 12.2 (opencore), X32+AES16e-50
-
Jeff McClintock Jeff McClintock https://www.kvraudio.com/forum/memberlist.php?mode=viewprofile&u=56398
- KVRist
- 413 posts since 30 Jan, 2005 from New Zealand
This is absolutely about the difference between hardware and software systems.
Software plugins don't use a serial bus. They use timestamped events. Timestamped events have no 'order' beyond the timestamps themselves.
The answer is not to twist software into conforming forever to some ancient hardware spec, but rather to adapt to the new reality.
-
- KVRAF
- Topic Starter
- 1972 posts since 14 Mar, 2006
you are incorrect again Jeff McClintock. Software also uses "queues" which are essentially the same thing as a serial hardware bus. Why would you choose to arbitrarily ignore that when it is still needed and useful? You are mis-characterizing completely the point of this. has nothing to do with hardware and nothing to do with 7bit raw data.
MacPro 5,1 12core x 3.46ghz-96gb MacOS 12.2 (opencore), X32+AES16e-50
-
- KVRAF
- Topic Starter
- 1972 posts since 14 Mar, 2006
to what dragon said earlier...if Steinberg found a way to actually and literally FORCE all VST3 developers to use all the advanced features... we probably wouldn't be in this mess, though Steinberg would also need to change VST4 to also provide a way to synchronize midi events coming out of the plugin as well, right now it just slapped on the legacy out feature, but synchronization is lost with that.
So VST4 needs to be a proper and complete abstraction that provides for this synchronization.....AND....force all VST developers to use those abstractions....not only plugin developers, but VST host developers as well.
As things sit right now...VST3 is broken for certain midi application and that is just a point of fact...that apparently....Steinberg continues to wish to ignore...but the problem does in fact persist...and from the sounds of it, will continue to persist for many years to come.
simply stating that all VST hosts should update their code to Steinberg's abstractions is not realistic and it has left musicians in the cold and confused for over 10 years.
So VST4 needs to be a proper and complete abstraction that provides for this synchronization.....AND....force all VST developers to use those abstractions....not only plugin developers, but VST host developers as well.
As things sit right now...VST3 is broken for certain midi application and that is just a point of fact...that apparently....Steinberg continues to wish to ignore...but the problem does in fact persist...and from the sounds of it, will continue to persist for many years to come.
simply stating that all VST hosts should update their code to Steinberg's abstractions is not realistic and it has left musicians in the cold and confused for over 10 years.
MacPro 5,1 12core x 3.46ghz-96gb MacOS 12.2 (opencore), X32+AES16e-50
-
- KVRAF
- Topic Starter
- 1972 posts since 14 Mar, 2006
and even further to all of that...if Steinberg would fix these glaring midi problems with VST3, I think just about all plugin developers would be ready and willing to leave VST2 behind for good. The reason a lot of people continue to use VST2 is precisely because of these problems with VST3. So then Steinberg basically got frustrated with the fact that so many people are avoiding VST3 and they made the legal announcement that new developers can't get VST2 license any more.
That has not solved the problem at all!
People that still have VST2 licenses continue to develop for VST2 because of these problems, not because they are too lazy to move to VST3...great for them, but new developers can't get the license...and can't solve their problem either because VST3 is broken for the midi scenarios I have outlined. So the situation we are in now, at an industry level is that....workable solutions for musicians using a wide variety of DAW hosts cannot be provided by VST3, for the reasons stated...and VST2 cannot be provided either since Steinberg laid down the legal hammer.
That has not solved the problem at all!
People that still have VST2 licenses continue to develop for VST2 because of these problems, not because they are too lazy to move to VST3...great for them, but new developers can't get the license...and can't solve their problem either because VST3 is broken for the midi scenarios I have outlined. So the situation we are in now, at an industry level is that....workable solutions for musicians using a wide variety of DAW hosts cannot be provided by VST3, for the reasons stated...and VST2 cannot be provided either since Steinberg laid down the legal hammer.
MacPro 5,1 12core x 3.46ghz-96gb MacOS 12.2 (opencore), X32+AES16e-50
- KVRian
- 1253 posts since 31 Dec, 2008
To ignore MIDI is to live in medieval.
And to connect hardware to software. What else do you have as an alternative in VST3 to connect hardware to software (thats is currently supported by most hardware) ?
Not all per plugin.
The 14bit standard is already there in MIDI 1.0 yet very few seam to use it. And you don't even need NRPNs to do it.
www.solostuff.net
Advice is heavy. So don’t send it like a mountain.
Advice is heavy. So don’t send it like a mountain.
-
- KVRist
- 65 posts since 24 Jun, 2005 from Berlin, Germany
MIDI is a nice protocol to connect hardware. --> and hardware is to connect to the humans!
I am not convinced to abandon MIDI 1. MIDI 2 is not even better than OSC, which has been mostly abandoned for no good reason.
I am not convinced to abandon MIDI 1. MIDI 2 is not even better than OSC, which has been mostly abandoned for no good reason.
before time there was no time
-
Jeff McClintock Jeff McClintock https://www.kvraudio.com/forum/memberlist.php?mode=viewprofile&u=56398
- KVRist
- 413 posts since 30 Jan, 2005 from New Zealand
Did you realize that the 14bit standard has been flawed since the beginning?
Basically to support 14-bit MIDI CCs one has to choose between two kinds of broken:
- Accurate timing but inaccurate glitchy values which occur between the time of receiving an MSB and an LSB
- Unwanted latency after receiving an MSB while you wait for a matching LSB (that may never arrive, because LSBs are optional).
https://community.vcvrack.com/t/14-bit- ... -0/1779/50Basically, 14-bit MIDI is a mess. The next person that asks me “Can you implement 14-bit MIDI?” I’ll tell them their request is not specific enough.
and here
https://community.vcvrack.com/t/14-bit- ... -0/1779/17There is some time Δt between the CC and CC+32 messages. If I can’t assume that all CC messages are guaranteed to send both messages (because some are 7-bit), I can’t wait on CC+32 after receiving CC. I have to set the upper 7-bits immediately. This would result in non-monotonic jitter as you monotonically increase the value of the controller.
- KVRian
- 1253 posts since 31 Dec, 2008
Yes there are issues, but they are not unsolvable. As I've implemented 14bit my self:Jeff McClintock wrote: ↑Tue Jan 26, 2021 2:12 amDid you realize that the 14bit standard has been flawed since the beginning?
Basically to support 14-bit MIDI CCs one has to choose between two kinds of broken:
http://www.solostuff.net/product/SD20-M ... Interface/
http://www.solostuff.net/product/SD13-C ... Converter/
The main problem is that the standard is not clear about which message to send first. MSB or LSB. Assuming that LSBs are optional, one could say that MSB has to be first. There is a solution for both situations detailed in the links above.
You have to realize that MIDI was made in the days of 8bit hardware. So I don't really know if it was feasible back then to send 16bit messages. It seams thats why they broke it to two 8bit messages (hence MSB and LSB). They did what they could with available tech.
www.solostuff.net
Advice is heavy. So don’t send it like a mountain.
Advice is heavy. So don’t send it like a mountain.
-
Jeff McClintock Jeff McClintock https://www.kvraudio.com/forum/memberlist.php?mode=viewprofile&u=56398
- KVRist
- 413 posts since 30 Jan, 2005 from New Zealand
So you have 3 solutions ("Hold LSB", "Drag LSB" and "Off").
Your website describes the problem "Off" mode has as - "If you think of it for five minutes, you will figure out it should work but can cause very brief incorrect value jumps"
"Hold LSB" is described as "It saves the LSB value but never applies it to the output CV until the MSB is received."
The MIDI standard specifies "the second byte (LSB) of the data value can be omitted." i.e. it's optional. So "Hold LSB" mode does not handle this situation.
"Drag LSB" is described as "designed to work better when the sender sends MSBs before LSBs, it temporarily changes the current LSB value in a way that smooths transitions until the real LSB is received"
The MIDI spec specifies "When an MSB is received, the receiver should set its concept of the LSB to zero.". So this mode is not compliant with the MIDI spec either.
Look, I am sure you are making a quality product and are doing your best to provide the best possible experience to your users. You have put a lot of thought and effort into this. But's let's face it - If MIDI had been more carefully designed you would never have had to resort to all these hacks. 14bit controllers are fundamentally broken.
- KVRian
- 1253 posts since 31 Dec, 2008
Yes. Hold LSB is designed to work better when LSBs are sent first. i.e it expects it to be always sent. If the user chooses this mode but only an MSB was sent the code is clever enough to apply MSB regardless. But it's not ideal.Jeff McClintock wrote: ↑Tue Jan 26, 2021 9:24 am "Hold LSB" is described as "It saves the LSB value but never applies it to the output CV until the MSB is received."
The MIDI standard specifies "the second byte (LSB) of the data value can be omitted." i.e. it's optional. So "Hold LSB" mode does not handle this situation.
If you are sure about that zero. Then yes I deliberately don't follow the standard in this case. A value of LSB is temporarily chosen to be either the maximum (127) or minimum (zero) depending on the direction of the MSB movement until the actual LSB is sent. This would result in a smoother transition than the "set to zero". Even if the LSB was omitted.Jeff McClintock wrote: ↑Tue Jan 26, 2021 9:24 am"Drag LSB" is described as "designed to work better when the sender sends MSBs before LSBs, it temporarily changes the current LSB value in a way that smooths transitions until the real LSB is received"
The MIDI spec specifies "When an MSB is received, the receiver should set its concept of the LSB to zero.". So this mode is not compatible with the MIDI spec.
Thanks. Sure MIDI is not ideal. But one has to say that it stood the test of time for 35 years. As I've mentioned the primitive hardware back then didn't help. It has been designed under strong constraints of bandwidth, controller speed and memory. Apparently they needed to send 16bit messages over 8bit chunks. I do agree there was room for improvement but I wouldn't go as far as saying that 14bit is completely broken. If you always send MSB first and drag the LSB it's very workable. In this case you can even omit LSB and still work well.Jeff McClintock wrote: ↑Tue Jan 26, 2021 9:24 amLook, I am sure you are making a quality product and are doing your best to provide the best possible experience to your users. You have put a lot of thought and effort into this. But's let's face it - If MIDI had been more carefully designed you would never have had to resort to all these hacks. 14bit controllers are fundamentally broken.
Last edited by S0lo on Tue Jan 26, 2021 10:30 am, edited 1 time in total.
www.solostuff.net
Advice is heavy. So don’t send it like a mountain.
Advice is heavy. So don’t send it like a mountain.
- KVRAF
- 23102 posts since 7 Jan, 2009 from Croatia
14-bit MIDI ain't more broken than VST3 separate note and CC streams.
But it is true that 32-bit MIDI 2.0 is a cleaner and more modern solution.
But it is true that 32-bit MIDI 2.0 is a cleaner and more modern solution.