FileKiln

MP3 to MIDI Converter

Convert MP3, WAV, or OGG audio to a MIDI file using Spotify's open-source Basic Pitch model, running entirely in your browser. Audio never uploaded.

Ready when you aremp3 → midi

Runs on your computer. Nothing gets uploaded.

Your stuff stays yours. Your file is opened with JavaScript inside this page. It is never transmitted, and the tool keeps working with the network unplugged.

Drop in a recording and get a MIDI file of the notes it contains, transcribed by Basic Pitch - the open-source neural network Spotify's audio research team published - running entirely inside this page. Your audio is decoded, resampled, and fed through the model locally; the ~1 MB model downloads once and nothing you play ever leaves the machine. The result renders as a piano roll so you can see what was heard before downloading, with note velocities taken from the model's confidence. The MIDI file carries notes only; pitch bends the model hears are not written to it. Honest expectations: transcription is an estimation problem. Solo piano, guitar, voice, and other clearly pitched sources come out remarkably well; dense mixes with drums come out impressionistic.

How to turn a recording into MIDI

  1. Click Choose an audio file (.mp3, .wav, .ogg…) or drag a file onto that box.
  2. Watch the status line. It moves through Decoding yourfile.mp3 locally…, then Loading the Basic Pitch model (~1 MB, first run only)… on the first file, then Transcribing locally… N%.
  3. When it reads N notes transcribed from X.Xs of audio. Piano roll below., look over the piano roll. Time runs left to right, pitch runs bottom to top, and brighter bars are notes the model was more confident about.
  4. Press Download MIDI. The file keeps your audio's name with a .mid extension.

How long it takes, and what to do if it seems slow

The model runs on your computer, so the speed is your computer's rather than ours. Your browser picks the fastest engine it can get, and which one it gets is the whole story:

What your browser can useRoughly how long
Graphics acceleration, which most laptops and phones haveQuicker than the recording itself
WebAssembly, used when there is no graphics driverAlso quicker than the recording. On a desktop with no graphics driver at all, a 4.5 second clip took 1.9 seconds
Plain JavaScript, the last resort if neither is availableSeveral times the length of the recording. The page tells you when this happens

Office PCs, virtual machines and remote desktops are the usual places with no graphics driver, because Windows hands the browser a software renderer instead. That is the middle row, and it is fine. Separately, the first file you convert also downloads the model, about 1 MB, once per browser.

If it seems to be taking a while, look at the percentage. It counts upward with the elapsed seconds next to it, and the page stays usable throughout, because the model runs on its own thread rather than the one drawing the page. A percentage that is still moving means it is working, and it is worth waiting. If it has stopped and the seconds have stopped with it, reloading is safe: nothing was ever sent anywhere, so there is nothing to lose but the time.

How the transcription works

Audio is a waveform, and MIDI is a list of key-down and key-up events. Converting one to the other means estimating which pitches sound at every moment, in four stages.

  1. Decode and resample. Your browser's audio engine decodes the file, mixes all channels down to mono, and resamples to 22,050 Hz, the rate the model was trained on.
  2. Run the model. Basic Pitch reads the audio in overlapping two-second windows and outputs, about 86 times per second, how likely each of the 88 piano pitches (A0 to C8) is to be sounding, how likely each is to be starting, and a finer pitch contour.
  3. Pick out notes. A note begins where the onset likelihood passes a threshold and lasts while the sounding likelihood stays high. This page uses 0.25 for both thresholds, lower than the library's defaults of 0.5 and 0.3, so it catches quieter notes at the cost of more stray ones. Notes shorter than 5 frames (about 58 ms) are dropped.
  4. Write the file. Each note becomes a note-on and note-off pair. Velocity is the model's average confidence for that note times 127, so it reflects certainty more than loudness.

The file is a Standard MIDI File, format 0, with a single track on channel 1. It uses 480 ticks per quarter note and a fixed tempo of 120 bpm, which works out to 960 ticks per second, so timing resolution is about one millisecond. It contains no program change, so most players default to a piano sound. It also contains no pitch bend events. Pitch contours are computed, but only note-on and note-off messages are written, so a guitar bend or vocal slide comes out as a held note or a run of short neighboring notes.

A worked example

Suppose you drop in a 30-second solo piano MP3, and the model hears a middle C (MIDI note 60) starting at 1.500 seconds, lasting 0.250 seconds, with an average confidence of 0.6. The writer converts seconds to ticks: 1.500 × 960 = 1440 for the start and 1.750 × 960 = 1680 for the end. The velocity is 0.6 × 127, rounded to 76. If that were the first note, the bytes in the file would be:

