xtc/examples/steinberg/README.md
2026-11-06 19:05:14 +01:00

95 lines
4.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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:
```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
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:
```sh
./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](../../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.