95 lines
4.5 KiB
Markdown
95 lines
4.5 KiB
Markdown
# 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.
|