Developer docs
Engine bindings
Thin, idiomatic bindings that embed the Fenophone engine as an adaptive-music runtime in native games. They all wrap one seam — a framework-free C interface — so every binding drives the same deterministic, seedable, tempo-syncable engine the web instrument and the DAW plugin run.
What's in the SDK
Getting the SDK. The runtime and its engine bindings ship privately today — join the waitlist for access (commercial titles and free game-jam builds both start there). These pages are the integration reference for what you get.
| Binding | Language / target | What it gives you |
|---|---|---|
| C++ | Header-only C++17 | fenophone::Instance — RAII over the C interface. The substrate for the Godot + Unreal bindings, and the lowest-friction path for any C/C++ engine. CI-built and run. |
| Unity | C# / P/Invoke | A FenophoneSource AudioSource + the instance wrapper, as a UPM package — plus the director sample with the regime listener. |
| Godot 4 | GDExtension | A FenophoneMusic node (an AudioStreamPlayer fed by the engine). |
| Unreal | C++ plugin | A UFenophoneMusicComponent (a USynthComponent), Blueprint-callable. |
The shared shape
Every binding exposes the same small surface, because the C interface does:
- Construct with a seed + sample rate. The seed is the soundtrack's identity — save it with the game save for a bit-identical replay; save the state chunk to resume the exact take.
- Drive the score from game state, live: Intensity ← danger, Spread ← world scale, Change Rate ← pacing, Level ← mix, pin a layer for a scripted build or stinger, host tempo to phase-lock bars to your clock.
- Switch mood with the bar-quantized musical transition or an immediate hard cut; run two instances on one clock for vertical layers and crossfades.
- Render stereo (or mono) into your buffers, any block size, on your audio thread.
- Read the score back — the event stream's harmonic-tension lane drives lighting, haptics, and spawns.
- The feel is deterministic, too. The humanized microtiming rides the same integer-exact, seed-driven path as the notes — so the living groove replays bit-identically through captures, saves, replays, and rollback netcode, where a per-playback humanizer cannot.
How they're kept honest
The engine builds to a shared library and a static library from one crate, all exporting the identical C interface. The two bindings that re-state that interface (the C++ wrapper and the Unity P/Invoke layer) are pinned to the C header symbol-for-symbol by an automated test, and the C++ example is compiled and run in CI on every push — so a binding can never drift from the engine. Godot and Unreal consume the C++ wrapper rather than re-declaring the interface, so pinning the wrapper pins them too.
Licensing
Embedding the engine in a shipped game requires the Fenophone runtime license: a per-title, one-time, own-it-forever license, free for game jams and prototypes with a required credit ("adaptive music by Fenophone"). The bindings are covered by the same terms — nothing here grants a redistribution right the runtime license doesn't.
