cycle-5 post-pub · 2026-08-09

MIDI → expressive audio, in the browser.

Stage 2.5 of the music-transcription-monitor pipeline. Take a melody (in plain text, or pick a built-in tune), pick one of the four MIDI-DDSP pretrained timbres, dial in the expression, hit Play. The browser uses the Web Audio API to synthesise it locally — no server, no fetch, no model download. For the real neural-synthesis path (the actual MIDI-DDSP checkpoints, 4 instruments, Apache 2.0) run setup/ddsp_transfer.py against your own MIDI file.

No server No API No fetch Web Audio API WAV export 4 timbres Apache 2.0

Tool

Pick a tune, pick a timbre, play

The browser preview approximates the four MIDI-DDSP instrument timbres (violin, flute, saxophone, trumpet) with Web Audio API oscillators + filters + envelopes. The exact synthesis isn't the same as the real MIDI-DDSP model — it's a no-install first look at how the round-trip (audio → score → re-timbred audio) actually sounds.

Ready
How the timbre is approximated (vs. real MIDI-DDSP)

The real magenta/midi-ddsp is a TensorFlow hierarchical model — Notes → Performance → Synthesis — trained on the URMP chamber-ensemble dataset. It ships 4 pretrained checkpoints (violin, flute, sax, trumpet) under Apache 2.0, archived Feb 2024 but the inference path is stable.

This browser preview is not that model. It's a Web-Audio-API approximation that uses the same 4 instrument names and the same 3 expression controls (vibrato, brightness, attack) so you can hear the timbral difference immediately, with no install. The real model runs locally via setup/ddsp_transfer.py (cycle-5 addendum) and produces much more realistic output.

What this preview gets right: the instrument-by-instrument timbral character (sine vs sawtooth vs square, the band-pass vs low-pass filter shapes, the vibrato depth + rate). What it doesn't: the trained DDSP's harmonic + noise modeling, the per-note expression conditioning, the reverb tail.

Piano roll —

What this is: a static, no-install preview of Stage 2.5. The browser synthesises the melody in the selected timbre using OscillatorNode + BiquadFilterNode + GainNode + a vibrato OscillatorNode chained into the pitch. The piano roll on the right is the same note list drawn on a canvas grid.

What this is not: the real MIDI-DDSP neural synth. The real model is a TensorFlow hierarchical inference (Notes → Performance → Synthesis with 6 expression controls). To use the real one, run python3 setup/ddsp_transfer.py path/to/your.mid --instrument violin against any .mid file you have (the Stage 2 output, or your own).

What runs locally: everything. No server, no fetch, no model download, no API key. The whole demo is ~600 lines of HTML+CSS+JS in dashboard/demo-ddsp/. Open index.html in any modern browser, or serve the dashboard with python3 -m http.server 8765 and visit http://127.0.0.1:8765/demo-ddsp/.