VST 3 SDK Introduction
Version 3.6.0
The VST SDK package contains:
On this page:
Other pages:
New in VST 3.6:
New in VST 3.5:
A VST Plug-in is an audio processing component that is utilized within a host application. This host application provides the audio or/and event streams that are processed by the Plug-in's code. Generally speaking, a VST Plug-in can take a stream of audio data, apply a process to the audio, and return the result to the host application. A VST Plug-in performs its process normally using the processor of the computer. The audio stream is broken down into a series of blocks. The host supplies the blocks in sequence. The host and its current environment control the block-size. The VST Plug-in maintains the status of all its own parameters relating to the running process: The host does not maintain any information about what the Plug-in did with the last block of data it processed.
From the host application's point of view, a VST Plug-in is a black box with an arbitrary number of inputs, outputs (Event (MIDI) or Audio), and associated parameters. The host needs no implicit knowledge of the Plug-in's process to be able to use it. The Plug-in process can use whatever parameters it wishes, internally to the process, but depending on the capabilities of the host, it can allow the changes to user parameters to be automated by the host.
The source code of a VST Plug-in is platform independent, but the delivery system depends on the platform architecture:
- On the Windows platform, a VST Plug-in is a multi-threaded DLL (Dynamic Link Library).
- On Mac OS X, a VST Plug-in is a Mach-O Bundle
To learn more about VST you can subscribe to the VST Developer Mailing List - check the 3rd Party Developer Support section at www.steinberg.net.
VST 3 is a general rework of the long-serving VST Plug-in interface. It is not compatible with the older VST versions, but it includes some new features and possibilities. We have redesigned the API to make it not only far easier and more reliable for developers to work with, but have also provided completely new possibilities for Plug-ins. These include:
- Improved Performance with the Silence Flag
Processing can optionally be applied to Plug-ins only when audio signals are present on their respective inputs, so VST 3 Plug-ins can apply their processing economically and only when it is needed.
- Multiple Dynamic I/Os
VST 3 Plug-ins are no longer limited to a fixed number of inputs and outputs, and their I/O configuration can dynamically adapt to the channel configuration. Side-chains are also very easily realizable. This includes the possibility to deactivate unused buses after loading and even reactivate those when needed. This cleans up the mixer and further helps to reduce CPU load.
- Sample-accurate automation
VST 3 also features vastly improved parameter automation with sample accuracy and support for ramped automation data, allowing completely accurate and rapid parameter automation changes.
- Logical Parameter Organization
The Plug-in parameters are displayed in a tree structure. Parameters are grouped into sections which represent the structure of the Plug-in. Plug-ins can communicate their internal structure for the purpose of overview, but also for some associated functionality (eg. program-lists).
- Resizeable UI editor
VST 3 defines a way to allow resizing of the Plug-in editor by a user.
- Note Expression
VST 3 defines with Note Expression a new way of event controller editing. The Plug-in is able to break free from the limitations of MIDI controller events by providing access to new VST 3 controller events that circumvent the laws of MIDI and provide articulation information for each individual note (event) in a polyphonic arrangement according to its noteId.
- Factory Concept
VST 3 Plug-in library could export multiple Plug-ins and in this way replaces the shell concept of VST 2 (kPlugCategShell).
While designing VST 3, we performed a careful analysis of the existing functionality of VST and rewrote the interfaces from scratch. In doing so, we focused a lot on providing clear interfaces and their documentation in order to avoid usage errors from the deepest possible layer.
Some more features implemented specifically for developers include:
- More stable technical Host/Plug-in environment
- Advanced technical definition of the standard
- Modular approach
- Separation of UI and processing
- Advanced Preset System
- Multiple Plug-ins per Library
- Test Host included
- Automated Testing Environment
- Validator (small command line Test Host) and Plug-in examples code included.
- Interfaces Changes:
- Plug-in Wrappers:
- iOS Inter-App Audio support
- VST 2.x Wrapper :
- fix when changing from host between single and double precision processing
- fix setProgram and processMidiEvent for kProgramChangeStatus where the wrong idx was used for programChange Parameter
- AudioUnit Wrapper :
- adopt to new AUPlugIn API in Mac OS X 10.7
- virtual destructor for NSDataIBStream
- New Flags/Enums:
- New predefined 3D Speaker Arrangements: k81MPEG3D, k222
- Helpers Classes:
- fix compilation for UNICODE_OFF enable
- Samples:
- VSTGUI 4.2
- Update to the final 4.2 release including iOS support
- VST3PluginTestHost: VST 3 Plug-in Test Host
- New feature: Overwrite Plug-in Name in VST3 Presets
- Licensing has changed! Please read the new license agreement Licensing Issues.
- Xcode 5 note: To successfully build the examples for Mac OS X you need to change the SDKROOT variable in base/mac/config/settings/sdk_deployment_10_6.xcconfig to macosx10.8 .
- Interfaces Changes:
- Note Expression supports a new event type: NoteExpressionTextEvent
- Samples:
- Fix Visual Studio 2010 projects (filters added)
- Adaptation for XCode4 (The again sample project uses VSTGUI 3.6 which needs the 10.6 SDK for the 32 bit build, in later Xcode tools this SDK is not available. If you use VSTGUI 3.6 you need to use a Xcode version which has the 10.6 SDK or earlier included.)
- Plug-in Wrappers:
- AudioUnit Wrapper :
- fix noteOn and noteOff offset
- fix RestoreState with IO bus changes
- MIDI PolyPressure support added
- non-automatable parameters have now FlagAudioUnitParameterFlag_NonRealTime AU flag
- fix under Logic where sample rate was not set for mono track
- VST 2.x Wrapper :
- fix getMidiProgramCategory
- New Flags/Enums:
- New predefined Speaker Arrangements: 9.0/9.1/10.0/10.1/11.0/11.1/13.0/13.1 based on Auro 3D definition (www.auro-technologies.com).
- Helpers Classes:
- New in Base:
- class Steinberg::Region
- class Steinberg::IStreamWrapper
- Helper Steinberg::HexBinary : HexBinary encoding and decoding
- Some documentation changes
- Steinberg::Vst::IParameterFinder : To enable important functionalities (like AI Knob) a recommendation to implement this interface was added.
- The VST3 Plug-in locations priority has been changed: Application level should be scanned from host after Global level.
- Licensing change for example source code files
- Interfaces Changes:
- due to a missing calling convention in IContextMenu interfaces, we had to generate new iids for this set of interfaces, Steinberg hosts will be updated (from 6.0.5) in order to support correctly this interface set. The old interfaces when already used will continue to be supported in Steinberg hosts. Sorry for this issue...
- Helpers Classes:
- EditController is now one of the base classes of SingleComponentEffect
- If you have used the SingleComponentEffect before, make sure that you must exclude vsteditcontroller.cpp now if it was in your project
- EditControllerEx1 has a new function: setProgramName
- ProgramList has a new function: setProgramName
- Samples:
- Add Visual Studio 2010 projects
- Remove Visual Studio 2003 projects
- Fix AGain Single Component Effect
- VSTGUI 4.0
- Update to the final 4.0 release
- Plug-in Wrappers:
- VST3PluginTestHost: VST 3 Plug-in Test Host
- New feature: Convert VST3 Preset to VST2 preset (fxp or fxb)
- New Interfaces:
- New Flags/Enums:
- Helpers Classes:
- Samples:
- New VST 3 instrument examples:
- Instrument "Note Expression Synth" supporting Note Expression Events
- Effect showing support of pitchnames (ProgramPitchNames)
- Validator:
- More command line options
- Possibility to add custom tests by the Plug-in
- VSTGUI 4.0
- Plug-in Wrappers:
- Some documentation changes
- Restructuring of the SDK :
- new Base Module (many useful classes, such as templates and containers)
- Renamed the file public.sdk/source/main/pluginfactory.cpp to public.sdk/source/main/pluginfactoryvst3.cpp
- Renamed the file public.sdk/source/main/pluginfactory.h to public.sdk/source/main/pluginfactoryvst3.h
- Renaming Microsoft Visual Projects
- New Interfaces:
- New Event Structure:
- New Flags/Enums:
- Plug-ins Wrappers:
- New VST 2.x Wrapper : by just adding small initializing code, you can provide a VST 2.x version of your VST 3 Plug-in
- New AudioUnit Wrapper with just a few build settings, you can provide AU support with your VST 3 Plug-in
- Samples:
- New VST 3 Plug-in examples: ADelay Plug-in, mda VST 3 Plug-ins (thanks Paul Kellet and Arne Scheffler)
- Remove Visual Studio 2003 projects
- Clean up AGain and add separate version supporting side-chain
- New features of the VST 3 Plug-in Test Host :
- MIDI Input support
- better ASIO support
- Mac 64 bit support (Cocoa view support also in 32 bit)
- Fixes in Validator
- Some documentation changes
- New Interface:
- Samples:
- Adaptation of AGain example for support of interface IParameterFinder
- Some documentation changes
- New Interface:
- New Flags/Enums:
- Restructuring of the SDK :
- Helpers Classes:
- Samples:
- AGain example has been extended : supports IMidiMapping, Side-chain and Unit
- Add Visual Studio 2008 solution
- Documentation
- Public Release of VST SDK 3.0