Drums to MIDI: Why It Comes Out Wrong, and What to Do Instead
Last updated 10 October 2026
Measurement scope: Figures below record historical tests of the GAME Vocal/Fast route in desktop Chrome. The original test date and complete device specifications were not recorded. These numbers do not predict Piano, Basic Pitch, Full Song Fast or HQ Local performance. Guidance reviewed 10 October 2026.
In our historical GAME Vocal test, 140 synthetic drum hits produced zero notes: that melody model does not transcribe a drum kit. The current Full Song HQ Local route can instead separate a drum stem and write approximate kick, snare, hi-hat and other events on MIDI channel 10. Its drum detection uses heuristics, so inspect the track and expect to correct it in a DAW.
This page is not a description of the problem. We synthesised three files whose contents we knew exactly, ran all three through the converter on this site, and counted what came back note by note.
What we put in, and what came out
Three 20-second files, 120 BPM, 44.1 kHz mono. One was drums only — a kick on every beat, a snare on beats 2 and 4, and hi-hats on every beat and every off-beat: 140 hits in total. One was the melody line alone, 80 notes between G4 and G5, nothing else. One was the two together.
| What went in | Notes in the source | Notes written | Pitch range | Time |
|---|---|---|---|---|
| Drums only | 140 drum hits | 0 | — | 9.2 s |
| Melody only | 80 notes | 17 | G4 – G5 | 15.5 s |
| Melody + drums | 80 notes + 140 hits | 74 | G4 – G5 | 15.2 s |
One file per row, one conversion per row, desktop Chrome, headless, software WebGL renderer, no other work in the tab. Wall-clock time is decode plus analysis plus file writing. The test signal is synthetic and deterministic — generated by us, so the ground truth is known by construction rather than estimated. These are measurements from one machine and one signal, not a general accuracy claim.
Read the first row slowly. One hundred and forty drum hits produced no notes. Nothing. The engine heard the drums, looked for a melodic line in what it heard, and found none — so it wrote nothing. There is no bass register full of phantom notes, because this model does not hallucinate notes where there is no melody. It returns silence.
Now read rows two and three together, because that is where the real story is. The melody on its own gave 17 notes. The same melody with drums underneath gave 74 — more than four times as many, and the range did not move: both runs stayed inside G4 to G5. The drums did not add new pitches. They multiplied the ones already there.
What the mix actually does
This is the part that catches people out, because nothing looks wrong. Open the file from the melody-plus-drums run and every note is in the right register. There is no low cluster to spot, nothing to sort out by eye. The damage is in the count:
| Run | Notes below the melody | Notes inside G4–G5 | Notes above the melody | Total |
|---|---|---|---|---|
| Melody only | 0 | 17 | 0 | 17 |
| Melody + drums | 0 | 74 | 0 | 74 |
Zero notes outside the melody's own band, in both runs. The drums contributed nothing that was not already there — they just made the melody repeat itself. Each drum onset arrives at the transcriber as a fresh thing to transcribe, and since the melody's pitch is the only pitch in the signal, each onset gets written as another instance of a melody note.
So the symptom is not "wrong notes". It is the same note, over and over, in places the melody is not playing. In our mix, one pitch appeared 17 times where the source melody struck it a handful of times.
Why the engine behaves this way
The model behind this page is a single-line melody transcriber. It answers one question: what is the one melody being sung or played here, and when does each note of it start? That framing is what makes it good at extracting a vocal line from a busy mix, and it is exactly what makes it useless on drums.
A drum kit has no single line. A kick, a snare and a hi-hat are three separate rhythmic events firing at once, and none of them is the "melody". Asked to find one line in a drum pattern, the model finds none and returns an empty file. That is not a crash or a bug; it is the architecture working as designed, and the empty output is the clearest possible statement that this signal is not what the tool is for.
When a melody is present the picture changes. Now there is a line to find, and the model locks onto it. The drums become onsets without pitch — energy that arrives at a moment in time. The model has no way to label that energy as "not a note", so each drum onset reads as a plausible place for the melody line to start again. Hence the repeats.
That explains the measured GAME Vocal output: it contains no drum channel or separate drum track. Full Song HQ Local follows a different route and writes separate tracks, including drums.
What to do instead
The fix is not a setting. It is a decision about what you feed in.
- Convert a version without drums. An instrumental, a karaoke track, a stem, an isolated take. This is the only clean answer, and it is clean because it removes the problem upstream of the engine rather than trying to patch it downstream. With a vocal line and no kit, this tool is doing the job it was built for.
- If the mix is all you have, convert a section where the kit drops out. An intro, a breakdown, a solo passage, the last bar. Twenty seconds of melody with no drums will transcribe far better than three minutes with them, because the onsets that cause the repeats are simply not there.
- Afterwards, hunt for repeats rather than for a register. Do not look for a low cluster — there is not one. Sort the notes by pitch and check the count of each: a pitch that appears far more often than the melody plays it is drum over-triggering. Pull the duplicates out by hand, or delete the shortest notes first, since re-triggered notes tend to be clipped short.
- If you need actual drum MIDI, this is not the tool. A drum part needs an onset detector that maps hits to a drum map, not a melody transcriber. No setting on this page will turn one into the other, and the empty result on a drum-only file is the honest signal that you are asking the wrong thing.
- Set the tempo yourself if the file opens oddly. With drums masking the onsets, the tempo estimate has less to work with. If the panel says the tempo was not measurable, the file carries 120 BPM as a fallback and the bar lines will not line up with your song. See why your converted MIDI opens at the wrong tempo.
What does not work
High-pass filtering. It targets the wrong thing. The drums here were never contributing their own low pitch — they were re-triggering the melody's notes. Filtering the kick's fundamental leaves the snare and hi-hat onsets exactly where they were, and the onsets are what caused the repeats. You cannot EQ your way out of a snare, and on this model you would not want to try.
Looking for a drum lane in Vocal output. The measured GAME file has one melodic track and no drum part to select. Use Full Song HQ Local if you need an approximate separate drum track.
Turning the drums down in the mix. Quieter drums produce quieter onsets, and quieter onsets are still onsets. The notes still get written; they arrive with lower velocity. That may make them easier to spot when you clean up, but it is not a solution on its own.
What the file it writes actually is
Worth knowing when you are deciding what to keep, because the format tells you where the seams are:
| Format | Standard MIDI File, format 0 — one track, every note in it |
| Resolution | 480 ticks per quarter note |
| Tempo | Measured from the note onsets; 500,000 µs per quarter note (120 BPM) only when no steady pulse can be found |
| Time signature | 4/4, a constant |
| Track name | mp3 to midi |
| Channels | One. There is no percussion channel and no note-10 mapping |
| Pitch bend range | ±2 semitones, set explicitly with an RPN 0 message, centre 8192 |
| Velocity | clamp(amplitude × 127, 1, 127) — carried over from the model's own confidence value, not measured from the audio |
| Note-off velocity | Fixed at 0x40 (64) on every note |
| Shortest note | 0.02 s — anything shorter is clamped up to it |
| Timing | ticks = seconds × 8 × BPM, so positions are absolute times rather than bar numbers — 960 ticks per second at the 120 BPM default |
One row in that table is the reason the repeat-hunting approach works: timing is written as absolute seconds, never quantised to a grid. The drum-triggered repeats land wherever the hit landed, so they will not line up with the bar — which is precisely how you tell them apart from the real melody notes when you clean up.
Everything above happens in your browser tab: the transcriber is a small ONNX model fetched after the first paint, the audio is down-mixed to mono and resampled to 44,100 Hz before the model sees it, and nothing is uploaded. That last part matters here — if you want to try three different versions of a track to find one without drums, nobody is counting.
Frequently asked questions
Can you convert drums to MIDI?
The historical GAME Vocal test returned no notes from 140 synthetic drum hits. Full Song HQ Local can now produce a separate approximate drum track on MIDI channel 10, although its heuristic output may need substantial editing.
Why does my kick drum turn into a bass note?
It does not, on this engine. A drum-only file returns nothing at all. What does happen is that a melody with drums underneath gets its own notes re-triggered: the mix produced 74 notes where the melody alone produced 17, and every note stayed inside the melody's own G4–G5 range. The drums multiply the melody's notes; they do not add pitches of their own.
How much of a full mix ends up being drum noise?
In our test, more than three quarters of the notes. A melody that gave 17 notes on its own gave 74 with drums on top. Nothing looked wrong in the register — the range was identical — but the count was four times what the source contained.
How do I remove the drum notes from the file?
Look for repeats, not for a register. Because the drums re-trigger the melody's own pitches, there is no low cluster to cut. Sort by pitch and find the notes that appear far more often than the melody plays them — in our mix one pitch showed up 17 times — and remove the duplicates, starting with the shortest notes.
Will a high-pass filter fix it?
It targets the wrong thing. The kick and hi-hat were not contributing their own pitch here; they were re-triggering the melody's notes. Removing the kick's low end leaves the snare and hi-hat onsets in place, and those onsets are what caused the extra notes.
What actually works?
For Vocal mode, supply an isolated voice or a section without drums to avoid false onsets. For a separate drum track, try Full Song HQ Local on a WebGPU-capable device and edit its output in your DAW.