2026-11-06 18:13:49 +01:00
|
|
|
|
# Official Steinberg SDK examples
|
|
|
|
|
|
|
2026-11-06 19:05:14 +01:00
|
|
|
|
These are optional integration examples. Normal CMake builds and CTest use the
|
2026-11-06 18:13:49 +01:00
|
|
|
|
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:
|
|
|
|
|
|
|
|
|
|
|
|
```sh
|
|
|
|
|
|
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:
|
|
|
|
|
|
|
|
|
|
|
|
```sh
|
2026-11-06 19:05:14 +01:00
|
|
|
|
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
|
2026-11-06 18:13:49 +01:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
This builds the original `xtc-sdk-examples.vst3` bundle using Steinberg's factory,
|
|
|
|
|
|
AudioEffect, controller and platform-entry implementations; runs the official
|
2026-11-06 19:05:14 +01:00
|
|
|
|
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
|
2026-11-06 18:13:49 +01:00
|
|
|
|
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:
|
|
|
|
|
|
|
|
|
|
|
|
```sh
|
|
|
|
|
|
./build/steinberg-render \
|
|
|
|
|
|
"$PWD/build/steinberg-sdk/VST3/Release/xtc-sdk-examples.vst3" \
|
|
|
|
|
|
/absolute/path/to/new-sdk-demo.wav
|
|
|
|
|
|
```
|
|
|
|
|
|
|
2026-11-06 19:05:14 +01:00
|
|
|
|
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.
|
2026-11-06 18:13:49 +01:00
|
|
|
|
|
|
|
|
|
|
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](../../docs/STEINBERG.md) 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:
|
|
|
|
|
|
|
|
|
|
|
|
```powershell
|
|
|
|
|
|
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.
|