Manguebyte

Features

What exists today

Twenty-three crates, designed to work together and each usable on its own: take the whole framework, or only the buffer type. Everything listed here is in the repository and covered by its tests.

This is a small part of the road ahead. What is missing is listed just as plainly.

Core

Crates: manguebyte-core

The types everything else is built on. This crate has no dependencies at all.

  • AudioBuffer: planar audio, one contiguous slice per channel
  • The Sample trait, so processors work in f32 or f64
  • Smoothed values for parameters that must not click
  • Atomic floats and a wait-free single-producer, single-consumer queue
  • A log the audio thread can write to
  • Decibel maths, and a guard against subnormal numbers

Signal processing

Crates: manguebyte-dsp

A tuple of processors is a processor: the chain is resolved at compile time, with no virtual calls and no allocation.

  • The Processor trait and tuple chains; sample-accurate events and transport
  • A polyphonic Synth with per-note expression and modulation, accents and legato
  • Band-limited oscillator and a band-limited wavetable oscillator; noise; LFO with tempo sync
  • Biquad filters in 8 shapes; state-variable, one-pole and ladder filters; high-order IIR design (Butterworth, Chebyshev, elliptic); Linkwitz-Riley crossovers
  • A FIR filter, and convolution with zero latency, true stereo and responses swapped while playing
  • Compressor, noise gate, expander, sidechain keying for the dynamics, and a look-ahead limiter whose ceiling holds for every sample
  • Interpolated delay lines and echo; chorus and flanger; phaser; reverb
  • ADSR envelope, envelope follower, smoothed gain, panner, dry/wet mixing, waveshaper
  • Oversampling by 2, 4, 8 or 16; resampling at any ratio; FFT of any length, window functions, FIR design
  • Response curves to draw them all, from filters and dynamics to envelopes, LFOs, delays and reverb tails, worked out from the settings without touching the heap

Instruments

Crates: manguebyte-dsp

Voices ready to play, each with presets, measured for tuning, decay, velocity and accent, and all at one loudness.

  • Physically modelled plucked strings: guitars and basses
  • Four-operator FM, with piano, bell and bass presets
  • A tonewheel organ with a rotary speaker
  • The drums and kick bass of the classic analogue drum machine, and an acid bass with accent and slide
  • Drum kits: acoustic drums and cymbals by modal synthesis, calibrated against recordings of a real snare and crash; the 909, 606 and CR-78; kits for trap, techno, house, drum and bass and lo-fi

Metering and analysis

Crates: manguebyte-analysis

Meters that run on the audio thread and that any thread reads without waiting.

  • Loudness to BS.1770 and EBU R 128, checked against the EBU’s test signals
  • True peak, peak, RMS, VU and PPM meters; stereo correlation
  • A spectrum analyser with octave bands and weighting
  • Pitch detection, with the nearest note named

Processing graph

Crates: manguebyte-graph

A graph that is rewired while it plays.

  • Edits reach the audio thread through a wait-free queue
  • Nodes keep their state across edits
  • Removed nodes are freed off the audio thread
  • Paths of different latency are lined up automatically

Parameters

Crates: manguebyte-params

Parameters are atomics in a struct. There are no listeners.

  • Lock-free float, integer, switch and choice parameters
  • Linear, skewed and logarithmic ranges, conversion to and from text with units, and smoothing
  • Saved state that survives version changes
  • Every parameter described as data and as JSON, for editors outside Rust

Plugins

Crates: manguebyte-plugin manguebyte-clap manguebyte-vst3 manguebyte-lv2 manguebyte-standalone

Write a plugin once. Export it as CLAP, VST 3 and LV2 with one line each, run it as an application, and test it with no host.

  • The Plugin trait that every format wraps, with the MIDI controllers it listens to, and plugin state
  • Harness: plays notes, automation and a sidechain into a plugin inside a unit test
  • CLAP: notes, expression, automation and modulation arrive on their exact frame. Passes the CLAP project’s validator
  • VST 3: every automation point lands on its frame; notes carry ids, tuning and per-note expression; the controllers a plugin declares arrive as MIDI again. Passes Steinberg’s validator on Windows, Linux and macOS
  • LV2: the Turtle files are generated, and CI loads the example plugins’ bundles with lilv; not yet run in a host, and without an editor
  • Standalone: runs a plugin as an application, with the sound card out, MIDI keyboards in, and the microphone in for effects

Plugin editors

