VST 3 SDK VST 3.6.11 SDK for developing VST Plug-in

- Main Page
- Related Pages
- Modules
- Namespaces
- Classes
- Files

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Macros Groups Pages
Introduction

# Welcome to VST SDK 3.6.11

The VST SDK package contains:

- The VST 3 API
- Base Module Documentation
- VST - Module Architecture Documentation
- VST 3 Implementation Helper Classes
- VST 3 Plug-ins Examples
- VST 3 Plug-in Test Host Application/Validator
- VSTGUI 4 SDK Documentation

On this page:

- About VST Plug-ins in general
- About VST 3

Other pages:

- VST 3 Version History
- VST 3 Licensing Issues
- Frequently Asked Questions
- VST 3 Locations / Format
- VST 3 Workflow Diagrams
- How to add/create your own VST 3 Plug-ins
- Setup Linux for building VST 3 Plug-ins
- Other Copyrights/Trademarks

New in VST 3.6.11:

- New Steinberg::Vst::INoteExpressionPhysicalUIMapping: allowing the host to retrieve the preferred physical mapping associated to note expression supported by the Plug-in.

New in VST 3.6.10:

- New definition of Plug-in format for Windows including icon support (VST3 Bundle: VST 3 Locations / Format)
- Support of Snapshots inside the VST3 Bundle

New in VST 3.6.9:

- New HelloWorld VST3 Plug-in example: How to add/create your own VST 3 Plug-ins

New in VST 3.6.8:

- Improvement of Linux Support: Setup Linux for building VST 3 Plug-ins
- New Steinberg::Vst::IComponentHandlerBusActivation (Request Bus Activation): allowing a Plug-in to request the host to activate or deactivate a specific bus (useful for instrument with multiple outputs)
- New Ambisonic support (up to 3rd order)
- New Audio Unit v3 (AUv3) wrapper: VST 3 - Audio Unit v3 Wrapper
- New AAX wrapper: VST 3 - AAX Wrapper

New in VST 3.6.7:

- Preview version of Linux support: Setup Linux for building VST 3 Plug-ins
- Use cmake as projects generator: How to use cmake for Building VST 3 Plug-ins
- new licensing model: VST 3 Licensing Issues

New in VST 3.6.5:

- New Steinberg::Vst::ChannelContext::IInfoListener interface: informing the Plug-in about the channel in which it is instanciated (name, color...)
- New Steinberg::Vst::IPrefetchableSupport interface: allowing a Plug-in to inform the host that it does not support prefetch/ASIO Guard (could be dynamically)
- New Steinberg::Vst::IUnitHandler2 interface: allowing a Plug-in to inform the host that an assignment Unit-Bus defined by IUnitInfo::getUnitByBus has changed
- New Steinberg::Vst::IAutomationState interface: informing the Plug-in about its current automation state
- use "#pragma once" instead of "#ifndef"

New in VST 3.6:

- iOS Inter-App Audio support
- Steinberg::Vst::ChordEvent, Steinberg::Vst::ScaleEvent

New in VST 3.5:

- Note Expression Support
- Key Switch Support
- Remote Representation of Parameters Support
- Context Menu Support

## About VST Plug-ins in general

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
- On Linux, a VST Plug-in is a package, bundle-like.
  => check VST 3 Locations / Format for more details.

To learn more about VST you can subscribe to the VST Developer Forum (https://sdk.steinberg.net)- check the 3rd Party Developer Support section at www.steinberg.net.

## About VST 3

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.
- Mouse Over Support
  The Host could ask the Plug-in which parameter is under the mouse.
- Context Menu Support
  VST 3 defines a way to allow the host to add its own entries in the Plug-in context menu of a specific parameter.
- Channel Context Information
  A VST 3 Plug-in could access some channel information where it is instantiated: channel name, color,...
- 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.
- 3D Support
  VST 3 supports new speaker configurations like Atmos, Auro 3D or 22.2.
- Factory Concept
  VST 3 Plug-in library could export multiple Plug-ins and in this way replaces the shell concept of VST 2 (kPlugCategShell).
- Support Remote control Representation
  VST 3 Plug-in can deliver a specific parameter mapping for remote controls like Nuage.
  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.

Empty

Copyright ©2018 Steinberg Media Technologies GmbH. All Rights Reserved. This documentation is under this license.