Transformant is a VST/AU plug-in which provides a stereo formant filter effect, driven by oscillators and obliterated to gravel through bit crushing or wave shaping.
You can hear it being the leading effect on Drosophelia's Detractor.
The project uses CMake to generate the Makefiles and has been built and tested on macOS, Windows 10 and Linux (Ubuntu).
Apart from requiring CMake and a C(++) compiler such as Clang or MSVC, the only other dependency is the VST SDK from Steinberg (the projects latest update requires SDK version 3.7.11).
You can instantly retrieve and build the SDK using the following commands.
sh setup.sh --platform PLATFORM
Where optional flag --platform can be either mac
or linux
(defaults to linux).
setup.bat
This will create a (Git ignored) subfolder in this repository folder with a prebuilt Steinberg SDK.
In case you wish to use a different SDK version (for instance to reuse an existing build elsewhere on your computer or to
target VST2 builds), you can invoke all build scripts by providing the VST3_SDK_ROOT
environment variable, like so:
VST3_SDK_ROOT=/path/to/prebuilt/VST3_SDK sh build.sh
After downloading the Steinberg SDK you must generate a release build of its sources. To do this, execute the following commands from the root of the Steinberg SDK folder:
cd vst3sdk
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
cmake --build . --config Release
The result being that {VST3_SDK_ROOT}/build/lib/Release/
will contain the Steinberg VST libraries required to build the plugin.
In case you intend to build VST2 versions as well, keep in mind that as of SDK 3.6.11, Steinberg no longer packages the required /pluginterfaces/vst2.x
-folder inside the vst3sdk folder. If you wish to build a VST2 plugin, copying the folder from an older SDK version could work (verified 3.6.9. vst2.x
folders to work with SDK 3.7.11), though be aware that you need a license to target VST2. You can view Steinbergs rationale on this decision here.
To prepare for building VST2 versions of the plugin, run the following from the root of the Steinberg SDK folder (run the .bat version instead of the .sh version on Windows) prior to building the library:
./copy_vst2_to_vst3_sdk.sh
And if you are running Linux, you can easily resolve all dependencies by first running the following from the root of the Steinberg SDK folder:
./tools/setup_linux_packages_for_vst3sdk.sh
See the provided shell scripts. The build output will be stored in ./build/VST3/transformant.vst3
as well as symbolically linked to your systems VST-plugin folder (on Unix).
sh build.sh --type TYPE
Where optional flag --type can be either vst3
, vst2
or au
(defaults to vst3)*.
Assuming the Visual Studio Build Tools have been installed:
build.bat
Where you can optionally append vst2
to the command to build a VST2* plugin.
*As mentioned in the "setup" section, VST2 builds are not supported out-of-the-box.
Depending on your host software having 32-bit or 64-bit support (with the latter targeting either Intel or ARM), you can choose to compile for a wider range of architectures. To do so, updating the build shell scripts/batch files to contain the following:
macOS:
cmake -"DCMAKE_OSX_ARCHITECTURES=x86_64;arm64;i1386" ..
Which will allow you to compile a single, "fat" binary that supports all architectures (Intel, ARM and legacy 32-bit Intel). Note that by default compilation is for 64-bit architecture for both Intel and ARM CPU's, you can likely ignore this section.
Windows:
cmake.exe -G "Visual Studio 16 2019" -A Win64 -S .. -B "build64"
cmake.exe --build build64 --config Release
cmake.exe -G "Visual Studio 16 2019" -A Win32 -S .. -B "build32"
cmake.exe --build build32 --config Release
Which is a little more cumbersome as you compile separate binaries for the separate architectures.
Note that the above also needs to be done when building the Steinberg SDK (which for the Windows build implies that a separate build is created for each architecture).
While both macOS and Windows have been fully 64-bit for the past versions, building for 32-bit provides the best backward compatibility for older OS versions. Musicians are known to keep working systems at the cost of not running an up to date system... still, you can likely ignore this section.
For this you will need a little extra preparation while building Steinberg SDK as you will need the "CoreAudio SDK" and XCode. Execute the following instructions to build the SDK with Audio Unit support, providing the appropriate path to the actual installation location of the CoreAudio SDK:
sh setup.sh --platform mac --coresdk /path/to/CoreAudioUtilityClasses/CoreAudio
After which you can run the build script like so:
sh build.sh --type au
The Audio Unit component will be located in ./build/bin/Release/Transformant AUv3.app
You can validate the Audio Unit using Apple's auval utility, by running auval -v aufx frmt IGOR
on the command line (reflecting the values defined in audiounitconfig.h
). Note that there is the curious behaviour that you might need to reboot before the plugin shows up, though you can force a flush of the Audio Unit cache at runtime by running killall -9 AudioComponentRegistrar
.
In case of errors you can look for instances of kAudioUnitErr
You can copy the build output into your system VST(3) folder and run it directly in a VST host / DAW of your choice.
When debugging, you can also choose to run the plugin against Steinbergs validator and editor host utilities:
{VST3_SDK_ROOT}/build/bin/validator build/VST3/transformant.vst3
{VST3_SDK_ROOT}/build/bin/editorhost build/VST3/transformant.vst3
You will need to have your code signing set up appropriately. Assuming you have set up your Apple Developer account, you can find your signing identity like so:
security find-identity -p codesigning -v
From which you can take your name and team id and pass them to the build script like so:
sh build.sh --team_id TEAM_ID --identity "YOUR_NAME"