Top Related Projects
JUCE is an open-source cross-platform C++ application framework for desktop and mobile applications, including VST, VST3, AU, AUv3, LV2 and AAX audio plug-ins.
C library for cross-platform real-time audio input and output
Audio synthesis, processing, & analysis platform for iOS, macOS and tvOS
The Synthesis ToolKit in C++ (STK) is a set of open source audio signal processing and algorithmic synthesis classes written in the C++ programming language.
A C library for reading and writing sound files containing sampled audio data.
Quick Overview
The steinbergmedia/vst3sdk repository contains the source code for the VST3 (Virtual Studio Technology) SDK, which is a software development kit for creating audio plug-ins that can be used in digital audio workstations (DAWs) and other audio software. The VST3 SDK is developed and maintained by Steinberg, the company behind the popular Cubase digital audio workstation.
Pros
- Cross-platform compatibility: The VST3 SDK supports multiple platforms, including Windows, macOS, and Linux, allowing developers to create plug-ins that can be used across a wide range of audio software.
- Robust feature set: The VST3 SDK provides a comprehensive set of features and APIs for developing advanced audio plug-ins, including support for MIDI, automation, and various audio processing techniques.
- Active development and support: Steinberg actively maintains and updates the VST3 SDK, ensuring that it keeps pace with the latest advancements in audio technology and software.
- Widespread adoption: The VST3 format is widely used in the audio industry, with many popular DAWs and audio software supporting VST3 plug-ins.
Cons
- Steep learning curve: Developing VST3 plug-ins can be a complex and challenging task, especially for developers new to audio programming or the VST3 SDK.
- Proprietary nature: The VST3 SDK is a proprietary technology owned by Steinberg, which may limit its adoption or integration with other open-source or non-Steinberg audio software.
- Limited documentation: While Steinberg provides some documentation for the VST3 SDK, the available resources may not be as comprehensive or user-friendly as those for other audio programming frameworks.
- Licensing and distribution: Developers may need to navigate Steinberg's licensing requirements and distribution channels to release their VST3 plug-ins, which can add complexity to the development and deployment process.
Code Examples
Since the steinbergmedia/vst3sdk repository is a software development kit and not a code library, there are no specific code examples to provide. However, the repository contains the necessary source code and documentation for developers to create their own VST3 plug-ins.
Getting Started
To get started with the VST3 SDK, developers can follow these steps:
- Clone the steinbergmedia/vst3sdk repository to your local machine:
git clone https://github.com/steinbergmedia/vst3sdk.git
-
Familiarize yourself with the SDK's structure and the available documentation, which can be found in the
doc
directory. -
Decide on the type of VST3 plug-in you want to create (e.g., instrument, effect, MIDI processor) and review the relevant examples and documentation.
-
Set up your development environment, which may include installing the necessary compilers, IDEs, and other tools required for building VST3 plug-ins.
-
Start developing your VST3 plug-in, using the SDK's APIs and sample code as a reference. The
public.sdk
directory contains the core SDK files, while thesamples
directory provides various example plug-in implementations. -
Test and debug your plug-in using a compatible DAW or audio software that supports the VST3 format.
-
Package and distribute your VST3 plug-in according to Steinberg's licensing and distribution guidelines.
For more detailed information on the development process and the VST3 SDK's features, please refer to the documentation provided in the repository.
Competitor Comparisons
JUCE is an open-source cross-platform C++ application framework for desktop and mobile applications, including VST, VST3, AU, AUv3, LV2 and AAX audio plug-ins.
Pros of JUCE
- Comprehensive Framework: JUCE provides a comprehensive set of tools and libraries for building audio applications, including support for VST, AU, and other plugin formats.
- Cross-Platform Compatibility: JUCE is designed to be cross-platform, allowing developers to build applications that can run on Windows, macOS, and Linux.
- Active Community: JUCE has a large and active community of developers, providing a wealth of resources, tutorials, and support.
Cons of JUCE
- Licensing: JUCE is released under a commercial license, which may be a barrier for some developers, especially those working on open-source projects.
- Complexity: JUCE is a feature-rich framework, which can make it more complex to learn and use, especially for beginners.
- Performance: Some developers have reported that JUCE can be less performant than other audio frameworks, particularly for low-latency applications.
Code Comparison
Here's a brief comparison of the code structure between JUCE and the VST3 SDK:
JUCE (Simplified AudioProcessor
class):
class MyAudioProcessor : public juce::AudioProcessor {
public:
void prepareToPlay(double sampleRate, int samplesPerBlock) override {
// Prepare the audio processor for playback
}
void processBlock(juce::AudioBuffer<float>& buffer, juce::MidiBuffer& midiMessages) override {
// Process the audio and MIDI data
}
// Other methods and properties
};
VST3 SDK (Simplified IPluginBase
interface):
class MyPlugin : public Steinberg::Vst::IPluginBase {
public:
tresult PLUGIN_API initialize(FUnknown* context) override {
// Initialize the plugin
return kResultOk;
}
tresult PLUGIN_API terminate() override {
// Terminate the plugin
return kResultOk;
}
// Other methods and properties
};
Both examples demonstrate the basic structure of an audio plugin, but the JUCE version provides a more abstracted and user-friendly interface, while the VST3 SDK requires more direct interaction with the underlying Steinberg API.
C library for cross-platform real-time audio input and output
Pros of libsoundio
- Cross-platform support: libsoundio provides a cross-platform API for accessing audio input and output, supporting Windows, macOS, and Linux.
- Simplicity: The library has a relatively simple and straightforward API, making it easier to integrate into projects compared to more complex audio libraries.
- Lightweight: libsoundio is a lightweight library, with a small footprint and minimal dependencies, making it suitable for use in a variety of projects.
Cons of libsoundio
- Limited features: Compared to the VST3 SDK, libsoundio has a more limited set of features and functionality, focusing primarily on basic audio input and output.
- Lack of plugin support: While the VST3 SDK is designed for building audio plugins, libsoundio does not provide any specific support for plugin development.
- Smaller community: The VST3 SDK has a larger and more active community, with more resources and support available, compared to the relatively smaller community around libsoundio.
Code Comparison
VST3 SDK (steinbergmedia/vst3sdk):
class MyPlugin : public Vst::AudioEffect {
public:
MyPlugin() {
// Plugin initialization code
}
tresult PLUGIN_API process(Vst::ProcessData& data) override {
// Plugin processing code
return kResultOk;
}
};
libsoundio (andrewrk/libsoundio):
int main() {
struct soundio *soundio = soundio_create();
if (!soundio) {
// Error handling
return 1;
}
int err = soundio_connect(soundio);
if (err) {
// Error handling
soundio_destroy(soundio);
return 1;
}
}
Audio synthesis, processing, & analysis platform for iOS, macOS and tvOS
Pros of AudioKit/AudioKit
- AudioKit is a comprehensive framework for audio development, providing a wide range of tools and features for creating audio applications.
- The project has a large and active community, with numerous contributors and a wealth of documentation and examples.
- AudioKit is cross-platform, supporting iOS, macOS, and tvOS, making it a versatile choice for audio development.
Cons of AudioKit/AudioKit
- The VST3 SDK provided by Steinberg is a more specialized and low-level tool, focused specifically on the development of VST3 plugins.
- The VST3 SDK may offer more fine-grained control and optimization for VST3 plugin development, which may be important for certain use cases.
- The learning curve for the VST3 SDK may be steeper than that of AudioKit, as it requires a deeper understanding of audio programming concepts.
Code Comparison
VST3 SDK (steinbergmedia/vst3sdk):
class MyPlugin : public Vst::AudioEffect {
public:
MyPlugin() {
// Plugin initialization code
}
tresult PLUGIN_API process(Vst::ProcessData& data) override {
// Plugin processing code
return kResultOk;
}
};
AudioKit (AudioKit/AudioKit):
let oscillator = AKOscillator()
oscillator.amplitude = 0.5
oscillator.frequency = 440
oscillator.start()
let mixer = AKMixer(oscillator)
AudioKit.output = mixer
AudioKit.start()
The Synthesis ToolKit in C++ (STK) is a set of open source audio signal processing and algorithmic synthesis classes written in the C++ programming language.
Pros of thestk/stk
- thestk/stk is a cross-platform, open-source audio signal processing and algorithmic composition library, providing a wide range of synthesis and processing algorithms.
- The library is well-documented and has a large user community, making it a valuable resource for audio developers and researchers.
- thestk/stk is licensed under the MIT license, allowing for flexible use and modification of the codebase.
Cons of thestk/stk
- The library may have a steeper learning curve compared to steinbergmedia/vst3sdk, as it covers a broader range of audio processing techniques.
- The development of thestk/stk may not be as actively maintained as steinbergmedia/vst3sdk, which is backed by a larger commercial entity.
Code Comparison
Here's a brief comparison of the code structure between the two repositories:
steinbergmedia/vst3sdk:
class MyPlugin : public Vst::AudioEffect {
public:
MyPlugin(const Vst::HostContext* context)
: Vst::AudioEffect(context, 1, 1) // 1 input, 1 output
{
// Plugin initialization code
}
tresult PLUGIN_API process(Vst::ProcessData& data) override {
// Plugin processing code
return kResultOk;
}
};
thestk/stk:
class Mandolin : public Instrmnt {
public:
Mandolin(void) {
// Mandolin initialization code
}
void noteOn(StkFloat frequency, StkFloat amplitude) {
// Mandolin note-on code
}
void noteOff(StkFloat amplitude) {
// Mandolin note-off code
}
};
The key differences are that steinbergmedia/vst3sdk is focused on building VST3 audio plugins, while thestk/stk is a more general-purpose audio processing library with a variety of synthesis and processing algorithms.
A C library for reading and writing sound files containing sampled audio data.
Pros of libsndfile/libsndfile
- Cross-platform Compatibility: libsndfile is a cross-platform library, supporting a wide range of operating systems and audio file formats, making it a versatile choice for audio-related projects.
- Extensive Documentation: The libsndfile project has comprehensive documentation, including detailed API references and examples, which can greatly facilitate the integration and usage of the library.
- Active Community: libsndfile has an active community of contributors and users, ensuring ongoing development, bug fixes, and support for the library.
Cons of libsndfile/libsndfile
- Limited Audio Plugin Support: Unlike steinbergmedia/vst3sdk, libsndfile is not specifically designed for the development of audio plugins, and may lack some features or optimizations for that use case.
- Narrower Scope: While libsndfile is a powerful audio file I/O library, it does not provide the same breadth of functionality as the steinbergmedia/vst3sdk, which is focused on the development of VST3 audio plugins.
Code Comparison
Here's a brief code comparison between the two projects:
libsndfile/libsndfile (reading an audio file):
SNDFILE *sndfile;
SF_INFO sfinfo;
sndfile = sf_open("input.wav", SFM_READ, &sfinfo);
if (!sndfile) {
/* Error handling */
}
/* Read audio data from the file */
steinbergmedia/vst3sdk (creating a simple VST3 plugin):
class MyPlugin : public Vst::AudioEffect {
public:
MyPlugin() {
// Plugin initialization
}
tresult PLUGIN_API process(Vst::ProcessData& data) override {
// Process audio data
return kResultOk;
}
};
// Register the plugin factory
DEF_CLASS_IID(MyPlugin)
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
Welcome to VST SDK 3.7.x
Table Of Contents
- The VST SDK package
- System requirements
- About VST plug-ins in general
- About VST 3
- How to build VST 3
- Contributing
- License & Usage guidelines
The VST SDK package contains
- VST 3 API
- VST 3 Implementation Helper Classes
- AAX, AUv3 and AU Wrappers
- VST 3 plug-ins Examples
The full VST 3 SDK is available here!. It contains:
- VST 3 plug-in Test Host Application/Validator,
- the Steinberg VST 3 Plug-In SDK Licensing Agreement that you have to sign if you want to develop or host VST 3 plug-ins.
System requirements
Supported Platforms:
Operating System | Architecture | Compiler | Notes |
---|---|---|---|
Windows 10/11 | x86, x86_64, arm64 | MSVC 2022, MSVC 2019 | |
Windows 8.1 | x86, x86_64 | MSVC 2019, MSVC 2017 | |
macOS 10.13 - 14 | x86, x86_64, Apple Silicon | Xcode 10 - 15 | |
iOS 13 - iOS 17 | arm64 | Xcode 11 - 15 | |
Linux - Raspberry Pi OS (Buster) | arm32 | GCC 8.3 and higher | Visual Studio Code |
Linux - Ubuntu 18.04 LTS | x86, x86_64 | GCC 8.3 and higher | Visual Studio Code, Qt Creator |
Linux - Ubuntu 20.04 LTS | x86, x86_64 | GCC 8.3 and higher | Visual Studio Code, Qt Creator |
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 Windows, a VST plug-in is a multi-threaded DLL (Dynamic Link Library), recently packaged into a folder structure.
- On Mac OS X, a VST plug-in is a Mach-O Bundle
- On Linux, a VST plug-in is a package
To learn more about VST you can:
- subscribe to the VST Developer Forum
- check the 3rd Party Developer Support section at www.steinberg.net
- check the VST 3 SDK online documentation under: steinbergmedia.github.io/vst3_dev_portal
- check the online documentation under: steinbergmedia.github.io/vst3_doc
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:
1. 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.
2. 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 busses after loading and even reactivate those when needed. This cleans up the mixer and further helps to reduce CPU load.
3. 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.
4. Logical Parameter Organization
The VST 3 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).
5. Resizeable UI Editor
VST 3 defines a way to allow resizing of the plug-in editor by a user.
6. Mouse Over Support
The host could ask the plug-in which parameter is under the mouse.
7. 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.
8. Channel Context Information
A VST 3 plug-in could access some channel information where it is instantiated: name, color, ...
9. 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.
10. 3D Support
VST 3 supports new speaker configurations like Ambisonic, Atmos, Auro 3D or 22.2.
11. Factory Concept
VST 3 plug-in library could export multiple plug-ins and in this way replaces the shell concept of VST 2 (kPlugCategShell).
12. Support Remote control Representation
VST 3 plug-in can deliver a specific parameter mapping for remote controls like Nuage.
13. Others
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
How to build VST3
Get the source code from GitHub
git clone --recursive https://github.com/steinbergmedia/vst3sdk.git
Build the examples on Windows
- Create a folder for the build and move to this folder (using cd):
mkdir build
cd build
- Generate the Solution/Projects: provide the path of the Project where CMakeLists.txt is located:
// examples:
cmake.exe -G "Visual Studio 17 2022" -A x64 ..\vst3sdk
// or without symbolic links
cmake.exe -G "Visual Studio 17 2022" -A x64 ..\vst3sdk -DSMTG_CREATE_PLUGIN_LINK=0
// or by using the local user program folder (FOLDERID_UserProgramFilesCommon) as VST3 folder
cmake.exe -G "Visual Studio 17 2022" -A x64 -DSMTG_PLUGIN_TARGET_USER_PROGRAM_FILES_COMMON=1
- Now you can build the plug-in (you can use Visual Studio too):
msbuild.exe vstsdk.sln
// (or alternatively for example for release)
cmake --build . --config Release
Note: If you have any issue with symbolic links, check Preparation on Windows for potential solutions.
Build the examples on macOS
- Create a folder for the build and move to this folder (using cd):
mkdir build
cd build
- Generate the Solution/Projects: provide the path of the Project where CMakeLists.txt is located:
// For XCode:
cmake -GXcode ../vst3sdk
// Without XCode (here debug variant):
cmake -DCMAKE_BUILD_TYPE=Debug ../
- Now you can build the plug-in (you can use XCode too):
xcodebuild
// (or alternatively for example for release)
cmake --build . --config Release
Build the examples on Linux
- Install the required packages Package Requirements
- Create a folder for the build and move to this folder (using cd):
mkdir build
cd build
- Generate the Solution/Projects: provide the path of the Project where CMakeLists.txt is located:
cmake ../vst3sdk
- Now you can build the plug-in:
make
// (or alternatively for example for release)
cmake --build . --config Release
Build using cmake-gui
- start the cmake-gui Application
- Browse Source...: select the folder vst3sdk
- Browse Build...: select a folder where the outputs (projects/...) will be created. Typically, a folder named "build"
- you can check the SMTG Options
- Press Configure
- Press Generate and the project will be created
Contributing
For bug reports and features requests, please visit the VST Developer Forum
License & Usage guidelines
More details are found at www.steinberg.net/sdklicenses_vst3
Top Related Projects
JUCE is an open-source cross-platform C++ application framework for desktop and mobile applications, including VST, VST3, AU, AUv3, LV2 and AAX audio plug-ins.
C library for cross-platform real-time audio input and output
Audio synthesis, processing, & analysis platform for iOS, macOS and tvOS
The Synthesis ToolKit in C++ (STK) is a set of open source audio signal processing and algorithmic synthesis classes written in the C++ programming language.
A C library for reading and writing sound files containing sampled audio data.
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot