← Design + Engineering

Instrument · MIT Media Lab

HUM CONTROL

Humming as a control signal

RoleProduct · Design · Full-stack
Year2025 – 26
StackWeb Audio · YIN pitch tracking

An instrument you steer with your voice. Hum a note and a rhythm, and a four-part loop moves to your key and your tempo; then reshape each part through a control matrix. The first version ran on a fine-tuned AudioLDM. This one runs live in your browser.

Overview

01

Producers know what they want long before they can name the parameter for it. HumControl makes the voice the handle: you hum the key and the feel you hear in your head, and the music moves to meet it. Sliders stay, but as the fine control, not the way in.

Hum, and your pitch draws as you sing. Stop, and the loop takes your note as its new root at the next bar line and your rhythm as its tempo. Then each part (bass, chords, melody, drums) has its own row in the matrix: gain, pitch, brightness, drive.

Play it

Try it
A MINOR · 124 BPM

Hum a note, a few times, then stop.

No mic: pick a note
Bass0 dB
Chords0 dB
Melody0 dB
Drums0 dB

The real engine in a compact layout, played by your hum or a picked note.

Lost, then rebuilt

02

The first HumControl was built at the MIT Media Lab on a fine-tuned AudioLDM, with humming used to segment a track into its parts. The model was lost in a laptop wipe. Rebuilding it made the point clearer: the value was never the weights, it was the interaction. So the rebuild starts model-free, runs anywhere, and treats generative models as a backend to plug in, not the product.

Redesign

v0.1 → v0.2

System

Architecture
HUMCONTROL · SYSTEM2025 – 2601 / THE HUMPitch sets the key, gaps the tempoADMedian note → the keyA → D minor, at the next bar lineThe gaps → the tempo124 → 133 BPM02 / IN THE BROWSERNo server, heard in about 120 msA · MICYour humthe loop ducksB · YINPitch, every frame70–600 HzC · CONTROLKey + tempoat the bar lineD · LOOP4 synthesized partstrue stemsE · MATRIXPer partGAIN · PITCH · BRIGHT · DRIVEF · OUTSpeakersno render step03 / VERSIONSThe interaction outlived the weights2025Fine-tuned AudioLDMlost in a laptop wipe2026 · v0.1Python + Gradioset sliders, press Render2026 · v0.2Live, in the browserhum, drag, hear itHUMCONTROL2025 – 2601 / THE HUMPitch sets the keyADMedian note → the keyA → D minor, at the next bar lineThe gaps → the tempo124 → 133 BPM02 / IN THE BROWSERNo server, about 120 msA · MICYour humthe loop ducksB · YINPitch, every frame70–600 HzC · CONTROLKey + tempoat the bar lineD · LOOP4 synthesized partstrue stemsE · MATRIXPer partgain · pitch · bright · driveF · OUTSpeakersno render step03 / VERSIONSThe interaction outlived the weights2025Fine-tuned AudioLDMlost in a laptop wipe2026 · v0.1Python + Gradioset sliders, press Render2026 · v0.2Live, in the browserhum, drag, hear it

How it works

03

Everything runs in the browser, with no server. The loop is synthesized part by part, so each part is a true stem rather than a separation guess. Pitch is tracked with YIN on every animation frame; the median note moves the loop’s root to your pitch class, and the gaps between your hummed notes set the tempo. The matrix mirrors the Python version’s DSP (gain, a brightness shelf and low-pass, tanh drive), and every change is heard within about 120 ms. No render button: latency is part of the design.

States

The hum

Design decisions

04

One gesture. The hum is the only big target on the screen; everything else is fine control. A key change lands on the next bar line, not mid-phrase, so steering never sounds like a glitch, and the loop ducks while you hum so the mic hears you, not the speakers.

Controls drawn like hardware. A matrix cell is a fader you drag vertically, with Shift for fine moves, scroll, arrow keys and a double-click to reset. Its fill grows from the zero line, so a cut and a boost read differently at a glance, and the value sits on a dark backing so the fill never strikes through the number.

Nothing silent. Listening, heard, nothing heard and microphone blocked each say what happened in one line. Every control is a real slider or toggle to a screen reader, and every action has a key: Space, H, A, 1–4.

Component

Matrix cell

Next

05

Real songs, separated into stems once and cached. A hummed melody, not just a key, mapped onto a part note by note. Generative restyle per part with current audio models, gated behind a GPU so the free version never breaks. And an evaluation set of hum-to-intended-change pairs, scored for pitch and tempo error with a latency budget, so “it understood me” becomes a number.

Stack

Built with
AudioWeb Audio API: synthesized stems, live DSP
PitchYIN, per frame, 70–600 Hz
LabPython rebuild: librosa, SciPy, Gradio; Demucs optional