Brume: An Open-Source 24-Voice Multi-Timbral Synth for the CM5
Brume turns a Raspberry Pi Compute Module 5 (CM5) and a touchscreen into a standalone, four-part synthesizer. It runs four synthesis engines simultaneously—FM, Harmonic, Timbral, and Granular—each with 6 voices for a total of 24 voices. The entire signal path is generated from live math; no samples are used.
Engines
Part 1: FM – Six operators across twelve algorithm topologies. Per-operator ratio and level, global feedback, a per-voice FM-index envelope, and a state-variable filter (SVF) with its own envelope. This is classic DX-style FM with subtractive shaping.
Part 2: Harmonic – Additive synthesis with eight harmonics under a Gaussian scanning window. Per-harmonic waveform morph, FM on the fundamental, spectral tilt, and odd/even balance.
Part 3: Timbral – A triangle core fed into a wave-multiplier shaper with linear FM, sub-oscillator, self-modulation feedback, and expanded symmetry. Produces nonlinear spectra through cascaded wavefolding.
Part 4: Granular – Pitched clouds of micro-oscillator grains with morphable waveforms. Parameters include density, scatter, drift, and intra-grain FM.
Signal Architecture
Every voice follows the same path: MIDI in → voice allocation → modulation → filter → envelope → mixer. The mixer sends to delay and reverb buses, plus a Lua FX slot for custom processing. The master output includes a saturator, chorus, delay, reverb, and a limiter.
Meridian: USB to DAW
A single USB cable carries multi-channel audio out (stereo plus planned per-part stems), bidirectional MIDI, and clock. Class-compliant—no drivers, no manager app. Works with Bitwig, Logic, Ableton, Reaper, and others on macOS and Linux.
Specification
- Platform: Raspberry Pi OS Lite, Rust audio runtime, 10.1-inch capacitive touch display (1024×600 logical layout, auto-scales).
- Polyphony: 24 voices, 6 per part.
- Filter: SVF per voice, 2 ADSR envelopes per voice.
- Modulation: 2 LFOs + 2 step sequencers per part.
- Effects: Saturator, Chorus, Delay, Reverb (per-part sends).
- MIDI: USB class-compliant, clock sync.
- Scripting: Lua 5.4 for sequencing, DSP, and custom FX.
- Hardware: CM5 (quad-core ARM A76, 8 GB RAM, 32 GB eMMC), carrier board (CM5 IO Board with USB OTG), HDMI touchscreen.
Bill of Materials
- Compute Module 5 (8 GB RAM, 32 GB eMMC, WiFi)
- Carrier board (CM5 IO Board)
- 10.1" HDMI touchscreen (reference: 1920×1200)
- Software: Brume installs onto Raspberry Pi OS Lite via
brumectlCLI. The CLI adds runtime packages, labwc/webkitgtk shell, audio config, presets, and systemd service. Update with--update.
Controllers
- Reference: Korg nanoKONTROL2 (8 knobs, 8 faders, transport). Ships with default CC-mapping JSON and Lua starter script.
- Deep surface: Novation Launch Control XL 3 (24 endless encoders, 8 faders, 16 pads). Dedicated CC-mapping JSON and Lua scripts in development.
- Open control layer: Plug in any class-compliant MIDI controller, use MIDI learn, save mapping, and shape behavior in Lua.
Why It Matters for Developers
Brume is a fully open-source, programmable synthesizer. The entire audio runtime is written in Rust, and the UI runs on labwc/webkitgtk. You can extend it with Lua scripts for custom sequencing, DSP effects, or controller mappings. If you're a developer interested in audio programming, embedded Linux, or Rust, Brume is a concrete, hackable platform.
Getting Started
To build Brume, you need a CM5, an IO board, a touchscreen, and a controller. Install Raspberry Pi OS Lite, then run brumectl to set up the software. The repository likely contains build instructions and a prebuilt image. Start by exploring the Lua scripting API to create custom effects or sequencers.
