audioJS

Audio to MIDI and sheet music

Drop a melody. Get MIDI, MusicXML and ABC files, and hear back what was recognized.

Drop a melody or song here
or click to choose, or paste with Ctrl+V

Nothing is uploaded. Everything runs in this tab with @audio/mir, @audio/beat, @audio/midi, @audio/musicxml, @audio/midi-render.

Melody transcription that runs on your device

Cloud audio-to-MIDI services upload your file and hand back a download. This page runs the whole pipeline in your browser: @audio/mir-transcribe tracks pitch continuity across @audio/mir-multif0 frames (Klapuri's 2006 iterative spectral-subtraction multi-F0 estimation) into note events, @audio/beat finds the tempo, and @audio/mir-key reads the key from chroma frames the way the Key and BPM finder does. The notes are written out with @audio/midi (Standard MIDI File), @audio/musicxml (MusicXML 4.0, quantized and spelled to the key signature, plus ABC notation) and rendered back to audio with @audio/midi-render's synthesized General MIDI instrument set, so the transcription can be checked by ear before it is opened anywhere else.

What it is good at

One instrument or voice at a time: a sung or whistled melody, a solo piano or guitar line, a bassline. The note tracker follows the strongest pitch and closes a note on a gap, so a clean monophonic recording transcribes cleanly.

What it will not do

It does not reliably separate a chord into its notes, does not follow drums, and will not cleanly split two independent melodic lines playing at once. Multi-F0 estimation reports which pitches are present, not which instrument they belong to; treat the output as a starting point, not a finished score.

Reading the report

Notes found, the tempo and key used (auto-detected or the value set above), the pitch range, and the first bars of the ABC transcription to sanity-check before downloading. A confidence percentage on an auto-detected key, or a low-confidence note on the tempo, is a signal to set that value manually instead.

Questions

Does this work on full songs with drums and vocals?

Not well. The multi-F0 tracker in @audio/mir-transcribe follows the loudest continuous pitch at each moment; a dense mix confuses it. It is built for one instrument or voice at a time: a whistled or sung melody, a solo piano line, a clean guitar or bass. For a full band mix, use a dedicated ML transcription tool.

What do I do with the MusicXML and ABC files?

Open the .musicxml file in MuseScore, Finale or Sibelius for engraved sheet music. The .abc file is plain text: paste it into any ABC renderer (abcjs, EasyABC) to see or print the same tune without installing anything. The .mid file imports into any DAW.

Why is the tempo wrong?

Tempo comes from the @audio/beat onset and beat tracker, which can lock onto half or double the real tempo, or drift on rubato playing. Type a tempo in manually if the note grid looks off.

Why is the key wrong?

Key comes from matching chroma (pitch-class) energy against major and minor key profiles over the first two minutes. Modal or ambiguous melodies can report the relative major or minor, which shares every note. Pick a key manually to force the spelling.

Is my audio uploaded anywhere?

No. Transcription, tempo and key detection run in your browser with @audio/mir and @audio/beat; the MIDI, MusicXML and ABC files are written locally with @audio/midi and @audio/musicxml. Nothing leaves your device.