Convolution reverb with a reverberation time you set in seconds and the tool measures back off the response it built. Deterministic, so the download is the reverb you previewed; the impulse response is downloadable too.
Initializing in your browser…
Generate band-limited test tones, sweeps and noise from 20 Hz to 20 kHz. Up to eight voices, note-name entry, binaural beats, and WAV export rendered from the same oscillators you hear.
Turn audio into a waveform image in five styles, exported as PNG or real vector SVG. Reads every channel, shows true level in dBFS, and redraws correctly at any size.
Transcribe audio into sheet music using the Basic Pitch neural network running in your browser. Handles humming, singing, solo instruments, piano, guitar, and full mixes; record straight from the mic or transcribe any section of a file. Beat-aligned quantization detects tempo, grid phase, and pickup bars; detection settings re-tune instantly without re-running the model, and an interactive piano roll lets you remove wrong notes by clicking. A/B playback compares the original audio with the quantized score (with a follow-along cursor), and exports cover MIDI, MusicXML, PDF, SVG, PNG, or print.
A dry vocal needs a room around it, and you want the download to sound like the thing you auditioned.
Input
vocal.wav - RT60 1.50 s - pre-delay 20 ms - 28% wet - WAV out
Output
Exported tail measures 1.505 s, T20 and T30 within 0.2%, two exports byte identical
The reverberation time is the control, and the panel measures it back off the response by Schroeder backward integration so you can check it. The build this replaces had no such number: a Duration control cut the tail at whatever level it had reached, which on the default preset was still 17.4 dB up, and T20 and T30 came out 1.534 and 1.071 s, 43 percent apart, which is what a chopped tail looks like. It also built the response with random numbers separately for the preview and the export, so downloading the same settings twice gave two different files.
Convolution reverb where the reverberation time is a number of seconds you set, and the tool measures it back off the impulse response it built so you can check it. The response is generated from a seed rather than from random numbers, so the file you download is the reverb you auditioned, and you can download the response itself to use anywhere else.
Put a plate or a small room behind a dry vocal, with enough pre-delay that the words stay clear of their own tail.
Build a five or six second space for ambient and cinematic work, and check on the panel that it decays the way you asked.
A short room at a low wet level takes the sterility off a close-miked studio recording.
Dial in a room and download the response as a 24-bit WAV to load into a DAW convolution plugin.
Reverb is the sound of a space: a burst of early reflections off nearby surfaces, then a dense tail that fades as the energy is absorbed. A convolution reverb models it by building the impulse response of a room and convolving your audio with it, which is what this does.
Three things were measurably wrong with the generator this replaces, all found by feeding the tool a single impulse with the mix fully wet, so that what came out was the impulse response itself. It was not deterministic: the response was built with Math.random() on every call, and the preview and the export each called it separately, so exporting the same settings twice produced two different files, differing by up to 0.0099 in sample value, which is -40.1 dBFS of audible difference. Whatever you auditioned, you downloaded something else.
Nothing stated the reverberation time. A Duration control cut the tail wherever it happened to land and a unitless Decay Rate set an exponential constant, so the actual decay was whatever fell out of the two. On the default preset the tail was cut while still only 17.4 dB down, which is a gate rather than a decay: measured on the export, T20 read 1.534 s and T30 1.071 s. Those two figures agree closely for anything decaying exponentially, and a 43 percent disagreement is the signature of a tail that has been chopped.
And the wet level moved with the room, because the response was never normalised, so choosing a bigger space also made the reverb louder.
Now the control is RT60 in seconds and the response is built to run past it, to 1.15 times the reverberation time, with a few milliseconds of fade at the very end so it cannot click. Asking for 0.5, 1.5 and 3.0 seconds produced exported files measuring 0.500, 1.505 and 3.010 seconds by Schroeder backward integration, with T20 and T30 within 0.4 percent of each other in every case. The response is normalised to unit energy, so the wet level is flat to 0.04 dB across a 0.5, 2.0 and 5.0 second room, and the convolution node's own normalisation is switched off so nothing moves the level behind the control. Exporting the same settings twice now gives byte-identical files.
The tail is split at 1.5 kHz and the two halves are given different decay times, because a real room absorbs treble faster than bass and a tail whose whole spectrum fades at one rate sounds like a machine. That is what the Treble damping control sets. It also means the reverberation time is quoted for the 250 Hz to 1 kHz band, which is what a published reverberation time means: with damping on, a broadband reading is shorter by design, and the panel says so.
The panel above the controls draws the actual response that will be used, with its Schroeder energy decay curve over the top, and reports the time asked for, the time measured, the tail length and the pre-delay. Room variation picks a different room of the same size and decay; it is a seed, so the same number always gives the same room. Pre-delay lands on the sample: a 100 ms change moved the first reflection by 100.00 ms. The finished mix is measured for true peak and held under -1 dBTP by a look-ahead limiter, since adding a wet path to a dry one is exactly how a file ends up over full scale. Export writes a 16-bit WAV or a 192 kbps MP3, and a separate button downloads the impulse response as a 24-bit WAV for use in any other convolution reverb.
The time a reverb tail takes to fall 60 decibels, which is the standard way a space is described: a living room is under a second, a concert hall is a couple of seconds, a cathedral is five or more. It is the control here, and the panel measures it back off the response that was built so the number is checkable rather than promised.
Because it is measured rather than restated. Schroeder backward integration is fitted over the -5 to -35 dB span and extrapolated, and the response is a finite piece of noise, so the reading lands within a percent or two. If the two disagreed by tens of percent it would mean the tail had been cut, which is exactly what the previous build did.
Because the treble is damped on purpose, so it decays faster than the rest and a broadband figure comes out short. Acoustics quotes reverberation times per band for the same reason. The figure here is for 250 Hz to 1 kHz.
Yes, and that is new. The response is generated from a seed, so the same settings always build the same room, and the preview and the export use the same response object. The previous build generated it separately in each path with random numbers, so exporting twice gave two different files.
It is the gap before the first reflection arrives, and it separates the source from its own reverb. A longer pre-delay keeps a vocal intelligible under a large space. Here it lands on the sample: a 100 ms change moved the first reflection by 100.00 ms.
Yes. The Download the impulse response button writes a 24-bit stereo WAV, scaled up to a usable level, which any convolution reverb will load. The filename carries the reverberation time.
No. This adds reverb. Taking existing reverb out of a recording is a different problem, and a much harder one.
Audio is decoded and processed locally with the Web Audio API. Your files are never uploaded to a server.