Skip to content
Sign in

/docs · VoiceLab · Practical

Measure how long a room rings with one clap

The room profile reads the reverberation time per octave band from one clap, a balloon pop, an impulse response or a sweep. How to record it, how to read the answer, and how far the numbers are tested.

Updated Oct 13, 2026


A recording of someone talking cannot tell you how long the room rings: we built a cheap proxy from the decay after each phrase and it did not measure reverb at all (what it measures instead). A clap can. It is short and loud, and the way it dies away is the room.

The room profile of POST /v1/analyze/profile reads that decay the way room acoustics does it: the backward integral of Schroeder, per octave band, with T30 when the decay has 45 dB of range and T20 otherwise (the method of ISO 3382). It is a paid preset, like every profile except basic.

Record it

  1. A quiet room, no fan, no music. The measurement uses the quiet before the clap to measure the noise, and it skips the first 0.3 s of the file so the tap on the record button does not count.
  2. Start recording, stay quiet for about a second, then clap once, firmly, about a metre from the microphone.
  3. Stay quiet while the room rings out, two to three seconds is enough for most rooms. If the file ends while the room is still ringing, the decay is cut short and the reading is too low.
  4. Do not clip. Three samples at full scale mark the whole answer as low confidence (room.clipped).

A balloon pop works the same way and is read like a clap; say so with roomSource: "balloon". If you already have an impulse response, send that with roomSource: "impulse": it gives every band from 125 Hz, where a clap gives 500 Hz and up. roomSource: "sweep" is for a recording of the sweep that the RoomLab app plays; the engine reads exactly that signal.

Ask for it

curl https://audiolab.tools/v1/analyze/profile \
  -H "Authorization: Bearer $AUDIOLAB_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.com/clap.wav", "profile": "room", "series": true}'

Without series: true you get the single values. With it you also get room.rt60Bands, the table per octave band with the decay curve. A recording that holds no clap, a pop, an impulse response or a sweep is a 422 with the code room_not_measurable and the reason.

What comes back

LensWhat it is
room.rt60MidSeconds for the sound to fall 60 dB, the median of the 500 Hz, 1 kHz and 2 kHz bands. A speech room sits around 0.4 to 0.8 s, a living room 0.3 to 0.6 s.
room.rt60BandsPer band: the time, the noise in that band, T20 or T30, the decay range, a confidence (high from 35 dB of range) and the curve. A clap gives 500 Hz to 4 kHz; the lower bands say so instead of guessing.
room.flutterStrength, room.flutterPeriodMsA fast repeating echo between parallel walls. Read 0.4 and up as flutter, under 0.3 as none; the period is reliable from 0.3.
room.noiseFloorThe quiet before the clap, in dBFS (relative to full scale, not a calibrated sound level). Above about -50 dBFS the background decides the measurement.
room.clapAt, room.clapProminence, room.clipped, room.methodWhere the clap was found, how far it stood out (20 dB is the minimum), whether the microphone overloaded, and how the response was obtained.

A sweep recording adds room.sweepRange, room.directToReverb and room.tooCloseToSpeaker.

How far to trust it

We tested the method against real rooms, and we say what the test was.

  • The measurement is the one of the RoomLab app, exactly. Over 385 measured impulse responses the difference between the app and the engine is 0.0 s in every band.
  • Against the same method on the bare impulse response (every response struck with a clap spectrum and room noise, then measured as a recording): the mid value was a median 3.9 percent off over 155 rooms, 86 percent within 10 percent and 98 percent within 20 percent. Bands that gave themselves high confidence (at least 35 dB of decay) were a median 1.5 percent off; with low confidence a median 5.7 percent, so read those as an indication.
  • Against an independent implementation (numpy, another author) the Schroeder curve agreed within 5 percent in all 112 rooms with at least 35 dB of decay, a median 0.3 percent.

What was not tested: a real clap on a real phone (the clap was simulated with a clap spectrum and room noise), a real loudspeaker and microphone for the sweep, and flutter echo on real rooms (there is no truth for which rooms flutter). The numbers are a measurement, not a verdict: the engine does not tell you what to treat.

The full test, with the tables, is in the engine repository (scripts/validatie/room-ir/RESULT.md), and the status of every room.* measure is on the lenses page.

Next in VoiceLab docs

Pitch and voice quality: what the profile gives and what it holds back →

The pitch profile reads where a voice sits, how much it moves, how voiced the recording is and how clean the voice is. The test numbers, the limits, and why jitter and shimmer are not offered yet.

More in VoiceLab docs