Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Waveform Renderer Interface Design

Core philosophy

An audio waveform renderer with playback that's "stupid easy" to consume from any language or environment. This means:

  • 🌐 WebAssembly support with minimal JavaScript glue
  • 🚀 Simple C-compatible FFI for native bindings
  • 🖼️ Pull-based viewport rendering that's configurable:
    • Any FPS
    • Geometric output for GPU-based rendering (WebGPU, OpenGL, etc)
    • Rasterized output for CPU-based rendering
    • Optional phase-locked loop smoothing
  • 🔊 Pluggable audio implementations:
    • FMOD for native
    • Web Audio for web
    • Bring-your-own (JUCE, PortAudio, etc)

Architecture

┌─────────────────────────────────────────────┐
│              Consumer Layer                 │
├─────────────────────────────────────────────┤
│  Python │ JavaScript │ Swift │ C++ │ Java   │
├─────────────────────────────────────────────┤
│             Bindings Layer                  │
├─────────────────────────────────────────────┤
│      C FFI          │      WASM API         │
├─────────────────────────────────────────────┤
│            src-core (Rust)                  │
│  ┌────────────────────────────────────┐     │
│  │   Waveform Renderer Core           │     │
│  ├────────────────────────────────────┤     │
│  │ • Peak detection                   │     │
|. | • RMS detection                    │     │
│  │ • Audio plugin bridge              │     │
|. | • Phase-locked loop smoothing      │     │
│  │ • Viewport rendering               │     │
│  └────────────────────────────────────┘     │
└─────────────────────────────────────────────┘

Javascript usage

const driftwave = await Driftwave.create();
driftwave.load('audio.mp3');
driftwave.on('ready', () => driftwave.play());