mp3→midi runs in your browser · nothing is uploaded

How to Clean Up a Converted MIDI After Importing It

Last updated 7 October 2026

Short answer, in the order that matters: (1) set the host's tempo from the file, (2) compare the note lengths to what you played and fix the outliers, (3) fix the pitches, (4) quantise last and only after checking what it moved, (5) set the velocity yourself — every note arrives at the same value. And skip most of the rest of the checklist: we converted three files, 84 notes, then changed every clean-up control the page offers one at a time and re-wrote the file. That is 42 rewrites. Only 8 of them produced a different file; the other 34 were byte-identical to the default output. Eleven of the fourteen alternative settings changed nothing at all.

That result is the useful part. A clean-up checklist copied from a general MIDI tutorial assumes the file arrives full of the debris that pitch-tracking converters produce: harmonic ghost notes, a stray drum track, pitch-bend lanes full of noise, a wide spread of velocities. This tool's output does not have that debris, so half the checklist is busywork. Below is what is actually in the file, what each control actually does to it, and the concrete steps in Ableton Live, Logic Pro and FL Studio.

The measurements are ours and reproducible; the DAW steps are the standard operations in each host, and the menu names below are the stable part — default shortcuts move around between versions.

What actually arrives in your DAW

We converted a synthetic 20-second line of 40 quarter notes at 120 BPM, and two real public-domain piano recordings, then read every note table and every output file back. Across all three conversions the file structure was identical, and it is identical for a reason: the writer emits the same skeleton every time.

FormatStandard MIDI File, format 0 — one track, every note in it
Resolution480 ticks per quarter note. At 120 BPM one tick is 1.04 ms
Events in the file88 for the 40-note line, 44 for the 18-note recording, 60 for the 26-note recording — note-on + note-off for every note, 4 controller messages that declare the bend range, and 4 meta events
Pitch-bend events0, in all three files. The ±2 semitone range is declared with an RPN 0 message; no bend data is written
System-exclusive events0
Velocityclamp(amplitude × 127, 1, 127). Amplitude was 0.71 on all 84 notes, so the file contains one velocity value: 90
Note-off velocityFixed at 0x40 (64) on every note — a neutral release, not a measurement
TempoEstimated from the note onsets, written as a tempo event; 500,000 µs per quarter note (120 BPM) when the estimate is not confident enough
Time signature4/4, a constant
Track namemp3 to midi
Overlapping notes0 in all three files, and the maximum number of notes sounding at the same instant was 1 — the part is strictly one note at a time

Two lines in that table are worth pulling out before anything else. The first is that there is no pitch-bend data and no second track, so two items on the standard checklist — "strip the pitch-bend lane" and "delete the drum track" — have nothing to act on. The second is that the part is monophonic all the way through. That matters for clean-up because it means you will never have to separate a chord you did not play; the usual "these notes are stacked on top of each other, which one is real" problem does not arise.

We changed every clean-up control, one at a time

The panel offers eight clean-up controls. We swept fourteen alternative settings across them — quantise to 1/8 and 1/16, minimum note length 0.02 s and 0.30 s, merge gap 0 s and 0.20 s, the overtone filter in all three modes, the balanced velocity curve, mono mode, poly mode, drum suppression on, and writing the tempo off — and re-wrote the file after each change. Three files, fourteen settings, 42 rewrites.

Control (alternative value tested)Files where the output changed
Quantise — 1/8 note grid3 of 3
Quantise — 1/16 note grid3 of 3
Minimum note length — 0.30 s2 of 3
Minimum note length — 0.02 s0 of 3
Merge gap — 0 s0 of 3
Merge gap — 0.20 s0 of 3
Overtone filter — soften0 of 3
Overtone filter — remove0 of 3
Overtone filter — auto0 of 3
Velocity curve — balanced0 of 3
Mode — mono0 of 3
Mode — poly0 of 3
Suppress drums — on0 of 3
Write tempo — off0 of 3

Read the zeros as good news, and read them as specific rather than general. The overtone filter has nothing to find: it works by spotting a note sitting a whole-number multiple above a quieter note, and every note in these three files carries the same amplitude, 0.71, so no note can be the quieter one. The balanced velocity curve has nothing to re-balance, because every note is already at 90. Widening the merge gap from 0.02 s to 0.20 s joins nothing, so no same-pitch fragments were close enough to be joined. Mode changes nothing because the parts contain no overlapping notes and no ghost candidates, so there is nothing for it to decide. And drum suppression changes nothing on these three inputs because none of them contains the dense low percussion that control targets.

The default settings, meanwhile, did nothing at all: the number of notes that came out of the model was the number of notes written to the file — 40 of 40, 18 of 18, 26 of 26. Whatever clean-up happens to this output, happens because you did it.

