AudioUnit Tutorial - How to add AUv2 support to your VST 3 plug-in
On this page:
Related pages:
You'll find the source for this tutorial in the tutorial repository
In this tutorial you will learn how to add AudioUnit Version 2 support to your VST 3 plug-in.
First of all, you need a VST 3 plug-in project. For this tutorial we have generated one via the VST 3 Project Generator from the SDK.
Adding the AudioUnit Version 2 Target
Obtaining the required AudioUnit SDK
The AudioUnit Version 2 target needs the official AudioUnit SDK from Apple. As of this writing you can find it on GitHub: https://github.com/apple/AudioUnitSDK
How you obtain and store the SDK is up to you, for the reproducibility of this tutorial, we will download it via CMake when generating the project. So we add the following text to the CMakeLists.txt directly before we include the VST 3 SDK.
include(FetchContent)
FetchContent_Declare(
AudioUnitSDK
GIT_REPOSITORY https://github.com/apple/AudioUnitSDK.git
GIT_TAG HEAD
)
FetchContent_MakeAvailable(AudioUnitSDK)
FetchContent_GetProperties(
AudioUnitSDK
SOURCE_DIR SMTG_AUDIOUNIT_SDK_PATH
)
It is important to set the SMTG_AUDIOUNIT_SDK_PATH
variable to tell the VST 3 SDK where to find the AudioUnit SDK.
Creating the property list
For AudioUnit Version 2 you need a manufacturer OSType registered with Apple. How to do this is out of the scope for this tutorial, please search the web on how this is done.
Besides the manufacturer OSType you also need a subtype OSType which you can choose by yourself. Both the manufacturer and subtype account for the uniqueness of your AudioUnit Version 2.
Now you can generate the required property list file:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundlePackageType</key>
<string>BNDL</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>CSResourcesFileMapped</key>
<string>yes</string>
<key>AudioComponents</key>
<array>
<dict>
<key>factoryFunction</key>
<string>AUWrapperFactory</string>
<key>description</key>
<string>AudioUnit Tutorial</string>
<key>manufacturer</key>
<string>Stgb</string>
<key>name</key>
<string>Steinberg: AudioUnit Tutorial</string>
<key>subtype</key>
<string>0002</string>
<key>type</key>
<string>aufx</string>
<key>version</key>
<integer>1</integer>
</dict>
</array>
</dict>
</plist>
Make sure to change the strings for description
, manufacturer
, name
, subtype
and type
.
The type must be one of:
- aufx (Audio Effect)
- aumu (Instrument)
- aumf (Audio Effect with MIDI Input/Output)
If you build an audio effect you also need to add the supported channel layouts to the list:
<key>AudioUnit SupportedNumChannels</key>
<array>
<dict>
<key>Outputs</key>
<string>2</string>
<key>Inputs</key>
<string>2</string>
</dict>
<dict>
<key>Outputs</key>
<string>2</string>
<key>Inputs</key>
<string>1</string>
</dict>
<dict>
<key>Outputs</key>
<string>1</string>
<key>Inputs</key>
<string>1</string>
</dict>
</array>
Save it to a file called au-info.plist
inside the resource directory.
Adding the AudioUnit Version 2 Target
Now you can add the AudioUnit target to the end of your CMakeLists.txt file:
if (SMTG_MAC AND XCODE AND SMTG_COREAUDIO_SDK_PATH)
list(APPEND CMAKE_MODULE_PATH "${vst3sdk_SOURCE_DIR}/cmake/modules")
include(SMTG_AddVST3AuV2)
smtg_target_add_auv2(VST3_AU_PlugIn_AU
BUNDLE_NAME audiounit_tutorial
BUNDLE_IDENTIFIER com.steinberg.vst3sdk.audiounit_tutorial.audiounit
INFO_PLIST_TEMPLATE ${CMAKE_CURRENT_SOURCE_DIR}/resource/au-info.plist
VST3_PLUGIN_TARGET VST3_AU_PlugIn)
smtg_target_set_debug_executable(VST3_AU_PlugIn_AU "/Applications/Reaper.app")
endif(SMTG_MAC AND XCODE AND SMTG_COREAUDIO_SDK_PATH)
Now after generating and building the project the "audiounit_tutorial" plug-in should be available in any AudioUnit host.