Introduction

What is a VST Plug-In? And why did we develop it in the first place?
What is new in VST 3?
What is VST 3?

COM Compatibility
Usage Information

Audio Processing
Plug-In Implementation
User Interfaces


What is a VST Plug-In? And why did we develop it in the first place?

Essentially, a VST Plug-in is a pure audio processing component, and not an audio application: It is a 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; It does not necessarily need dedicated digital signal processors. 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:

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.



What is VST 3?

The VST SDK 3 described in this document is an object-oriented, cross-platform and compiler-independent interface model. It specifies what components must "look like" and how they are created by the host application.

We can separate the specification into 3 layers:


What is new in VST 3?

VST SDK 3 is a general rework of the VST Plug-In Interface. While it is not compatible with the older VST versions, it includes many new features and possibilities. We have rebuilt the interface 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:

COM Compatibility

The first layer of the VST SDK is binary compatible to Microsoft® COM (Component Object Model). The Vtable and Interface Identifier of FUnknown match with the corresponding COM interface IUnknown.

The main difference is the organization and creation of components by a host application. The VST SDK does not require any Microsoft® COM source file. It is currently available for Windows and Mac OS X.

You can find information about COM on pages like: http://www.microsoft.com/Com/resources/comdocs.asp.



Usage Information


Interface directions

Most interfaces have got a direction, meaning that the interface is expected to be implemented either in the Plug-In or in the host. In this documentation the nature of an interface is indicated like this:

Interface Versions and Inheritance

Unlike C++ classes, COM interfaces do not use inheritance to express specializations of objects. Usually all interfaces are derived from FUnknown. Interfaces are never changed after they have been released.

The VST SDK Interfaces use inheritance only for versioning! All specializations will be modelled as separate interfaces! As an example see: Interface Versions and Inheritance



Audio Processing

Audio processing in the plug is accomplished by a process () method. While process () takes input data, applies its processing algorithm, and then adds the result to the output (overwrite the output buffer). out = f(in);

Note:
Audio data processed by VST Plug-Ins is 32 bit (single precision) and optionally 64 bit (double precision) floating-point data. The default used range is from -1.0 to +1.0 inclusive [-1.0, +1.0] (where 1.0 corresponds to 0dB, 0.5 to -6dB and 0.0 to -oodB). Note that an effect could generate values above this range.
All parameters - the user parameters, acting directly or indirectly on that data, as automated by the host, are 32 bit floating-point data. They must always range from 0.0 to 1.0 inclusive [0.0, +1.0] (normalized), regardless of their internal or external representation.



Plug-In Implementation

If you want to develop a VST Plug-In, you may prefer to go straight to the code examples now. These are very simple examples in which you will learn most of the important basic concepts just by reading a few lines of code. As a Plug-In developer you actually need to know very little about hosting a Plug-In.
Note:
Never edit any of the SDK source files. Never ever. The host application relies on them being used as they are provided. Anything can be added or changed by overriding in your private classes derived from the given helpers classes.



User Interfaces

All user-interface handling is entirely separated from the audio processing. At its simplest there is an option where you can avoid providing a user interface at all. In this case the host will provide a generic editor allowing to edit and visualize the Plug-In parameters. The host can use the separate ASCII strings for the value, the label, and the units of the parameters to construct its own user interface. This is also often a good way to develop a VST Plug-In, it offers a very short development cycle to start to test the algorithm. The proper UI interface can come later.

The next user interface level is provided when the Plug-In defines its own editor. This allows practically any user interface to be defined. A negative aspect is that then you can quickly land up in platform specifics when dealing with the nuts and bolts of the interface issues, even though the audio process, the concepts and methodology remain platform independent.

The final option is to use a portable framework for creating sophisticated user interfaces. This framework takes the form of the VSTGUI Library files that are available for almost all supported VST platforms. The VSTGUI Library classes and their usage is described in separate documentation.

See also:
VSTGUI on SourceForge


Empty

Copyright ©2008 Steinberg Media Technologies. All Rights Reserved.