Step 1 — set the tempo from the file, before anything else

Every later step is measured against the grid, so the grid has to be right first. The file carries a tempo event, and the note positions are computed from the same number, so the notes land at their true times in the recording whichever tempo is written. What the file cannot guarantee is that the number is the tempo of your music.

InputTempo the detector proposedConfidenceWritten into the file
Synthetic line, exactly 120 BPM by construction120 BPM1.00120 BPM (500,000 µs/QN)
Piano recording 164 BPM0.00120 BPM — fallback
Piano recording 2149 BPM0.00120 BPM — fallback

Two of the three files were written at the 120 BPM fallback, and in one of them the music is closer to 149 BPM. Nothing is wrong with the notes — they sit at the correct absolute times — but the bar lines drawn over them are four beats apart at the wrong rate, so nothing lines up.

  1. Find the real tempo before importing, or tap it in. If you can tap the pulse along with the recording, do that — a tapped tempo is usually closer than any detector, including ours.
  2. Set the host's project tempo to that value. Do not change the tempo after the fact and expect the part to survive: because the notes are stored in ticks, changing the project tempo rescales every note in the file. Set it once, correctly, at the start.
  3. Set the time signature too. Every file is written as 4/4 regardless of the source, so a waltz or a piece in 6/8 will get bar lines four beats apart until you change it. This is a host setting, not a file defect — the notes are unaffected.
  4. Check that bar 1 lines up. If the whole part is consistently a beat early or late, the recording simply started off the beat; drag the whole region rather than editing the notes.
The one thing that breaks everything downstream If the tempo is wrong, quantise will snap your notes to a grid that has nothing to do with the music. We measured exactly that: on the recording whose real pulse is about 149 BPM but whose file says 120, quantising to 1/16 did not reduce the median distance from the grid at all — 47.5 ms before, 47.5 ms after. Quantising a badly-tempo'd file is not a partial improvement, it is a no-op that moves notes.

Step 2 — compare the note lengths to what you played

Note lengths come from the model: a note ends when the model stops being able to hear that pitch, which is not the same instant as the note ending in the performance. So the lengths are the second thing to check, and they are easy to judge against the phrase you actually played.

FileNotesShortestMedianLongestUnder 0.30 s
Synthetic quarter-note line (every note is 0.5 s by construction)400.50 s0.50 s0.50 s0
Piano recording 1180.21 s0.89 s7.69 s1
Piano recording 2260.18 s0.375 s1.31 s10

The synthetic line is the control: every note comes back at exactly 0.50 s, which is what a quarter note at 120 BPM should be. On the real recordings the spread is wide — 0.18 s to 7.69 s — and 11 of the 84 notes we measured were shorter than 0.30 s. That is where the minimum-note-length slider earns its place, and it is the only one of the eight controls other than quantise that ever changed a file for us: setting it to 0.30 s removed 1 note from one recording and 10 from the other.

  1. Select all and look at the lengths, not the pitches. If the part is mostly short stabs when you played sustained notes, the model lost the pitch early — lengthen the selection to a common value in one move.
  2. Cut the obvious outliers first. One 7.69-second note in a 30-second passage is almost always a pitch the model held onto across several real notes. Shorten it to the length of its neighbours.
  3. Then sweep up the crumbs. Very short notes are usually the model's uncertainty rather than real 180-millisecond notes. Delete anything shorter than about a 1/32 note and listen again.
  4. Do not bother re-writing the ends one at a time. In every host, dragging the right edge of one note in a multi-note selection sets the whole selection to that length — one gesture, not eighty.

Step 3 — fix the pitches

This is the step that genuinely needs your ears, because the file has no way to tell you which note is wrong. What it can tell you is the range, and the range is a fast sanity check: if the model reports notes two octaves below anything you played, it followed a bass line or a room resonance instead of the melody.

FileNotesPitch rangeDistinct pitches
Synthetic line, D4–A4 by construction40D4 – A45
Piano recording 118MIDI 40 – 7712
Piano recording 226MIDI 43 – 7313

Two things make this step quicker than it looks. The part is monophonic, so you are never choosing between simultaneous notes — each onset has exactly one note under it. And the note count is small: 18 and 26 notes for two piano recordings, because this engine follows a single melodic line rather than every pitched sound. Select the wrong ones and delete them; it is faster than transposing them, because a note the model invented has no correct pitch to move to.

If the whole part is consistently in the wrong octave, do not edit the notes — transpose the selection by 12 semitones, or use the host's scale-quantise to pull the whole part into the key. That is one operation and it preserves the intervals you played.

Step 4 — quantise last, and check what it moved

