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.
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.
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.