Audio → MIDI

Audio to MIDI Converter

Audio to sheet music: how the notes land before the staff is drawn

The short answer: a recording does not become a score in one step on this site, and this page will not pretend it does — there is no staff renderer here, no PDF, no MusicXML, no notation OCR. What runs here is the half a notation app cannot do for you: it listens to the sound and hands back a MIDI file holding the pitches and the timing it heard. Your notation app then draws the notation from that file. The measured part — the part this page adds — is how that file looks when it arrives. Every note of a chord is stamped slightly early, and by a different amount for each pitch, so a chord does not land as one vertical stack; measured on the converter's own analyser it spreads over 12–70 ms depending on the voicing. The export also states a tempo and a 4/4 bar but no key signature at all. Both are things you settle in the notation app, and both are measured below.

1. What happens to the recording before any staff exists

The tedious half of getting music onto paper by hand is the first one: turning a wall of waveform into a list of pitches with times attached. That job runs here, on your own machine, against constants you can check rather than take on trust:

Across 11 known-answer clips the audio→MIDI step hit 86.7% recall, with precision at 91.5%. That figure describes only the half this tool performs. It says nothing about how the score will look, which is what the rest of this page measures.

2. Three things that are not here, said plainly

People arrive on the phrase “audio to sheet music” expecting an output this site never produces, so here is the boundary in one place:

Saying this out loud beats a page that quietly implies a score it cannot make.

3. How the notes land: a chord does not arrive as one stack

Open the exported MIDI in a notation app and the first thing that can surprise you is a chord. It was played as a block; it may be drawn as a short roll. That is worth measuring rather than guessing at, so we did.

Every note of a test chord was written to begin on exactly the same sample, then run through this converter's own dsp.js — polyphonic mode, sensitivity 60, shortest note 60 ms, snapping off. Each note that came back was compared with the instant it was actually played, and each voicing was repeated at five different points in the file:

Measured on dsp.js in Node. Each row is a block chord — all notes at one instant — repeated at five start times. Every written pitch was recovered in every run.
Chord written (all notes at one instant)NotesSpread of the returned startsIn ticks at 120 BPM
C4 E4 G4311.6 – 23.2 ms11 – 22
C3 E3 G3 C4 E4523.2 – 58.0 ms22 – 56
C2 C3 E3 G3 C4558.0 – 69.7 ms56 – 67

Two things held across all fifteen runs:

The reason is the shape of the reading window. The analyser slides a 2048-sample window (92.88 ms at the converter's 22 050 Hz) forward in 256-sample steps and reports a note from the first window that already carries enough of it. That is why a start is never late, and why a note can appear up to one window early. A low note needs more of that window filled before its harmonics clear the gate, so it is stamped later than the top of the chord.

What it means on the page. Left raw, a notation app may read that spread as a slightly arpeggiated chord. It is simple to remove: one 1/16 grid cell at 120 BPM is 120 ticks, or 125 ms — wider than every spread measured above — so a single 1/16 snap folds each chord back into a block. Check pitches first, then snap as the last step before export.

What this measurement is not. These are synthesised block chords, played by arithmetic rather than by a hand, so the figures bound the converter's own contribution and not a real performance's. A human never hits five notes on one sample either; a real recording carries its own spread on top of these numbers.

4. Who decides what ends up on the page

A score is three layers of decision, and only the first is made here:

The three layers, and where each one is decided
What you see on the pageWho decides itWhat carries it
1. The notes: pitch and timingThis converter, read from the soundFormat-1 MIDI, 2 tracks, TPQ 480, plus the CSV
2. The tempo and the bar linesThis converter's writer, from the BPM you typeOne tempo event and one 4/4 time signature; neither is detected from the audio
3. The key, the clefs, the beaming, the restsYour notation app, or youNothing in the file — measured: 0 key-signature events

The last row is the one to remember. A MIDI file has a slot for the key, and this export leaves it empty: the file carries exactly one tempo event and one time-signature event (always 4/4), and no key-signature event at all. So the key printed on your page was chosen by the notation app, or by you — never by the recording. If the piece is in D minor, say so in the app before you trust a single accidental.

5. Checking the result yourself

Nothing above needs to be taken on faith, and you should not extend faith to an accuracy figure you cannot reproduce. Two minutes is enough:

  1. Download the .csv beside the MIDI. Its columns are index,midi_note,note_name,start_sec,end_sec,duration_sec,velocity.
  2. Sort the rows by start_sec and look at any group that should be a block chord: if the starts differ by a handful of milliseconds, that is the roll measured in section 3.
  3. Compare a few rows against the same notes in your DAW's piano roll. The CSV is to four decimal places, so the comparison is exact rather than approximate.

If a chord looks too ragged for the page, raise the snap to 1/16 before exporting and re-download; if a pitch is plainly wrong, fix it in the CSV or in the notation app rather than re-converting — re-running the same file gives the same notes.

Questions

Can a recording be turned into sheet music here, in one step?

No. There is no notation renderer on this site: the tool returns a MIDI file and a CSV and stops there. The staff is drawn by MuseScore, Dorico, Sibelius or your DAW's score editor when you open that MIDI. This site covers the listening; the drawing is a different program's job.

Why is a chord drawn as a slight roll instead of a block?

Because each pitch is stamped from the first reading window that carries enough of it, and the low notes of a chord clear that gate later than the high ones. Measured on block chords: a triad spread 11.6–23.2 ms, a five-note chord 23.2–58.0 ms, and 58.0–69.7 ms once a low bass was added. One 1/16 snap at 120 BPM — 125 ms — is wider than all of them, so it removes the roll in a single step.

Does the file tell my notation app what key the music is in?

No. The export writes one tempo event and one time-signature event — always 4/4 — and zero key-signature events. The key that appears on the page comes from the notation app or from you; it is never read out of the audio.

What exactly is inside the MIDI I download?

Format 1, 2 tracks, TPQ 480, with each note held as a note-on/note-off pair. Polyphonic mode keeps up to 6 pitches per frame and pitches run from 55 Hz (A1) to 1800 Hz (A6); velocity follows loudness and reaches 127 at −2.22 dBFS. The CSV repeats the whole list to 4 decimal places of a second.

How accurate is the audio-to-MIDI step, then?

86.7% recall and 91.5% precision across 11 known-answer clips — that is the half this tool performs. The CSV exists so you can audit it note by note against your DAW before anything reaches paper.

Everything above is about the half that runs here: audio in, MIDI and CSV out, nothing uploaded and nothing drawn. Put a file through on the converter and you will meet the two things measured here — a chord that arrives as a short roll, and a tempo with no key standing beside it.

Related guides