Target query
piano to midiUnited States · Google Ads
Monthly searches
110competition LOW (5) · bid $0.40–$2.01
12-month trend
Peak 100, April 2026now 29 · 12-month mean 43
Source
WordStream + Google TrendsGoogle Ads US · Trends US, today 12-m

Only 42 of the 88 piano keys convert correctly.

I rendered every key of an 88-key piano as a tone with realistic harmonics, ran each one through the same detector this tool uses, and scored the pitch that came back. 42 keys are correct. The 26 lowest keys all report F6 — up to 68 semitones above where they should be. The 17 highest keys land one to three octaves too low.

The reliable band is C3 (130.8 Hz) to F6 (1,396.9 Hz). Inside that band a single-note piano line converts well. Outside it, no sensitivity setting rescues the result: the error is in the frequency window the code actually searches, not in the note threshold.

Select a recording to create a MIDI draft locally.

The selected audio is decoded in your browser; it is not uploaded to a server.

A piano-roll style chart of all 88 keys from A0 to C8. Keys from C3 to F6 are marked correct. The 26 keys from A0 to A sharp 2 are marked wrong and all report F6. The 19 keys from F sharp 6 to C8 are marked wrong or silent.
Each bar is one piano key, scored on the pitch the detector returned. Green means the exact note came back; red means the wrong pitch; grey means no note was emitted.

A key-by-key measurement

Forty-two keys work. The other forty-six do not.

The test is deliberately mechanical so the numbers can be checked. For each of the 88 keys I synthesised a 0.6-second tone whose spectrum is a fundamental plus five harmonics at decaying amplitudes, which is closer to a struck string than a bare sine wave. Each tone was passed through a copy of the detector's detectNotes() function, taken line for line from the shipped converter.js, at 44.1 kHz with sensitivity set to Balanced. The output pitch was compared with the key that was played.

The correct region turned out to be one unbroken block. There are no holes in the middle: every key from C3 up to F6 came back exactly right, and every failure sits outside that block.

RegionKeysWhat comes backError
A0 – A♯226F6 every time+43 to +68 semitones
B21No note at allEstimate flips between B2 and F6
C3 – F642The correct pitchNone
F♯6 – C♯78Exactly one octave low−12 semitones
D71No note at allEstimate flips between D6 and G5
D♯7 – G♯75A twelfth low−19 semitones
F71No note at allEstimate flips between F6, F5 and A♯5
A7 – B73Two to three octaves low−24, −28, −31 semitones
C81Two octaves low−24 semitones

Two control conditions check that the result is not an artefact of the synthesis. With a bare sine wave instead of a harmonic tone, 38 keys are correct and the block tightens to E3–F6. Re-running the harmonic test at 48 kHz gives 41 correct keys, block C♯3–F6. The block moves by one key between sample rates, and the shape of the failure does not change: the middle of the keyboard is fine, both ends are not.

Evidence boundary. These are synthetic single tones, one per key, not recordings of a real instrument. They isolate pitch detection, which is what the error is about. They do not measure note timing, velocity, sustain, or how a full piano piece behaves, and no real piano recording was scored against a note-level reference for this page.

A diagram comparing the frequency band the converter declares, 55 to 1,400 hertz, with the band the autocorrelation loop can actually reach, 86.1 to 1,422.6 hertz, with the 88 piano keys plotted along a logarithmic frequency axis.
The declared window and the reachable window are not the same. The gap at the bottom is why the bass end collapses onto a single note.

Why both ends fail

Four lines of code decide which keys can work.

None of this is a note-threshold problem. It comes from how the detector turns a buffer of samples into a single frequency estimate, and all four causes are visible in the shipped code.

1. The declared 55 Hz floor is unreachable

The code sets minFreq = 55 and maxFreq = 1400, then derives the lag range to search:

const minLag = Math.floor(sampleRate / maxFreq);
const maxLag = Math.min(Math.floor(sampleRate / minFreq), frameSize / 2);

At 44.1 kHz the frame size works out to 1,024 samples, so maxLag is capped at 512 no matter what minFreq says. The lowest frequency the search can even test is 44,100 ÷ 512 = 86.1 Hz. The constant 55 is never reached. A 55 Hz A1 is 43 semitones below the usable floor, which is exactly the gap the bass keys fall into.

2. The 1,400 Hz ceiling is not enforced either

minLag is 31, so the highest frequency the search can test is 44,100 ÷ 31 = 1,422.6 Hz, not 1,400. More importantly, any key whose true period is shorter than 31 samples has its period removed from the search entirely. A key above roughly 1,422 Hz cannot be found at its own frequency, so the detector locks onto the first surviving multiple of the period — usually twice the period, which reads as exactly one octave low.

3. The correlation is never normalised

This is the mechanism behind the bass collapse. The loop accumulates a raw sum:

for (let i = 0; i < frameSize - lag; i += 4) correlation += samples[offset + i] * samples[offset + i + lag];

Longer lags have fewer terms in that sum, so they start with a smaller total before any similarity is considered. The code compares the raw totals directly, and the shortest lag tested is 31. For a low key the signal barely changes across 31 samples, so that lag looks strongly correlated and its larger term count wins outright — even though the true period scores better once normalised. The result: every key from A0 up to A♯2 returns lag 31, which is 1,422.6 Hz, which rounds to F6. B2 sits exactly on the boundary and its estimate alternates between B2 and F6 from frame to frame instead of settling.

