Remove reverb from audio:
can an echo add MIDI notes?
Yes. A delayed copy can become an extra MIDI event or extend an existing one. When preparing a roomy recording, reduce unwanted reflections on an audio copy, then check repeated attacks against the performance before accepting the note draft. In our controlled single-echo test, the same delay settings lengthened one detected note but added a second event to each of two others.
This site converts clear single melodies to MIDI. It does not provide a reverb-removal upload service. The downloadable example is a constructed, separated echo, not a real room, a voice recording or a commercial dereverberation test.
Treat the reflected sound before deciding which notes to keep
- Keep the original and identify the source. If reverb is an editable effect on your own session, export a dry version from that session. A recorded room and an editable effect send are different starting points.
- For sound already baked into a recording, work on a copy. Use a suitable audio editor or dereverberation process, preview a modest change and compare the same passage. Do not assume a gate or a gain reduction separates reflections from a note that is still sounding.
- Check attacks as well as tails. Listen for the intended played or sung attacks, the following reflections and the next real note. Compare the saved original and processed inputs through the same MIDI detector and mode.
- Inspect each repeated event before editing. A second event may be a reflection, a real repeat or an unrelated detection error. A lower total count does not tell you which one disappeared. If the source is unclear, preserve that uncertainty rather than deleting notes to reach an expected number.
For a documented audio-editor route, iZotope's De-reverb workflow describes learning the reverberant audio and adjusting the process. That is official documentation, not a product we tested here. If you can record again, reducing the room contribution at capture avoids having to infer a dry signal later.
One known echo, three actual detector runs
On October 19, 2026, we generated three sine notes: MIDI 60, 64 and 67, starting at 0.5, 2.0 and 3.5 seconds. Each source tone lasts 0.35 seconds. We added exactly one delayed copy at 0.6 seconds and 0.65 gain. All three source notes received those same echo settings; there was no second performance.
Dry source
3
detected MIDI events
One delayed copy
5
detected MIDI events
Known-path inverse
3
detected MIDI events
We saved and reopened each WAV before passing its samples through the unchanged production downsampling, note detection and MIDI export code in Balanced mode. The first two cases returned three and five events. A third case used a mathematical inverse with the exact delay and gain supplied by us; it returned three events. That privileged control is not a general method for recovering an unknown room recording.
The extra sound did not produce the same edit for every pitch
The echoed C4 still produced just one event, but its detected duration increased from 0.557279 to 1.160998 seconds. For E4 and G4, the detector instead returned two events per pitch. A rule such as “each echo adds one note” would have predicted six events here; the actual result was five.
The source copy, the detector's analysis and the grouping of its decisions are separate stages. This result does not identify a universal delay at which notes split. Even the dry case's event starts and lengths differ from the known source attacks and tone gates. We compare outputs from the same pipeline; we do not relabel those outputs as exact performance timing.
Measured and independently repeated 2026-10-19 on Microsoft Windows 11 Pro 26H1 (build 28000.3231, x64), Node.js v24.19.0. Rows show detector values before MIDI serialization, rounded to six decimal places; the JSON retains full precision.
| Case | Event | MIDI pitch | Start, seconds | Duration, seconds |
|---|---|---|---|---|
| dry | 1 | 60 | 0.325079 | 0.557279 |
| dry | 2 | 64 | 1.857596 | 0.510839 |
| dry | 3 | 67 | 3.343673 | 0.510839 |
| single-echo | 1 | 60 | 0.325079 | 1.160998 |
| single-echo | 2 | 64 | 1.857596 | 0.510839 |
| single-echo | 3 | 64 | 2.461315 | 0.510839 |
| single-echo | 4 | 67 | 3.343673 | 0.510839 |
| single-echo | 5 | 67 | 3.947392 | 0.510839 |
| known-path-inverse | 1 | 60 | 0.325079 | 0.557279 |
| known-path-inverse | 2 | 64 | 1.857596 | 0.510839 |
| known-path-inverse | 3 | 67 | 3.343673 | 0.510839 |
Download the 13-column event-check worksheet. It includes all eleven measured event rows, the defined source and echo attack times, a labelled recommendation and a blank observation. The defined source attacks are references from generation, not measured starts inferred from the MIDI file.
Use the comparison to choose the next check
- More events after adding reflections: locate each extra event and compare it with the source and delayed copy. Our E4 and G4 examples make that attribution possible because their construction is known.
- The same count but a longer event: compare releases and the next attack. Our C4 case would be missed by checking only the total.
- Fewer events after processing: check whether a wanted attack also vanished. Our exact-path inverse is a control with privileged source knowledge, not evidence that any automatic remover preserves every performance.
- A repeated note in an unknown recording: keep it until there is source evidence for changing it. The piano roll alone cannot certify that the musician did not play it.
For an actual continuous hum split at an internal boundary, use the separate held-hum boundary repair guide. That manual endpoint question comes after inspecting the source; this page tests what a defined audio reflection did before that edit. For hiss or hum rather than reflected sound, use the background-noise comparison.
Files, calculation and reproducible limits
The three WAVs are each six seconds of 44,100 Hz, mono, signed 16-bit PCM: 264,600 frames and 529,244 bytes including the 44-byte header. Source peak amplitude is 9,000 counts with 8 ms attack/release ramps. A 0.6-second delay is exactly 26,460 samples at this rate.
echoed[n] = round(dry[n] + 0.65 × dry[n − 26460])
inverse[n] = echoed[n] − 0.65 × inverse[n − 26460]Before a delayed index exists, its contribution is zero. The inverse uses floating-point state and is rounded to signed 16-bit samples when saved. Compared with the original dry PCM, that saved inverse differs at 2,499 samples, with a maximum error of one count and RMS error 0.0971825316 counts. This is quantization under a known one-copy construction, not an estimate of real-room dereverberation quality.
Full event results, conditions and six SHA-256 fingerprints · Reproduction script · Captured production detector source. The source file is read as text; the reproducer extracts the same analysis/export functions without running the webpage or sending audio anywhere.
node reproduce.mjs --out ./reverb-check
node reproduce.mjs --out ./reverb-check --checkDownload the script and detector-source.txt into the same folder. Generate into a fresh output directory first. The check creates a separate repeat folder and compares all six output hashes and the complete measured event results. Runtime metadata is recorded but does not stand in for the file and event comparisons. The original measurements and independently generated public package were checked separately.
Scope: one separated synthetic echo is not diffuse reverberation from many room reflections. We did not test a room impulse response, a microphone, speech, a commercial plugin, blind acoustic estimation, a browser audio decoder or listening quality. Neither the 0.6-second delay nor the gain is a recommended setting for your recording. No accuracy percentage or tool ranking follows from these examples.
After choosing a better input, use the audio-to-MIDI preparation and review guide to inspect the note draft. Keep the original recording and the saved processed copy beside the MIDI so later edits remain traceable.