Created
February 13, 2026 04:54
-
-
Save flowerornament/e8c852f0d8b987fe092e092fbf689871 to your computer and use it in GitHub Desktop.
Murail - Complete System Architecture Diagram
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| ╔══════════════════════════════════════════════════════════════════════════════════════════════╗ | |
| ║ ║ | |
| ║ M U R A I L ║ | |
| ║ ───────── ║ | |
| ║ Named for Tristan Murail (1947-), French spectral music composer. ║ | |
| ║ Built by "Flower Ornament" (華厳 / Avatamsaka Sutra). ║ | |
| ║ 377 commits. 8 days. ~100,000 lines of markdown. 0 lines of Rust. ║ | |
| ║ "An embeddable, open-source audio graph engine and eventual composition language — ║ | |
| ║ a spiritual successor to SuperCollider, informed by 30 years of hindsight." ║ | |
| ║ ║ | |
| ╚══════════════════════════════════════════════════════════════════════════════════════════════╝ | |
| ═══════════════════════════════════════════════════════════════════════════════════════════════ | |
| THE GAP: Why this project exists | |
| ═══════════════════════════════════════════════════════════════════════════════════════════════ | |
| ┌──────────────────┐ ┌────────────────┐ ┌────────────────┐ ┌──────────────────┐ | |
| │ SuperCollider │ │ Faust │ │ FunDSP │ │ JUCE/RtAudio │ | |
| │ │ │ │ │ │ │ │ | |
| │ Monolithic app │ │ No runtime │ │ Static OR │ │ I/O only, │ | |
| │ not embeddable │ │ mutation │ │ dynamic, │ │ no graph │ | |
| │ aging C++ │ │ compiler not │ │ pick one │ │ engine │ | |
| │ │ │ an engine │ │ │ │ │ | |
| └────────┬─────────┘ └───────┬────────┘ └───────┬────────┘ └────────┬─────────┘ | |
| │ │ │ │ | |
| └────────────────────┴────────────────────┴────────────────────┘ | |
| │ | |
| ┌───────────▼───────────┐ | |
| │ │ | |
| │ Nobody has built: │ | |
| │ embeddable, │ | |
| │ production-quality, │ | |
| │ dynamically-mutable │ | |
| │ audio graph engine │ | |
| │ with a clean │ | |
| │ library API │ | |
| │ │ | |
| └───────────┬───────────┘ | |
| │ | |
| ▼ | |
| ╔══════════════════════════════════════════════════╗ | |
| ║ THE THREE-FUNCTION API ║ | |
| ║ ║ | |
| ║ engine_new(config) → Engine ║ | |
| ║ engine_send(engine, cmd) → Result ║ | |
| ║ engine_process(engine, in, out, N) → () ║ | |
| ║ ║ | |
| ║ That's it. That's the entire public surface. ║ | |
| ╚══════════════════════════════════════════════════╝ | |
| ═══════════════════════════════════════════════════════════════════════════════════════════════ | |
| THE ARCHITECTURE: Two threads, four data paths, zero RT allocations | |
| ═══════════════════════════════════════════════════════════════════════════════════════════════ | |
| "The RT thread does not think." — Design Principle #9 | |
| ┌───────────────────────────────────────┐ ┌──────────────────────────────────────────┐ | |
| │ NRT THREAD │ │ RT THREAD │ | |
| │ (Graph Compilation & Control) │ │ (Schedule Evaluation Only) │ | |
| │ │ │ │ | |
| │ engine_send(cmd) arrives │ │ process_block() { │ | |
| │ │ │ │ │ | |
| │ ▼ │ │ ① Drain fast-path commands │ | |
| │ ┌──────────────────┐ ─────────────────────► (rtrb SPSC ring buffer) │ | |
| │ │ GraphCompiler │ fast-path │ │ SetParam, BufferReady... │ | |
| │ │ │ commands │ │ │ | |
| │ │ • topology ops │ │ │ ② Check for new schedule │ | |
| │ │ • topo sort │ │ │ ArcSwap::load_full() │ | |
| │ │ • rate adapters │ ─────────────────────► at block boundary only (I14) │ | |
| │ │ • sub-block │ ArcSwap │ │ │ | |
| │ │ splitting │ ::store() │ │ ③ Evaluate schedule ops │ | |
| │ └──────┬───────────┘ │ │ for op in schedule: │ | |
| │ │ │ │ execute(op) │ | |
| │ ▼ │ │ // bounded cost, no graph algos │ | |
| │ CompiledSchedule │ │ │ | |
| │ [Arc<Schedule>] │ │ ④ Push retired resources │ | |
| │ │ │ (old schedule, freed state) │ | |
| │ Drain retire ◄──────────────────────── │ SPSC retire queue (cap=8) │ | |
| │ queue + free retire queue │ │ │ | |
| │ resources │ │ ⑤ Optional topology intents │ | |
| │ │ │ (rare, bounded queue) │ | |
| │ Handle topology ◄──────────────────────── │ │ | |
| │ intents (rare) │ │ } // ZERO allocations in this block │ | |
| │ │ │ // ZERO graph algorithms │ | |
| └───────────────────────────────────────┘ │ // ZERO unbounded work │ | |
| └──────────────────────────────────────────┘ | |
| Invariant I1: ∀n: eval(Eₙ) performs zero heap allocations | |
| Invariant I2: Eₙ immutable during block n (snapshot consistency) | |
| Invariant I11: Graph compilation runs exclusively on NRT thread | |
| Invariant I14: Topology swaps occur only at block boundaries | |
| ═══════════════════════════════════════════════════════════════════════════════════════════════ | |
| THE GRAPH MODEL: FM Bell with Feedback Reverb | |
| ═══════════════════════════════════════════════════════════════════════════════════════════════ | |
| Rate: A = audio (per-sample), K = control (per-block) | |
| ┌───────────┐ | |
| │ LFO │ (K) | |
| │ SinOsc ├──── freq:5Hz ────┐ | |
| └───────────┘ │ control→audio | |
| │ (rate adapter | |
| │ inserted by | |
| ┌───────────┐ │ compiler) (inputs, state) → (outputs, state') | |
| │ Modulator │ (A) │ UGen process function | |
| │ SinOsc ├──── out:0 ───┐ │ | |
| └───────────┘ port 0 │ │ | |
| ▼ ▼ | |
| ┌───────────┐ | |
| │ Carrier │ (A) | |
| │ SinOsc ├──── out:0 ────┐ | |
| └───────────┘ port 0 │ | |
| ▼ | |
| ┌───────────┐ ┌───────────┐ | |
| │ FbDelay │ (A) ◄── feedback edge ──── │ Gain │ (A) | |
| │ DelayL ├──── out:0 ──┐ τ=40 samples │ │ | |
| └───────────┘ port 0 │ └─────┬─────┘ | |
| ▲ │ │ | |
| └────────────────────┘ ▼ | |
| (forward edge) ┌───────────┐ | |
| │ Out │ (A) | |
| Compiled schedule tiers: │ hardware │ | |
| T0: [LFO] [Modulator] (parallel) └───────────┘ | |
| T1: [RateAdapter K→A] (compiler) | |
| T2: [Carrier] Sub-block splitting (D54): | |
| T3: [Gain, FbDelay→Gain] (fb: 40s) τ ≥ 8 → SIMD | |
| T4: [Out] 4 ≤ τ < 8 → scalar | |
| τ < 4 → per-sample | |
| ═══════════════════════════════════════════════════════════════════════════════════════════════ | |
| THE GRAPH IR: "Send it over OSC, WebSocket, HTTP, carrier pigeon." — SPEC §6 | |
| ═══════════════════════════════════════════════════════════════════════════════════════════════ | |
| ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ | |
| │ Composition │ │ Visual │ │ AI │ │ SC │ | |
| │ Language │ │ Editor │ │ Generator │ │ Compat │ | |
| └──────┬───────┘ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘ | |
| │ │ │ │ | |
| └─────────────────┴──────────────────┴─────────────────┘ | |
| │ | |
| ┌───────▼───────┐ | |
| │ GRAPH IR │ JSON, human-readable, | |
| │ { version, │ LLM-readable, diffable, | |
| │ nodes, │ transport-agnostic, | |
| │ edges, │ version-stable | |
| │ feedback } │ | |
| └───────┬───────┘ | |
| │ | |
| ┌─────────────────┬───────┴───────┬─────────────────┐ | |
| │ │ │ │ | |
| ┌──────▼───────┐ ┌──────▼──────┐ ┌──────▼──────┐ ┌──────▼───────┐ | |
| │ Native │ │ WASM + │ │ Hardware │ │ Python │ | |
| │ Desktop │ │ Worklet │ │ Eurorack │ │ ML pipe │ | |
| │ (cpal) │ │ (browser) │ │ (no_std) │ │ (PyO3) │ | |
| └──────────────┘ └─────────────┘ └─────────────┘ └──────────────┘ | |
| ═══════════════════════════════════════════════════════════════════════════════════════════════ | |
| THE CRATE ARCHITECTURE: 9 MVP crates + future horizon | |
| ═══════════════════════════════════════════════════════════════════════════════════════════════ | |
| Stage 1 Stage 2 Stage 3 | |
| ┌──────────────┐ ┌─────────────────┐ ┌─────────────────┐ | |
| │ core-types │◄───┤ rt-alloc │◄───┤ buffer-impl │ | |
| │ │ │ BumpAllocator │ │ AudioBuffer │ | |
| │ Sample=f32 │ │ PoolAllocator │ │ BufferPool │ | |
| │ NodeId │ └─────────────────┘ │ 32-byte aligned │ | |
| │ Rate │ │ planar layout │ | |
| │ UGen trait │ ┌─────────────────┐ └─────────────────┘ | |
| │ UGenMeta │◄───┤ command-bus │ | |
| │ Command │ │ rtrb SPSC │ ┌─────────────────┐ | |
| │ EngineConfig │ │ ArcSwap slot │◄───┤ arena-storage │ | |
| │ ProcessCtx │ │ RetireQueue │ │ DenseSlotMap │ | |
| └──────┬───────┘ │ TimedCmdQueue │ │ O(1) dispatch │ | |
| │ └─────────────────┘ └─────────────────┘ | |
| │ | |
| │ Stage 5b Stage 4 | |
| │ ┌─────────────────┐ ┌─────────────────────────┐ | |
| └────────►│ ugen-trait │◄───┤ graph-engine │ | |
| │ Rate adapters │ │ GraphCompiler (NRT) │ | |
| │ Signal flow │ │ BlockEvaluator (RT) │ | |
| │ PRNG seeding │ │ topo sort, sub-block │ | |
| └─────────────────┘ │ schedule compilation │ | |
| └───────────┬─────────────┘ | |
| │ | |
| Stage 6a Stage 7a │ | |
| ┌─────────────────┐ ┌─────────────────────────────┤ | |
| │ audio-backend │◄───┤ engine │ | |
| │ cpal wrapper │ │ Public three-function API │ | |
| │ macOS/Win/Linux │ │ 8 hand-impl UGens: │ | |
| └─────────────────┘ │ SinOsc, Mul, Add, EnvGen, │ | |
| │ WhiteNoise, DelayL, │ | |
| │ OnePole, LinearUpsample │ | |
| └─────────────────────────────┘ | |
| ╌╌╌╌╌╌╌ POST-MVP HORIZON ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ | |
| ugen-derive graph-ir buffer-manager osc-interface session-trace | |
| ugen-stdlib monitor engine-observer wasm-bridge sc-compat | |
| ffi neural-ugen offline-eval python-bindings pattern-scheduler | |
| composition-language | |
| ═══════════════════════════════════════════════════════════════════════════════════════════════ | |
| THE 20 INVARIANTS: The constitutional laws of the engine | |
| ═══════════════════════════════════════════════════════════════════════════════════════════════ | |
| I1 RT allocation freedom ∀n: eval(Eₙ) performs zero heap allocations | |
| I2 Snapshot consistency Eₙ immutable during block n | |
| I3 Causality ∀ feedback edge: delay τ > 0 | |
| I4 Arity safety Connected ports must match dimensions | |
| I5 WCET feasibility Total compute ≤ block budget | |
| I6 Memory bound Pre-allocated memory ≤ Mmax | |
| I7 Reclamation safety No resource freed while RT holds reference | |
| I8 Rate consistency After adaptation, connected nodes share rate | |
| I9 Command ordering Sequential application at block boundaries | |
| I10 Clock tree acyclicity Clock graph C is a forest | |
| I11 RT thread never compiles Compilation exclusively on NRT | |
| I12 Output buffer aliasing Multi-output slices never overlap | |
| I13 Fan-out immutability Buffer not freed until all consumers read | |
| I14 Runtime transition cont. Topology swaps at block boundaries only | |
| I15 Engine processing bound Processing time within execution-class budget | |
| I16 Determinism profile Output equivalence follows configured profile | |
| I17 Overload transparency Overload never fails silently | |
| I18 Extension resource bounds Untrusted extensions bounded CPU/memory | |
| I19 Timed command ordering Same-time commands apply in FIFO order | |
| I20 Explicit late-event policy Missed deadlines follow declared policy | |
| ═══════════════════════════════════════════════════════════════════════════════════════════════ | |
| THE 10x THESIS: 6 architectural bets | |
| ═══════════════════════════════════════════════════════════════════════════════════════════════ | |
| ┌─────┬───────────────────────┬────────────┬─────────────────────────────────────┐ | |
| │ # │ Bet │ Status │ Key Evidence │ | |
| ├─────┼───────────────────────┼────────────┼─────────────────────────────────────┤ | |
| │ 1 │ Expressive │ OPEN │ R-42+R-43 compress 11→3 types; │ | |
| │ │ Compression │ │ positive but unvalidated │ | |
| ├─────┼───────────────────────┼────────────┼─────────────────────────────────────┤ | |
| │ 2 │ RT Integrity │ SUPPORTED │ Validated against 6 engines; │ | |
| │ │ │ ███████ │ I1 enforced; ArcSwap+retire queue │ | |
| ├─────┼───────────────────────┼────────────┼─────────────────────────────────────┤ | |
| │ 3 │ Optimization │ OPEN │ R-45 transform algebra; governance │ | |
| │ │ Leverage │ │ framework exists but unproven │ | |
| ├─────┼───────────────────────┼────────────┼─────────────────────────────────────┤ | |
| │ 4 │ Workflow Quality │ OPEN │ R-27 constructs unique vs │ | |
| │ │ │ │ CLAP/VST3/LV2/NIH-plug │ | |
| ├─────┼───────────────────────┼────────────┼─────────────────────────────────────┤ | |
| │ 5 │ Governance Clarity │ SUPPORTED │ D60 formalized; D63/D64 gates; │ | |
| │ │ │ ███████ │ R-23 semver constitution │ | |
| ├─────┼───────────────────────┼────────────┼─────────────────────────────────────┤ | |
| │ 6 │ Migration │ SUPPORTED │ Community #1 wish: embeddability; │ | |
| │ │ Feasibility │ ███████ │ Hadron validates engine-first │ | |
| └─────┴───────────────────────┴────────────┴─────────────────────────────────────┘ | |
| Summary: 3 SUPPORTED ███ 3 OPEN ░░░ 0 REFUTED | |
| ═══════════════════════════════════════════════════════════════════════════════════════════════ | |
| SC: WHAT WE KEPT vs WHAT WE FIXED | |
| ═══════════════════════════════════════════════════════════════════════════════════════════════ | |
| KEPT FROM SC (right) FIXED (wrong after 30 years) | |
| ───────────────────── ────────────────────────────── | |
| ✓ Unit generators as atoms ✗ Monolithic app → embeddable library | |
| ✓ Server/language separation ✗ IPC protocol → in-process API | |
| ✓ Real-time audio priority ✗ Global buses → pure graph edges (D55) | |
| ✓ Block-based processing ✗ Fixed block=1 for feedback → sub-block split | |
| ✓ Dynamic graph mutation ✗ Group ordering → flat DAG + tags (D30) | |
| ✓ Multiple rates ✗ Implicit rate conv → explicit adapters | |
| ✓ OSC as external protocol ✗ C++ aging codebase → Rust safety guarantees | |
| ✗ No observability → AI-first structured state | |
| ═══════════════════════════════════════════════════════════════════════════════════════════════ | |
| THE EVOLUTION: 19 phases across 8 days (Feb 5-12, 2026) | |
| ═══════════════════════════════════════════════════════════════════════════════════════════════ | |
| MILESTONE 1: RESEARCH & SPEC FINALIZATION (all 19 phases complete ✓) | |
| Feb 5 ─────────────────────────────────────────────────────────── Feb 12 | |
| │ │ | |
| │ Adversarial Review Arc "Double Helix — Full Signal" │ | |
| │ ┌──┬──┬──┬──┬──┐ ┌──┬──┬──┬──┬────┬──┐ │ | |
| │ │P1│P2│P3│P4│P5│ │P9│10│11│12│12.1│13│ │ | |
| │ │FM│Th│Me│Gr│UG│ │Co│Re│Co│Bo│SPI│Sy│ │ | |
| │ │ │re│mo│ap│en│ │re│co│nt│un│CE │nt│ │ | |
| │ └──┴──┴──┴──┴──┘ │ │nc│ra│da│ │he│ │ | |
| │ Types Thread Mem Graph UGen │ │il│ct│ry│ │si│ │ | |
| │ └──┴──┴──┴──┴────┴──┘ │ | |
| │ 48 research themes (R-01..R-48) │ | |
| │ Community & Reference Arc ┌──┐ │ | |
| │ ┌──┬──┬──┐ │14│ Reconciliation buffer │ | |
| │ │P6│P7│P8│ └──┘ │ | |
| │ │SC│Ha│Tr│ SC forums Finalization Arc │ | |
| │ │ │dr│an│ Hadron codebase ┌──┬──┬──┬──┐ │ | |
| │ └──┴──┴──┘ McCartney talks │15│16│17│18│ │ | |
| │ + gpt-5.3-codex │Du│Ga│Re│Ru│ 19: MVP Design ──┐ │ | |
| │ transcription │ra│p │f │st│ │ │ | |
| │ │bi│An│Li│Ec│ DESIGN-01..05 │ │ | |
| │ │li│al│b │o │ │ │ | |
| │ └──┴──┴──┴──┘ │ │ | |
| │ │ │ | |
| └──────────────────────────────────────────────────────────────────┘ │ | |
| │ | |
| MILESTONE 2: MVP BUILD (next — 8 phases planned) │ | |
| ┌────────────────────────────────────────────────────────────────────┘ | |
| │ | |
| │ M2-1: Foundation Types (core-types) | |
| │ M2-2: Memory & Communication (rt-alloc, command-bus) | |
| │ M2-3: Buffers & Storage (buffer-impl, arena-storage) | |
| │ M2-4: UGen Infrastructure (ugen-trait) | |
| │ M2-5: Graph Engine (graph-engine) | |
| │ M2-6: FM Synth Demo (audio-backend, engine, SinOsc/Mul/Add/EnvGen) | |
| │ M2-7: Karplus-Strong Demo (WhiteNoise, DelayL, OnePole, feedback) | |
| │ M2-8: Verification & Decision Validation | |
| │ | |
| └─► Goal: modulated sine wave + plucked string through speakers | |
| ═══════════════════════════════════════════════════════════════════════════════════════════════ | |
| RT-SPICE: The road not taken (yet) | |
| ═══════════════════════════════════════════════════════════════════════════════════════════════ | |
| Phase 12.1 evaluated real-time circuit simulation inside the audio graph. | |
| Verdict: BOUND (not v1, preserve option). | |
| 6 non-foreclosure criteria documented. | |
| "We respect the idea enough not to rush it." | |
| ═══════════════════════════════════════════════════════════════════════════════════════════════ | |
| AI AS FIRST-CLASS CITIZEN (Design Principle #5) | |
| ═══════════════════════════════════════════════════════════════════════════════════════════════ | |
| ┌─────────────────────────────────────────────────────────────────────┐ | |
| │ LLM / AI Agent │ | |
| │ │ | |
| │ Reads: engine_state.json (structured, human+LLM readable) │ | |
| │ { nodes, edges, load, cpu%, active_voices, muted... } │ | |
| │ │ | |
| │ Writes: graph_ir.json (same schema the engine consumes) │ | |
| │ { version, nodes: [...], edges: [...], feedback: [...] } │ | |
| │ │ | |
| │ "An engine that an LLM can reason about in real time." │ | |
| │ │ | |
| │ Also: differentiable audio (gradient flow through graph) │ | |
| │ neural UGens (ONNX at control rate, shaping audio DSP) │ | |
| │ structured observability from day one │ | |
| └─────────────────────────────────────────────────────────────────────┘ | |
| ═══════════════════════════════════════════════════════════════════════════════════════════════ | |
| THE 69 DECISIONS (selected highlights) | |
| ═══════════════════════════════════════════════════════════════════════════════════════════════ | |
| D1 Rust D30 Flat DAG + tags (no SC groups) | |
| D2 Library-first D34 FTZ/DAZ denormal handling | |
| D3 Two-thread model D36 UGen / UGenMeta trait split | |
| D4 Lock-free SPSC D37 UGenTypeId = FNV-1a hash | |
| D5 Typed signal model D42 BeginBatch / EndBatch | |
| D12 Zero RT allocations D50 Planar buffer layout | |
| D13 SPSC retire queue+ArcSwap D51 Trait objects + SlotMap | |
| D14 Snapshot consistency D53 RealTimeSafe hybrid marker | |
| D15 Modular crate architecture D54 Tiered sub-block splitting | |
| D25 64-sample default block D55 Pure graph edges (no buses) | |
| D29 Compile-and-swap model D60 Determinism profiles (3 tiers) | |
| D67 Optimization Tier S / Tier U | |
| D68 Three-guard termination | |
| ═══════════════════════════════════════════════════════════════════════════════════════════════ | |
| THE HUMAN STORY | |
| ═══════════════════════════════════════════════════════════════════════════════════════════════ | |
| ┌─────────────────────────────────────────────────────────────────────┐ | |
| │ │ | |
| │ One person. One week. Zero lines of production code. │ | |
| │ │ | |
| │ "Every phase gets researched, discussed, and understood before │ | |
| │ planning begins. The builder wants to understand what's │ | |
| │ happening at every step, not just approve plans." │ | |
| │ │ | |
| │ The project name: Tristan Murail — spectral music, revealing │ | |
| │ the inner life of sound. The engine does the same for audio │ | |
| │ computation. │ | |
| │ │ | |
| │ The author name: Flower Ornament — the Avatamsaka Sutra, │ | |
| │ where every jewel in Indra's Net reflects every other jewel. │ | |
| │ Every decision reflects every other decision. 69 of them, │ | |
| │ settled, zero contradictions. │ | |
| │ │ | |
| │ 4 YouTube transcripts processed with gpt-5.3-codex. │ | |
| │ James McCartney's talks from 30 years of SC development. │ | |
| │ Hadron keynote (the Rust rewrite attempt by the SC community). │ | |
| │ Not just reading — adversarially reviewing against the spec. │ | |
| │ │ | |
| │ 48 research themes in the "Double Helix — Full Signal" │ | |
| │ expansion. Named like DNA: core seams + exploratory hypotheses │ | |
| │ running in parallel, reconciled at checkpoints. │ | |
| │ │ | |
| │ RT-SPICE: loved enough to evaluate deeply, respected enough │ | |
| │ to defer. BOUNDed with 6 non-foreclosure criteria. │ | |
| │ │ | |
| │ The spec says "carrier pigeon" once (§6, on Graph IR transport). │ | |
| │ The rest is deadly serious. │ | |
| │ │ | |
| │ v0.1 → v0.7 in 3 days. Spec grew from initial draft to │ | |
| │ 4,824 lines with 25-entry bibliography, formal models grounded │ | |
| │ in Kronos/Arrp/Faust formalisms, and ASCII diagrams. │ | |
| │ │ | |
| │ 377 commits to master. 19 phases. All research. No code. │ | |
| │ The entire project is a bet that getting the decisions right │ | |
| │ matters more than shipping features fast. │ | |
| │ │ | |
| │ "If these [core types] are right, everything else is write-once. │ | |
| │ If these are wrong, everything rewrites." — DESIGN-05 §M2-1 │ | |
| │ │ | |
| └─────────────────────────────────────────────────────────────────────┘ | |
| ┌─────────────────────────────────────────────────────────────────────┐ | |
| │ 14 DESIGN PRINCIPLES (the philosophy condensed) │ | |
| │ │ | |
| │ 1. Separation of concerns is logical, not physical │ | |
| │ 2. The Graph IR is the real interface contract │ | |
| │ 3. Pure functional core, imperative shell │ | |
| │ 4. Rust as implementation, not user-facing language │ | |
| │ 5. AI as peer, not plugin │ | |
| │ 6. Time is signal, not infrastructure │ | |
| │ 7. Feedback is declared, not implicit │ | |
| │ 8. Rich metadata from day one │ | |
| │ 9. The RT thread does not think │ | |
| │ 10. Graceful degradation, not silent failure │ | |
| │ 11. Interactivity is an architecture invariant │ | |
| │ 12. Execution topology is a deployment choice │ | |
| │ 13. Optimization must be bounded and auditable │ | |
| │ 14. Timed events are core runtime semantics │ | |
| └─────────────────────────────────────────────────────────────────────┘ | |
| ═══════════════════════════════════════════════════════════════════════════════════════════════ | |
| THE PLATFORM MATRIX | |
| ═══════════════════════════════════════════════════════════════════════════════════════════════ | |
| Desktop/Server ─── Direct link / C FFI ──── cpal (CoreAudio/WASAPI/ALSA) | |
| Browser ────────── WASM + AudioWorklet ──── postMessage for Graph IR | |
| Mobile ─────────── C FFI native bridge ──── AVAudioEngine / AAudio | |
| DAW Plugins ────── Embed in process ─────── VST3 / AU / CLAP | |
| Game Engines ───── C FFI or native Rust ─── Bevy / Unity / Unreal | |
| Hardware ────────── no_std + alloc ────────── Eurorack / Daisy / Norns | |
| AI/ML ──────────── PyO3 bindings ─────────── PyTorch differentiable audio | |
| Network ────────── OSC/WebSocket adapter ── Same engine, different transport | |
| Same Graph IR everywhere. A synth created in a browser | |
| plays on a Eurorack module (if it uses compatible UGens). | |
| ═══════════════════════════════════════════════════════════════════════════════════════════════ | |
| ┌──────────────────────────────────────────────────────┐ | |
| │ │ | |
| │ "No existing system provides what modern audio │ | |
| │ applications need." │ | |
| │ │ | |
| │ 377 commits to prove what the answer looks like. │ | |
| │ Now build it. │ | |
| │ │ | |
| └──────────────────────────────────────────────────────┘ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment