xtc/examples/steinberg/README.md
2026-11-06 18:13:49 +01:00

4.3 KiB

Official Steinberg SDK examples

These are optional integration examples. Normal make / make test uses 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:

make VST3_SDK_ROOT=/your/path/vst3sdk test-steinberg-sdk

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. Build output stays under build/steinberg-sdk; 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 by test-steinberg-sdk. To use a different xtc build directory, pass BUILD_DIR=...; the SDK build then lives under that directory unless STEINBERG_BUILD_DIR=... is explicitly set.

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.