ORIGINAL STEREO CONTROL / OCTOBER 5, 2026
MP3 to MIDI.
Keep the signal.
Check the mono signal before blaming note detection. Opposite left and right channels can cancel when averaged. In our generated WAV and MP3 controls, that average was exactly zero and exported no notes. Keeping the original left channel produced MIDI again. Recover a suitable channel from the original source; turning up an already-cancelled mix cannot restore it.
Same melody. A different channel relationship.
We generated a 2.5-second phrase with pitches 60, 64, 67 and 72. The defined tone starts are 0.2, 0.75, 1.3 and 1.85 seconds, each lasting 0.35 seconds, rounded to whole samples at 22,050 Hz. The WAV generator uses 16-bit PCM, a defined peak of 0.4 and a 220-sample edge fade. No music recording or user file was used.
For the first stereo source, both channels contain the same samples. For the second, the right channel is the exact negative of the left. A third, single-channel source keeps the original left samples. Each was also encoded to 128 kbps MP3, giving six files. The mono source was not extracted from the cancelled average.
Both retain a nonzero mono signal.
No MIDI file was written.
A channel-preserving input, not a repair of silence.
Native FFmpeg decoded each file to stereo Float32 samples at 22,050 Hz. We explicitly calculated mono[i] = (left[i] + right[i]) / 2, then ran the installed Basic Pitch 1.0.1 model on Node's CPU backend. Note extraction used this site's unchanged thresholds: onset 0.25, frame 0.25 and minimum length 5 frames. These are settings, not accuracy claims.
For the single-channel control, this particular offline decoder first upmixed mono to stereo. That introduced a gain difference: its WAV average RMS was 0.14678459295747626, versus 0.20758476563144898 for the same-polarity stereo WAV. Do not interpret that difference as source damage or a browser measurement. The result here is the presence or absence of a signal and exported notes, not equal amplitude across decoder paths.
The average disappears before the model runs.
| Input | Mono RMS, rounded | Exported notes | MIDI bytes |
|---|---|---|---|
| Same polarity · WAV | 0.207585 | 4 | 130 |
| Same polarity · MP3 | 0.197203 | 5 | 138 |
| Opposite polarity · WAV | 0 | 0 | No file |
| Opposite polarity · MP3 | 0 | 0 | No file |
| Original left as mono · WAV | 0.146785 | 4 | 130 |
| Original left as mono · MP3 | 0.139442 | 5 | 138 |
Same polarity
WAV: RMS 0.207585 · 4 notes · 130 bytes.
MP3: RMS 0.197203 · 5 notes · 138 bytes.
Opposite polarity
WAV and MP3: RMS 0 · 0 notes.
No MIDI file was written.
Original left as mono
WAV: RMS 0.146785 · 4 notes · 130 bytes.
MP3: RMS 0.139442 · 5 notes · 138 bytes.
RMS was calculated as sqrt(sum(mono[i]²) / N); N = 55,125 decoded samples for each file. The nonzero table values are rounded to six decimals. Both opposite-polarity inputs had zero peak as well as zero RMS, despite their separate left and right channels remaining nonzero. The raw report contains the full values and hashes.
The detector returned no events for either cancelled average. Our script did not create an empty MIDI as a pretend success. For the two WAV controls with signal, the parsed pitches were 60, 64, 67 and 72. Both corresponding MP3 runs split pitch 60 into two adjacent events, producing five events from four tones. Recovering the input signal did not eliminate that separate transcription defect.
All four successful MIDI files were serialized and parsed again. They contain the actual detected events; sizes are the resulting file bytes. Our separate held-tone experiment addresses event splitting. No full-song, vocal, DAW import or phone conversion result is claimed by these six CPU runs.
Inspect the input, then change one thing.
- Keep the original stereo source. Inspect or listen to left, right and the mono sum separately in an editor. Silence in the average with signal in each side is the condition this experiment isolates.
- If one original channel contains the melody you need, export that channel alone as a mono input. Do not merge the two sides first. Keep the original available for comparison.
- Convert the new input using the existing homepage tool, then review the exported pitches and boundaries. A nonempty MIDI is not proof that the transcription is correct.
- If the mono input still contains an audible melody, our cancellation control does not explain the failure. Do not apply a polarity fix indiscriminately or assume that every stereo file is defective.
The missing signal cannot be amplified back.
(s + s) / 2 = s(s + (−s)) / 2 = 0gain × 0 = 0
These identities describe exact copies and exact negatives. A real recording need not have either relationship, and retaining only one channel can discard other wanted material.
The W3C Web Audio channel-downmixing specification gives the stereo-to-mono rule as output = 0.5 × (input.L + input.R). The homepage code uses a one-channel OfflineAudioContext when normalizing multichannel browser-decoded input. The offline experiment isolates that averaging operation; it does not establish bit-identical results from every browser decoder or audio layout.
Download the controls. Keep the scope.
- Same-polarity WAV / MP3Two matching channels. The non-cancelling stereo control.
- Opposite-polarity WAV / MP3Left signal, right exact negative before encoding. No CPU MIDI export.
- Original-left mono WAV / MP3One original channel preserved before averaging.
- Stereo WAV's CPU MIDI / MP3's CPU MIDI4 / 5 events respectively. Offline files, not browser downloads.
- Mono WAV's CPU MIDI / MP3's CPU MIDI4 / 5 events respectively. Preserved channel, remaining split-note defect.
- Raw measurements / Reproduction scriptGenerator parameters, decoded channel statistics, parsed MIDI events and SHA-256 hashes.
Run the script within this project's installed dependency environment and pass the project directory as its first argument. It requires the local Basic Pitch model, TensorFlow.js, the MIDI library, native FFmpeg and this build's source file for hashing. The downloaded script alone is not a complete installation. It generates its own fixtures and uses the local model; no audio is sent to an external conversion API.
The raw record identifies Windows, Node, the CPU backend and library versions. It is evidence for this controlled processing path only. No browser conversion result is included in the table, and file size or event count must not be read as a general accuracy percentage.