Make hardware instruments behave like plugins. A Raspberry Pi 4B plays as an instrument track in Ableton Live today — Git-style total recall through the project’s own save/reopen, knobs as sample-accurate automation lanes, and offline bounce through the physical box.
Hardware synths, drum machines, and effects have connected to computers for forty years, and the connection is still fragile in one specific way: recall. Audio mostly works, MIDI mostly works — but reopen last month’s project and the hardware is not in the state you saved, and nothing will tell you. The deep integrations that fix this (multichannel USB audio, plugin-shell control, total recall) have existed only inside closed single-vendor ecosystems, because every vendor has to rebuild drivers, state sync, and DAW compatibility from scratch.
HARP is a complete, working implementation of that integration — with an open spec underneath, if you want to build a device on it. The reference device is a Raspberry Pi running a 16-part multitimbral, 8-voice-polyphonic synth (13 params per part); anything that speaks the protocol gets the same treatment from any conforming host:
Total recall, Git-style — device state is content-addressed and hash-verified; a saved project reopens with the hardware provably in the saved state, every overwrite preceded by a free snapshot, every mismatch resolved through explicit safe actions — never silently. The archive doubles as patch time-travel: every state the box has ever been pushed over is one click away.
Audio as a plugin — a dedicated stream into the plugin shell that bypasses the OS audio stack (no aggregate-device hacks), including a host-paced mode where the hardware renders deterministically, byte- identical, faster than real time: offline bounce through a physical box at ~25× real time, with 16 ms of reported latency at DAW buffers ≤ 256 — in the neighborhood of a good audio interface.
Multitimbral, addressed like plugins — one physical device is one session, and several shell instances can share it: drop the plugin on a handful of DAW tracks and each instance drives its own part — its own channel, params, recall state, and stereo output (16 parts, with a summed main mix alongside the per-part outputs). A recall-safe Part knob persists each track’s part in the project, and that per-part state moves intact between the VST3 and AU formats (the CLAP shell writes the same recall bundle).
Polyphonic, with per-voice modulation — each part is an 8-voice pool with deterministic voice allocation, so overlapping notes ring out on their own voices instead of stealing one. Modulation is non-destructive and per voice: a VST3 Note Expression or a CLAP per-note parameter modulation bends a single sounding note’s filter cutoff without touching the stored patch — and the two formats render byte-identically (the device applies the §9.5 mod the same regardless of which shell sent it).
Sample-accurate everything — DAW automation becomes device-interpolated ramps applied within ±1 sample; notes travel as UMP; an event fence makes “applied late” structurally impossible rather than statistically rare. Turn a knob on the hardware and the DAW records the automation (echo).
Musical time — devices follow the DAW’s transport: tempo, position, loops. The reference device’s arpeggiator locks to Live’s grid sample-exactly, survives loop wraps, and renders a byte-identical groove — determinism extended to musical time.
Identity, timing, diagnostics — engine versioning and parameter-map hashing protect old songs from new firmware, latency is measured (never guessed), and error counters at every layer end “it glitched” support threads with evidence.
Roadie-proof sessions — unplug the cable mid-song and plug it back: the shell reconnects, re-asserts the project’s state, and audio resumes. Hostile or corrupt wire input ends in a clean session reset, never a crash (every parser is fuzzed; a live abuse test is part of CI).
A monorepo for Casio CZ-101 phase distortion synthesis — including a preset manager web/desktop app, an in-browser phase distortion synthesizer, and a VST3/CLAP/AUv2 plugin.
QMidiArp is a MIDI arpeggiator, phrase generator and controller LFO for ALSA and JACK. It can run multiple synchronized arpeggiators, LFOs and step sequencers. The modules are also available as LV2 plugins with Qt user interface. QMidiArp has been growing since June 2009 on top of Matthias Nagorni’s original arp idea.
Features:
Programmable arpeggio patterns, LFO waveforms and sequences
Modular setup of arpeggiators, MIDI LFOs and step sequencers
MIDI-controllable (MIDI-Learn)
Synchronization with MIDI Clock or JACK Transport possible
Optional triggering by keyboard or continuous play mode for all modules
Patterns can be stored and switched by MIDI control while running
/synth is a minimalist, array-oriented synthesis environment. Heavily inspired by the K/Simple lineage and the work of Arthur Whitney, it treats sound not as a stream, but as a holistic mathematical vector.
📐 The Philosophy
This isn’t a DAW; it’s a vector-processing engine designed for “Base Camp” signal processing.
It uses:
One-Letter Variables: A-Z globals only.
Right-Associativity: Expressions evaluate from right to left.
Vectorized Verbs: Math applied to entire buffers at once.
Sound is a vector. A kick drum is a vector. A two-second bell tone is a vector. You do math on vectors and the result is audio. There are no tracks, no timelines, no patch cables — only expressions.
A collection of graphical midi based editors, each made specifically for the BOSS SY-1000 , Roland VG-99 guitar, or VB-99 bass synth units, which provide an alternative to the Boss or Roland version of midi editors, with full features and control of the SY-1000, VG-99, or VB-99 from a Windows, Mac, or Linux computer.
Features:
Midi editing of parameters on-line or off-line, text list generation of settings, file load/save/backup/restore, ease of use with graphical interface.
A different version specific for each device.
SY-1000FloorBoard version also has features to convert patches from VG-99,VB-99, GP-10, GT-1000 units.
This library can read SF2 SoundFont files and render audio samples from them in real-time. It properly reads in a compliant SF2 file and can be used to obtain meta data such as preset names. It also has an audio rendering engine that can generate audio samples for key events that come from (say) a MIDI keyboard. This library is currently being used by my SoundFonts and SoundFontsPlus applications for SF2 file parsing and, in the latter app, as the sample generating engine.
Although most of the library code is generic C++17/23, there are a few bits that expect an Apple platform that has the AudioToolbox and Accelerate frameworks available. The goal is to be a simple library for reading SF2 files as well as a competent SF2 audio renderer whose output can be fed to any sort of audio processing chain, but it would probably take some effort to remove it from the Apple ecosystem.