Quantise is the control that changes the most, and it is the one most likely to make things worse. Here is what it did to our three files, measured as the median distance from each note's start to the nearest grid line at the tempo written into the file (120 BPM, so a 1/16 note is 125 ms):

FileOff grid, beforeAfter 1/8After 1/16Overlaps beforeAfter 1/8After 1/16
Synthetic line (already exactly on the beat)0 ms7.8 ms7.8 ms000
Piano recording 110 ms2.5 ms0 ms045
Piano recording 247.5 ms30 ms47.5 ms064

Three things to take from that table.

  1. Quantise with a strength below 100%, not at 100%. Every host's quantise dialog has an amount or strength control; 50–70% pulls notes toward the grid without erasing the timing you played.
  2. Check for overlaps immediately after. Select all and look for notes whose bars touch or run into each other. Then either shorten them to a common length, or re-run the quantise with note durations included, if your host offers that option.
  3. Quantise the starts, not the lengths, unless the part is mechanical. Quantising lengths as well turns a played phrase into a step sequence.
  4. If in doubt, don't. A part that is 10 ms off the grid sounds human; a part quantised to a grid that does not match the music sounds wrong in a way that is hard to diagnose later.

Step 5 — set the velocity yourself

Every note in every file we measured arrived at velocity 90, because the amplitude the model reported was 0.71 for all of them and the writer maps that straight through. There is no dynamic information in the file to preserve, so the honest description of this step is that you are composing the dynamics, not recovering them.

What not to bother with

Four items on the standard checklist have nothing to act on in a file from this tool, and we can show that rather than assert it:

Usual clean-up stepWhat we measured
Strip the pitch-bend lane0 pitch-bend events across all 84 notes. The ±2 semitone range is declared with RPN 0, but no bend data is written, so the lane is empty
Delete the drum trackThere is only one track — format 0, track name mp3 to midi. There is no channel 10 and no drum mapping to remove
Remove the harmonic ghost notesThe overtone filter in all three of its modes produced a byte-identical file on all three inputs. The filter looks for a note sitting a whole-number multiple above a quieter note, and every note carries the same amplitude, so there is nothing for it to match
Split the chord you did not playThe maximum number of notes sounding at once was 1 in all three files. The part is monophonic, so there are no stacked notes to sort out

There is also a way to do most of this before the file ever reaches the DAW. The controls in the page's own panel re-run the entire clean-up chain on the notes the model already produced — the model itself is not run again — so a setting change and a fresh piano roll take about a second. On our test files that made the decision easy: eleven of the fourteen alternative settings produced a byte-identical file, so the honest advice is to try quantise and the minimum-note-length slider first and leave the other six controls alone unless the piano roll tells you otherwise. Check the roll before you download, and you will arrive in the DAW with the timing and the lengths already close.

Doing it in each DAW

Ableton Live

  1. Tempo. MIDI clips store note positions in beats, so the clip plays at the project tempo. Set the project tempo to the tempo of the recording before you do anything else, and set the time signature in the same place. Change the project tempo later and every note in the clip rescales with it.
  2. Note lengths. In the Clip View, select all notes (click the note editor, then select all) and drag the right edge of any one selected note. Live sets every selected note to that length.
  3. Quantise. With the notes selected, use Edit → Quantize (the default shortcut is Ctrl+U, or Cmd+U on a Mac). In the dialog, set the grid to 1/16 and pull Amount down to somewhere around 50–70% so the notes move toward the grid without flattening your timing.
  4. Velocity. The Notes panel under the clip has a velocity slider for the selection, plus two small triangles that randomise velocity up and down. Leave the randomisation alone and set one deliberate value instead.
  5. Check for overlaps by looking at the note bars in the editor after quantising — the ones that now touch are the ones to shorten.

Logic Pro

  1. Tempo. When you drag a MIDI file in, Logic offers to import the tempo stored in it. Say no if the file was written at the 120 BPM fallback — set the project tempo yourself instead. The tempo lives in the control bar display.
  2. Note lengths. Open the Piano Roll, select the notes, then Functions → MIDI Transform → Fixed Note Length to set them all to one value, or drag a selection's right edge by hand.
  3. Quantise. The Piano Roll inspector has a Time Quantize setting for the region; the same panel exposes strength and swing. For a partial quantise, use the piano roll's Q tool and drag across the notes, or set the strength below 100%.
  4. Velocity. Functions → MIDI Transform → Fixed Velocity sets the whole selection to one value. If you want it shaped rather than flat, use the velocity lane under the piano roll, or the Velocity tool, to draw the levels in.
  5. Pitch. Functions → MIDI Transform has transpose and random-pitch options; for a wrong-octave part, transpose the selection by 12 semitones rather than editing note by note.

FL Studio

  1. Tempo. FL asks about the MIDI file's tempo when you import it. If the file carries the 120 BPM fallback and your track is not at 120, decline it and set the project tempo by hand.
  2. Quantise. In the piano roll, open the Quantize dialog (the default shortcut is Alt+Q) and use the Sensitivity control to quantise partially — that is FL's equivalent of a strength setting. Tick the Duration box only if you want note ends snapped as well as starts.
  3. Quick quantise. Shift+Q snaps the selection to the current snap setting, which is faster than the dialog but always moves notes fully onto the grid.
  4. Note lengths. With notes selected, drag the right edge of one to set the whole selection's length, or use the Duration control in the Quantize dialog.
  5. Velocity. Use the velocity lane at the bottom of the piano roll to draw levels in, or Scale Levels (the default shortcut is Alt+S) to compress or expand the whole selection's velocities at once — that is the fastest way to set one baseline value across a part.

If you only take one thing from this page: the two steps that reliably change the outcome are the tempo and the note lengths. Quantise changes the outcome too, but in our measurements it was the only step that ever made a file worse.

Frequently asked questions

Do I need to delete pitch-bend data after importing?

No. There is nothing to delete. Across the three converted files we measured — 84 notes in total — the count of pitch-bend events was zero in every one. The file does declare a bend range of ±2 semitones with an RPN 0 controller message, but that is a setting, not data: no bend messages are written, so no pitch-bend lane will have anything in it. If you open a pitch-bend lane and see a flat line at centre, that is the correct result, not a bug.

Why is every note the same velocity?

Because velocity is derived from the model's own confidence value, not from how loud the note sounded. The writer computes velocity as clamp(amplitude × 127, 1, 127), and on all 84 notes we measured the amplitude was 0.71, which maps to exactly 90. So the file arrives with one single velocity value in it. You are not restoring dynamics that were lost in conversion — you are writing dynamics that were never in the file. Set a baseline velocity for the whole part, then shape the accents by hand.

Should I quantise a converted MIDI?

Only after the tempo is right, and only if you check what it moved. Quantising was the single most disruptive control we tested: it changed the output on all three files, and on both real recordings it introduced overlaps where there had been none — the two files went from zero overlapping notes to four and five, and to six and four, at the two grid sizes. The reason is mechanical: quantise moves the start of a note but leaves its end where it was, so a note that used to sit neatly before the next one can now run into it. On the file whose notes were already exactly on the beat, quantising made it worse, moving every note 7.8 milliseconds later.

Why does quantising snap to the wrong place?

Because the grid it snaps to is the one the tempo detector measured, not the bar line in your DAW. The detector reports both a tempo and a phase offset, and the quantiser uses both. On one of our files the detected phase was 7.8 milliseconds, so quantising an already-exact part pushed every note 7.8 milliseconds late. On a second file the piece is roughly 149 BPM but the tempo written into the file was the 120 BPM fallback, so quantising to 1/16 snapped notes to a grid that had nothing to do with the music — the median distance from the grid did not improve at all.

Why does my converted MIDI open at 120 BPM when the song is not 120?

Because the tempo is estimated from the note onsets, and when the estimate is not confident enough the file falls back to 120 BPM — 500,000 microseconds per quarter note. In two of the three files we measured here the fallback was used: the detector proposed 64 BPM for one recording and 149 BPM for the other, both with a confidence of zero, so both files were written at 120. Fix the tempo in the host before you clean anything else, because every later step — quantise most of all — is measured against that grid.

Can I do the clean-up before downloading the file?

Yes, and it is cheaper than doing it in the DAW. The controls in the panel re-run the whole clean-up chain on the notes the model already produced — the model itself is not run again — so you can try a setting, look at the piano roll, and try another in about a second. That also means the answer to "which setting should I use" is testable rather than guesswork: on our three test files, 11 of the 14 alternative settings produced a byte-identical file, so there was nothing to tune. Try quantise and the minimum-note-length slider first; those are the only two that ever changed anything for us.

What order should the clean-up steps be done in?

Tempo first, then note lengths, then pitches, then quantise, then velocity. Tempo comes first because every later judgement is relative to the grid. Lengths come before quantise because quantise moves starts, not ends, so you want the ends settled first. Pitches come before quantise because a wrong note is worth deleting and a deleted note should not be snapped. Velocity comes last because it is the only step that does not depend on timing at all. If you only have time for one step, do the tempo — it is the difference between a part that lines up with your bar lines and one that never will.

Related: why a converted MIDI opens at the wrong tempo, how to read the piano-roll preview and spot a bad conversion, and how many notes at once before transcription breaks down.