VST 3 Interfaces
VST 3.7
SDK for developing VST plug-in
|
Unlike in VST 2, MIDI is not included in VST 3.
But VST 3 offers suitable concepts that can be translated to and from MIDI.
Relationship of concepts in MIDI 1.0 to VST 3
MIDI 1.0 | VST 3 | Defined in |
---|---|---|
Port | Bus of Steinberg::Vst::MediaType Steinberg::Vst::MediaTypes::kEvent | ivstcomponent.h |
Channel | Channel of a Bus, Unit by Bus and Channel | ivstcomponent.h, ivstunits.h |
Note-On | Steinberg::Vst::NoteOnEvent | ivstevents.h |
Note-Off | Steinberg::Vst::NoteOffEvent | ivstevents.h |
Poly Key Pressure | Steinberg::Vst::PolyPressureEvent | ivstevents.h |
Control Change | Parameter, IMidiMapping | ivstcomponent.h, ivstmidicontrollers.h |
Channel Pressure | Parameter, IMidiMapping | ivstcomponent.h, ivstmidicontrollers.h |
Pitch Bend | Parameter, IMidiMapping | ivstcomponent.h, ivstmidicontrollers.h |
Program Change | Parameter, kIsProgramChange, Steinberg::Vst::ProgramListInfo | ivstcomponent.h, ivstunits.h |
MPE (MIDI Polyphonic Expression) | NoteExpression, PhysicalUI | ivstnoteexpression.h, ivstphysicalui.h |
System Exclusive | Steinberg::Vst::DataEvent of Type Steinberg::Vst::DataEvent::kMidiSysEx | ivstevents.h |
Additional relationships of concepts introduced in MIDI 2.0 (https://www.midi.org/) to VST 3
MIDI 2.0 | VST 3 | Defined in / Comments |
---|---|---|
Group (of Channels) | Bus of Steinberg::Vst::MediaType Steinberg::Vst::MediaTypes::kEvent | ivstcomponent.h |
Registered Per-Note Controller | NoteExpression, PhysicalUI | ivstnoteexpression.h, ivstphysicalui.h |
Assignable Per-Note Controller | NoteExpression | ivstnoteexpression.h |
System Exclusive 8-Bit | indirect support | the host may translate to 7-Bit, DataEvent of Type Steinberg::Vst::DataEvent::kMidiSysEx |
Registered Controller | not supported | The host can do detailed tuning via NoteExpression |
Assignable Controller | not supported | The host should offer mapping to parameters |
Relative Registered Controller | not supported | The host is free to translate this to parameters |
Relative Assignable Controller | not supported | The host is free to translate this to parameters |
Per-Note Pitch Bend | not supported | The host can do detailed tuning via NoteExpression |
Mixed Data Set | not supported | not supported |
There are many subtle differences between MIDI 2.0 Per-Note Controllers and VST 3 NoteExpression. The good thing is that plug-in developers do not have to do anything about it. It is the host's duty to translate from MIDI 2.0 to VST 3.
MIDI 2.0 achieved a significant increase in resolution of many important values, like Velocity, Pressure, and Controllers compared to MIDI 1.0. Nevertheless, VST 3 still has superior resolution than MIDI 2.0. Plug-ins and hosts supporting VST 3 should make use of these capabilities and should not stick to a 0-127 mindset.
See the following tables to compare the resolution of specific values in MIDI 1.0, MIDI 2.0, and VST 3.
Value | MIDI 1.0 | MIDI 2.0 | VST 3 |
---|---|---|---|
Velocity (On & Off) | 7 Bit integer | 16 Bit integer | 32 Bit float |
Poly Pressure | 7 Bit integer | 32 Bit integer | 32 Bit float |
Channel Pressure / Parameters | 7 Bit integer | 32 Bit integer | 64 Bit float |
Controllers / Parameters | 7-14 Bit integer | 32 Bit integer | 64 Bit float |
Pitch Bend / Parameters | 14 Bit integer | 32 Bit integer | 64 Bit float |
Note Attribute Tuning | not available | 16 Bit fixed point (7.9) | 32 Bit float |
Per-Note Controllers / NoteExpression | not available | 32 Bit integer | 64 Bit float |
Back to Contents