4. A moving estimate never survives the duration filter

Notes shorter than the minimum duration are discarded, and the threshold at Balanced sensitivity is 0.075 seconds. Because the winning lag can change between frames, three keys never hold a single estimate long enough: B2 stays stable for at most 0.046 seconds, D7 for 0.058 seconds, and F7 for 0.029 seconds. The audio is not silent — the detector simply keeps changing its mind, so no note is ever written.

None of this is fixed by the sensitivity slider. Lowering the threshold admits more frames, but the estimate those frames carry is the same wrong one.

Chords and expression

Two notes in, one note out.

The detector produces one pitch estimate per frame and merges frames only when their estimates sit within one semitone of each other. Two notes sounding at once therefore cannot become two MIDI notes. I checked the common cases with the same tone generator.

InputWhat you expectWhat you get
C4 + E4C4 and E4One note: D4
C4 + E4 + G4Three notesOne note: F4 or E4, depending on sensitivity
C4 + C5Two notes an octave apartOne note: C4
C4 with ±40-cent vibrato at 5 HzOne sustained note12 notes, 8 notes, or none at all
C4 struck, 4-second decayOne note, about 4 secondsOne note: C4, 3.95 seconds

Read that table from the bottom up. A single sustained note is handled well: pitch is stable and duration lands within a few hundredths of a second of the real decay. Everything that makes the estimate move is what breaks it. A chord produces a single pitch because two fundamentals compete in the same frame and the search has to pick one. An octave produces a single note because the harmonic series reinforces the lower pitch. Vibrato produces a scatter of notes because the estimate wanders across semitones faster than the duration filter can accept it.

The status message the tool shows after a conversion already says the result can miss notes or confuse chords. This measurement puts numbers on that sentence: on a piano triad, it does both at once.

Getting usable MIDI

Match the input to the register you are working in.

The measurement is not a reason to abandon piano-to-MIDI work. It is a reason to choose the input deliberately.

  1. Stay inside C3–F6. If the part you need sits below C3, transpose the recording up an octave before converting and transpose the MIDI back afterwards. If it sits above F6, take the two or three highest notes and enter them by hand. Every key outside the block was wrong in the test, not merely imprecise.
  2. Convert one line at a time. Run the melody, the bass, and the inner voices as separate passes. A single chord will not become a chord no matter which sensitivity you pick, but three single-note passes give you three usable lines.
  3. Expect a note count, then verify the pitches. The export tells you how many notes were written. Compare the first note of each region against the recording before you trust a passage — the bass end is where the tool will confidently write the wrong note.
  4. For full polyphony, use a different tool. If the job is a piano transcription rather than a draft for repair, a dedicated piano transcriber is the right instrument. This page is about what this browser converter does and does not do.

For a broader view of where a browser converter sits against dedicated products, see the converter accuracy guide. For the repair workflow once a draft exists, see the polyphonic repair workflow. For a single-note source in a different register, the guitar guide covers the same detector against guitar tuning.

A line chart of United States Google Trends interest for the phrase piano to midi over twelve months, peaking at an index of 100 in April 2026, averaging 88 that month and falling to 29 by October and November 2026.
Twelve months of United States search interest for the phrase. The April spike is the seasonal peak; demand sits at 29 now, roughly a third of the 12-month mean.

Demand

A small, seasonal, badly served query.

The phrase draws about 110 searches a month in the United States with competition rated LOW and a bid range of $0.40 to $2.01, which is why it is worth a page but not a product of its own. Demand is seasonal rather than growing: interest climbed through winter, peaked sharply in April 2026 at a weekly index of 100 and a monthly average of 88, and has since settled back to 29. The 12-month mean is 43.

What is missing from the first page for this phrase is measurement. The results are converter product pages and a couple of explainers; none of them publishes a per-key result, so there is no way for a visitor to know in advance that their bass notes will come back wrong. That is the gap this page fills.

FAQ

Piano to MIDI questions

Can I convert piano audio to MIDI?

Yes, for a single-note line inside C3–F6. The conversion runs in your browser and produces an editable note draft. Check the pitches against the recording before you use it, because outside that band the detector returns confidently wrong notes.

Which piano keys convert reliably?

42 of 88 in the measured test: C3 (130.8 Hz) through F6 (1,396.9 Hz), with no gaps in between. The 26 keys from A0 to A♯2 all report F6, and the keys from F♯6 to C8 land one to three octaves low or emit nothing.

Will it turn piano chords into separate MIDI notes?

No. The detector estimates one pitch at a time. A C major triad came back as a single note, and an octave came back as the lower note. Split the parts and convert them one at a time.

Does the sensitivity setting fix the wrong notes?

No. The errors at both ends come from the frequency window the code searches, which does not change with the threshold. Changing sensitivity changes how many frames are accepted and how long a note must last, not which pitch is detected.

Does my piano recording upload?

No. The file is decoded and analyzed in your browser and is not uploaded by this converter.

Can I use this for a whole piano piece?

Not as a finished transcription. It gives a single-note draft that needs checking and editing in a DAW. For a full piece, especially with chords and expression in it, a dedicated piano transcriber is the better instrument.