Crates: manguebyte-gfx manguebyte-ui manguebyte-window manguebyte-gui

Editors drawn on the CPU and opened in a child of the host’s window, on Win32 so far. Tested in CI; nobody has opened one in a host by hand yet.

  • The editor interfaces of both formats, CLAP’s gui extension and VST 3’s IPlugView, tested through their real interfaces
  • Windows on Win32 that present only what changed, and a headless backend that lets a test drive a window on any system
  • 2D drawing on the CPU: paths, gradients, images, clips and layers, recorded as a scene; text with an embedded Inter subset
  • Widgets: label, knob, slider, toggle, meter and canvas; a text field and values typed into knobs and sliders; popup menus, a combo box, hover and tooltips
  • Parameter edits as gestures, an accessibility description required of every widget, and a harness that drives it all in a unit test
  • Editors for both example plugins

Hosting plugins

Crates: manguebyte-host

Load plugins made by anyone and run them as processors.

  • CLAP and VST 3, through one interface for both formats
  • Every event on its frame, and nothing allocated while processing
  • Thread rules in the types: state cannot be loaded from the audio thread

Sampler

Crates: manguebyte-sampler

An SFZ player, open so that any program can play the instruments it is given.

  • SFZ instruments with inheritance, #define and #include, their samples loaded from files or from memory
  • Played on the exact frame, with velocity layers, round robin, release triggers, loops with crossfades, choke groups and voice stealing that fades
  • Builds for WebAssembly

In the browser

Crates: manguebyte-web

An engine for a browser’s AudioWorklet. Tested natively and in Node.js, not yet in a browser’s audio thread under load.

  • Parts that play a synth, drum kits, SFZ instruments or the instruments of manguebyte-dsp
  • A chain of effects for each part, and a master bus with a true-peak limiter
  • Every kind of instrument and every preset at one loudness, sampled instruments measured as they load
  • Events as 32-byte records that land on their exact frame, through a shared-memory ring
  • WebAssembly exports with no imports, an AudioWorklet and a demo page

MIDI

Crates: manguebyte-midi

MIDI 1.0 and 2.0, with timing kept to the sample.

  • MIDI 1.0 channel and system messages, a byte-stream parser, standard MIDI files
  • A sample-accurate MidiBuffer
  • MIDI 2.0 packets (UMP) and translation between the protocols
  • RPN and NRPN; MPE zones and note tracking
  • A keyboard state an interface can read while the audio thread writes

Audio files

Crates: manguebyte-formats

Read and write whole files or block by block, from disk to the audio thread.

  • WAV (with RF64), AIFF and FLAC, read and written
  • Ogg Vorbis and MP3 read, with decoders written from their specifications and tested on files libvorbis and LAME wrote
  • Whole or block by block, with exact seeking
  • A FLAC encoder and decoder written from the specification and checked against FFmpeg
  • Wait-free bridges to play and record from an audio callback

Open Sound Control

Crates: manguebyte-osc

Messages from controllers and live-coding programs, on the frame they ask for.

  • OSC over UDP and TCP
  • A real-time bridge that puts time-tagged bundles on their exact frame

Devices

Crates: manguebyte-devices

Sound cards and MIDI ports.

  • Device listing and selection
  • Playback, recording and full-duplex streams, in any hardware sample format
  • MIDI input and output ports, with arrival times mapped to frames so a player’s timing survives the audio buffer

Command-line tool

Crates: cargo-mangue

From an empty folder to an installed plugin.

  • cargo mangue new creates a plugin crate from a template, instrument or effect
  • bundle turns it into a .clap and a .vst3 in each system’s layout, and bundle --format lv2 into an .lv2
  • install copies a plugin into the user’s plugin folders
  • validate runs the CLAP and VST 3 validators on it

The manguebyte crate gathers all of them under one name, with a prelude.

Not there yet

These do not exist in Manguebyte today. If you need one of them now, JUCE has it.

  • A plugin editor opened in a host by hand: so far the editors are tested in CI only
  • Editor windows on macOS and Linux
  • LV2 run by a host or checked by lv2lint, and LV2 editors
  • The browser engine and the sampler in a browser’s audio thread under load
  • Audio Unit and AAX plugin formats
  • Encoding to lossy formats, and reading Opus
  • Plugin scanning, and the editors of hosted plugins
  • Mobile platforms
  • A release on crates.io, and a stable API

The roadmap lists every planned item and its status, and where JUCE is ahead says the same from the other side.