| .. | ||
| asio_devices.cpp | ||
| CMakeLists.txt | ||
| README.md | ||
| render.c | ||
| sdk_plugins.cpp | ||
Official Steinberg SDK examples
These are optional integration examples. Normal CMake builds and CTest use the
existing pinned C ABI headers and never downloads SDKs. Original example source
is MIT-licensed like xtc. SDK code is compiled from an external checkout, not
vendored or installed by these targets. C++ is confined to the SDK examples;
render.c and the xtc host remain C99.
VST3 effect and instrument (Linux)
Requirements: the normal C toolchain, C++17, CMake >= 3.25, and an official VST3 SDK checkout with its submodules. SDK hosting utilities can require additional platform development libraries (the inspected SDK discovers X11/GTK). Dependencies are never installed automatically. Obtain the SDK explicitly, for example:
git clone --recursive https://github.com/steinbergmedia/vst3sdk.git /your/path/vst3sdk
Qualified SDK revision: 3cdf9ca5d1f5b1b21e0a86832aa4abe55607bd96
(3.8.1; MIT license). To reproduce this revision, checkout it and run
git submodule update --init --recursive. Review the license of the actual SDK
revision used; this example neither bundles SDK sources nor grants plugin or
trademark distribution rights.
From the xtc repository root:
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release \
-DXTC_BUILD_STEINBERG=ON -DXTC_VST3_SDK_ROOT=/your/path/vst3sdk
cmake --build build --parallel 3
ctest --test-dir build --output-on-failure -R steinberg
This builds the original xtc-sdk-examples.vst3 bundle using Steinberg's factory,
AudioEffect, controller and platform-entry implementations; runs the official
validator; and runs xtc's gain/MIDI interoperability checks. The plugin bundle stays
under build/steinberg-sdk; SDK helper executables use build/bin. Automatic
plugin-directory links and installation
are disabled. SDK source may emit its own compiler warnings.
The bundle contains:
| Factory index | Class | Behavior |
|---|---|---|
| 0 | xtc SDK Half Gain | mono float32 input multiplied by 0.5 |
| 1 | xtc SDK Sine | mono MIDI synth; 16 channels; note velocity; note-on/off offsets |
| 2 | xtc SDK Controller | non-audio class; no editable parameters |
Both audio classes are zero-latency, stateless, default-configuration examples. These make good host compatibility checks; they are not production instruments. The sine example uses immediate note release and has no envelope or antialiasing.
Create a two-second WAV (one second of A4 followed by silence) through the actual xtc synth -> effect host path:
./build/steinberg-render \
"$PWD/build/steinberg-sdk/VST3/Release/xtc-sdk-examples.vst3" \
/absolute/path/to/new-sdk-demo.wav
The destination must not exist. This executable is built when the SDK option is enabled.
Use CMake’s -B argument to select another binary directory; the SDK build then
lives under its steinberg-sdk subdirectory.
The main app's existing plugin loader can use the bundle path through its C API;
its file chooser may require selecting the inner .so. The effect loads as a
track insert; the synth is available to the instrument descriptor workflow.
See the hosting contract for remaining limitations.
ASIO driver diagnostics (Windows, pending qualification)
Supply the official ASIO SDK separately. The source layout targets the inspected
ASIO 2.3.3 SDK (common/asio.cpp, host/asiodrivers.cpp, host/pc/asiolist.cpp).
Its Steinberg SDK license differs from the VST3 revision above; follow the
license accompanying your SDK before redistribution. SDK source or binaries are
not included in xtc packages. A current SDK may require adapting its source layout.
On native Windows with a matching MSVC toolchain and an installed ASIO driver:
cmake -S examples/steinberg -B build/asio-sdk -DXTC_BUILD_ASIO_EXAMPLE=ON -DXTC_ASIO_SDK_ROOT=C:/SDKs/asiosdk
cmake --build build/asio-sdk --config Release --target xtc-asio-devices
./build/asio-sdk/Release/xtc-asio-devices.exe
./build/asio-sdk/Release/xtc-asio-devices.exe --driver "Exact installed driver name"
The first invocation lists drivers registered for the executable's architecture. The second opens only the selected driver, queries its existing channel formats, sample rate, buffer constraints and latencies, then exits. It never calls ASIOStart, ASIOCreateBuffers, ASIOSetSampleRate or the driver's control panel. Linux configuration with this option deliberately fails with a platform message. Windows compilation and real driver execution have not been verified here. This is a diagnostic example, not audio playback/capture or an app backend.