4D 54 68 64 00 00 00 06 00 00 00 01 01 E0   header: format 0, 1 track, 480 ticks/quarter
4D 54 72 6B .. .. .. ..                      track chunk and its length
00 FF 51 03 07 A1 20                         tempo: 500,000 microseconds per quarter (120 bpm)
8B 20 90 3C 4C                               wait 1440 ticks, note on, key 60, velocity 76
81 70 80 3C 40                               wait 240 ticks, note off, key 60

Waits are written as variable-length numbers, so 1440 becomes 8B 20. Events are sorted by time, with note-offs placed before note-ons on the same tick so repeated notes do not cut each other off.

Common problems and fixes

"No notes detected"

The model found nothing above its thresholds. This happens with near-silent files, heavy noise, and drum-only recordings, which have no stable pitch. Use a take where a pitched instrument is clearly audible.

"Could not transcribe that file" right away

If the error appears within a moment of choosing the file, before any transcription percentage shows, your browser could not decode the audio. Support for M4A, FLAC, and some Ogg variants differs between browsers, and DRM-protected purchases cannot be decoded at all. Convert the file to WAV or MP3 and try again.

Lots of short, quiet extra notes

Harmonics, reverb tails, and bleed from other instruments trigger the sensitive thresholds. In your DAW, select notes by velocity and delete the lowest ones first, since low velocity here means low confidence. For a mix, run it through a stem separator first and transcribe only the part you need.

Notes do not line up with bars in your DAW

The file uses real time at 120 bpm, not the song's tempo. Import it into a project set to 120 bpm so the audio and MIDI line up. Then use your DAW's tempo detection or warping to build a tempo map before quantizing, or quantizing will pull notes to the wrong beats.

A part panned to one side blurs into the rest

Channels are mixed to mono before transcription, so a part panned hard left is analyzed together with everything else. Sounds recorded out of phase between the two channels can even cancel out in the mono mix. If you only need one side, export that channel as its own file first.

Questions this tool gets asked

Is my audio uploaded for processing?

No. The neural network runs in your browser via TensorFlow.js, inside a Web Worker - a second thread in this same tab, on your own machine. After the page and the ~1 MB model load, you can disconnect from the internet and transcription still works.

What model does the transcription use?

Basic Pitch, published as open source by Spotify's Audio Intelligence Lab and described in their ICASSP 2022 paper. It detects note onsets, pitches, and pitch bends, and supports polyphony - chords transcribe, not just single melodies.

Why doesn't my MIDI sound exactly like the recording?

MIDI stores notes, not sound. The synthesizer or instrument you load the file into supplies the timbre. And transcription itself is probabilistic: quiet notes, heavy reverb, distortion, and drums all reduce accuracy - every audio-to-MIDI tool shares this, including the paid ones.

What audio formats work?

Anything your browser can decode: MP3, WAV, OGG, FLAC, and M4A/AAC in current browsers. Length is limited only by memory and patience. The first conversion is the slow one, because the ~1 MB model has to download and the engine has to warm up, and that cost lands entirely on it: measured here, 4.6 seconds of audio took 18.6 seconds on the very first run and about 2 seconds on every run afterwards. On those later runs a 3-4 minute song is a minute or two rather than an afternoon. The page stays usable throughout.

Why does it take so long on my machine?

If it is the first file you have converted, most of what you waited for was the model downloading and the engine compiling, which happens once. Convert a second file and you should see it drop to a fraction of that. After that, speed comes down to which engine your browser could give the model. A working graphics driver is quickest, and TensorFlow's WebAssembly engine is close enough behind it that we say nothing about either: that is the one most office PCs, virtual machines and remote desktops end up using, and it is fine. The page only puts a warning under the status when your browser falls back past both of those to plain JavaScript, which is the genuinely slow case.

What tempo does the MIDI file use?

The file is written at 120 bpm with note timings in real seconds, so it plays back at the recording's true speed in any DAW. Beat-mapping to bars is a musical judgment this tool leaves to you.

Why is this free when other MP3 to MIDI converters charge?

Because it costs almost nothing to run. This is a static page; the model runs on your hardware, not on a server we pay for. Converters that charge per minute are billing you for their cloud compute - here, you are the cloud.

Related tools