IR Analysis — User Guide

Measure the decay and clarity of a recorded impulse response, prepare it as a convolution kernel, reshape the measured space into creative IR material, and audition that space on another Sound — entirely inside Praat.

Author: Shai Cohen Affiliation: Department of Music, Bar-Ilan University, Israel Version: 2.1 (2026) License: MIT License Repo: Praat AudioTools
Contents:

What this does

IR Analysis has two deliberately separated roles. First, it analyzes the selected Sound as a measured impulse response using decay and clarity measures. Second, if requested, it derives new Sound objects from that measurement: a trimmed convolution-ready IR, complementary early/late components, a creatively sculpted IR, and an audition result produced by convolving the IR with another open Sound.

The measurement is always completed before preparation or creative processing begins. The selected Sound itself is never modified by the creative stage, and all reported room-acoustic figures refer to the original analyzed response.

Core idea: the same recorded space can function as both measurement and compositional material. A response can be quantified, separated into early and late energy, reshaped, and then heard acting on another sound without leaving Praat.
Measured and creative results are not interchangeable. <source>_IRart is a derived artistic object. If it is analyzed again, the resulting figures describe that sculpture, not the original room.

Measurement → sculpture

SELECTED RESPONSE ↓ ACOUSTIC ANALYSIS start point → Lundeby truncation → Schroeder decay EDT / T20 / T30 / C50 / C80 / D50 / Ts ↓ OPTIONAL IR PREPARATION direct-sound alignment → measured tail cut → final fade ↓ OPTIONAL EARLY / LATE DECOMPOSITION ↓ OPTIONAL CREATIVE SCULPTING early/late balance → tail shaping → spectral tilt → late-tail reversal → pre-delay ↓ OPTIONAL AUDITION dry Sound × prepared or creative IR

The stages are intentionally one-way. Creative processing never feeds back into the measurement engine.

Quick start

  1. Select exactly one Sound containing the impulse response or impulse-like room response to analyze.
  2. Run IR_Analysis.praat. Channel 1 is analyzed by default.
  3. Keep Lundeby (recommended) truncation unless you specifically want raw integration to the end of the Sound.
  4. Choose Broadband + octave bands when comparative band information is useful; choose broadband only for a faster, simpler run.
  5. Enable Prepare_convolution_ready_IR to create a trimmed kernel aligned to the direct sound by default.
  6. Enable Creative_IR_processing to choose a creative starting point and then edit the six sculpting controls.
  7. Enable Audition_on_another_Sound to hear the prepared or creative IR convolved with another Sound that is already open in Praat.
For audition: another Sound must already be open before the script starts. The first other open Sound becomes the default audition source, and its name remains editable in the Audition dialog.

Acoustic analysis

The broadband measurement follows an ISO 3382-1-style decay workflow implemented entirely with native Praat operations.

Measure / stageImplementation
Start pointBy default, the first sample reaching −20 dB relative to the peak. Advanced settings can instead use the peak sample or the start of the Sound.
Noise & truncationIterative Lundeby crosspoint estimation. If the crosspoint search fails but a noise estimate exists, the script falls back to the first smoothed point approximately 5 dB above the estimated noise.
Noise handlingChu-style noise-energy subtraction in each decay block plus analytic late-tail compensation when a valid fitted slope is available.
Decay curveSchroeder backward energy integration.
EDTLeast-squares decay fit over 0 to −10 dB, extrapolated to 60 dB.
T20Least-squares fit over −5 to −25 dB.
T30Least-squares fit over −5 to −35 dB.
ValidityA converged fit is refused when the available peak-to-noise range is insufficient: 20 dB for EDT, 25 dB for T20, and 35 dB for T30.
Curvature100 × (T30 / T20 − 1), reported only when both T20 and T30 are valid.
C50 / C80Direct energy ratios around 50 ms and 80 ms boundaries relative to the detected start point.
D50Percentage of total analyzed energy arriving within the first 50 ms.
TsCentre time from sample-domain integration of (t − t0) × h²(t); it is not read from the block grid.

Octave-band analysis

Optional octave bands use Praat's zero-phase Filter (pass Hann band). For each requested band, the script also measures the filter's own decay from a unit impulse. A band RT is accepted only when it is more than ten times longer than that self-decay. Bands more than 60 dB below the strongest measured band are treated as filter leakage and their decay/clarity values are refused.

Not IEC 61260 octave filtering. The per-band values are intended for comparative and compositional work, not standards-conformant octave-band reporting. The Hann filter is zero-phase/acausal and can move a very small amount of energy ahead of the impulse; this is negligible for RT but can bias per-band C50 slightly toward higher clarity.

Convolution-ready IR

When any downstream processing is requested, the script builds a prepared base from a copy of the measured response. The end point is derived from the measured truncation rather than from a fixed duration: the Lundeby crosspoint is backed off by the selected tail margin along the fitted decay.

  1. Start alignment. By default, the direct sound is aligned to 0. Choose Preserve measured timing to retain the pre-arrival timing from the original Sound.
  2. Measured tail cut. The kernel ends according to the measured decay/truncation logic.
  3. Final fade. A short raised-cosine fade is applied only at the very end, leaving the preceding measured decay unchanged.
  4. Peak protection. Generated IRs are never normalized upward. If a peak exceeds 0.99, the whole derived IR is attenuated by one scalar so the internal early/late energy relationship is preserved.

If Prepare_convolution_ready_IR is enabled, the prepared Sound is kept as <source>_IRprepared. When preparation is needed only internally for sculpting or audition, the temporary prepared base is removed at the end.

Early / late decomposition

The preparation dialog can split the prepared IR into two full-length complementary Sounds:

The boundary is measured from the detected direct sound and can be 50 ms, 80 ms, or custom. A raised-cosine crossfade is applied around the boundary. The early and late windows are complementary, so the two components sum back to the prepared IR without a level bump or discontinuity.

Why 50 / 80 ms? These boundaries also connect directly to the script's C50 and C80 clarity measurements, turning an acoustic distinction into reusable sound material.

Creative IR sculpting

Creative processing works only on the prepared copy and produces <source>_IRart. The controls deliberately target properties that are meaningful for an impulse response rather than turning the tool into a general effects processor.

ControlRangeEffect
Early_gain_dB−24 to +12 dBChanges the weight of the direct/early component before the late field.
Late_gain_dB−24 to +12 dBChanges the overall prominence of the late reverberant component.
Tail_decay_shaping_dB_per_s−30 to +30 dB/sApplies an exponential amplitude envelope after the early/late split. The internal gain change is limited to +12 dB and −80 dB for safety.
Spectral_tilt_dB_per_octave−6 to +6 dB/octApplies one broad spectral tilt around a 1 kHz pivot. Per-bin gain is limited to ±12 dB. Negative values darken the IR; positive values brighten it.
Reverse_late_tailOff / OnPreserves the causal onset and early reflections while reversing only the late field. The reversed content is windowed after reversal, with a fresh complementary boundary fade and an end fade.
Additional_predelay_ms0 to 2000 msAdds silence before the derived creative response.
Decay shaping is artistic. A positive or negative Tail_decay_shaping_dB_per_s changes the derived kernel's amplitude envelope; it does not claim that the measured room has a different reverberation time.

Creative presets

Presets are starting points, not hidden modes. Choosing one fills the six creative controls on the following dialog; every value remains visible and editable before processing.

PresetEarlyLateDecay shapeTiltReversePre-delay
Custom — keep current valuescurrentcurrentcurrentcurrentcurrentcurrent
Natural — no change0 dB0 dB0 dB/s0 dB/octNo0 ms
Close / percussive+3 dB−8 dB−8 dB/s+1 dB/octNo0 ms
Distant bloom−6 dB+5 dB+5 dB/s−1 dB/octNo40 ms
Dark resonance−3 dB+6 dB+3 dB/s−3 dB/octNo20 ms
Reverse bloom−4 dB+5 dB+2 dB/s−1 dB/octYes30 ms

Preset philosophy

The names describe transformations of the recorded space, not simulated room types. A stairwell remains that recorded stairwell; the preset changes how its measured response is weighted, colored, shaped, or reversed.

Audition by convolution

Audition_on_another_Sound is a quick perceptual check, not a replacement for the library's dedicated convolution tools. It convolves another already-open Sound with either the prepared IR or, when available and requested, the creative IR.

  1. The script finds the named dry Sound among the Sounds that were open when the run began.
  2. If the dry Sound is multichannel, channel 1 is used for audition.
  3. If the IR and dry Sound have different sampling frequencies, the IR audition copy is resampled to the dry Sound's rate.
  4. Praat convolution is performed, followed by optional preview-only wet-level matching.
  5. The wet result and dry Sound are mixed according to Wet_percent.
  6. Final peak protection attenuates only when the audition output exceeds 0.99.

Wet-level matching

A clap-derived IR carries the arbitrary gain of the recording chain, so a raw wet percentage is not necessarily perceptually meaningful. With Match_wet_level_to_dry enabled (default), the wet convolution RMS is matched to the dry Sound RMS over the dry Sound's own duration before the wet/dry mix. The matching correction is limited to ±36 dB and affects only the audition preview; neither _IRprepared nor _IRart is changed.

The audition output is named <dry>_through_<IR>.

Parameters

Main dialog

ParameterDefaultMeaning
Channel1Channel to analyze. 0 explicitly sums all channels to mono; the script warns when that sum loses more than 1 dB relative to the channel mean.
BandsBroadband + octave bandsRuns broadband only, or broadband plus nominal octave bands.
TruncationLundeby (recommended)Measured truncation/crosspoint processing or raw integration to the end.
Prepare_convolution_ready_IROffKeeps the prepared convolution kernel as an output Sound.
Creative_IR_processingOffOpens the preset and creative-sculpting stages and produces _IRart.
Audition_on_another_SoundOffConvolves another open Sound with the prepared or creative IR.
Draw_visualizationOnDraws the AudioTools analysis page; creative processing adds a measured/prepared vs sculpted comparison panel.
PlayOffPlays the last Sound produced by the current run.
Advanced_settingsOffOpens detailed analysis and table-output controls.

Advanced analysis defaults

ParameterDefaultMeaning
Lowest_band125 HzLowest nominal octave-band center.
Highest_band8000 HzHighest requested nominal center, subject to Nyquist protection.
Block_length_ms1.0 msDecay-curve energy block size, with a minimum of four samples.
Noise_subtraction_and_tail_compensationOnEnables Chu subtraction and analytic tail compensation when supported by the Lundeby estimate.
Start_pointISO 3382-1 (−20 dB re peak)Direct-response start rule.
Tail_margin_dB5 dBHow far above the estimated noise/truncation region the prepared IR should end along the fitted decay.
Results_tableOffCreates broadband and, when available, octave-band Praat Table objects.

Preparation defaults

ParameterDefaultMeaning
Start_alignmentAlign direct sound to zeroRemoves the leading pre-arrival region from the prepared kernel, or preserves it when requested.
Final_fade_ms5 msRaised-cosine fade at the prepared IR's final edge.
Early_late_split80 ms50 ms, 80 ms, or custom boundary measured from the detected direct sound.
Custom_split_ms80 msUsed only when Custom split is selected.
Crossfade_ms4 msComplementary raised-cosine early/late transition.
Create_early_and_late_SoundsOffKeeps the two complementary decomposition Sounds.

Audition defaults

ParameterDefaultMeaning
Dry_Sound_nameFirst other open SoundName of the Sound to audition through the IR.
Wet_percent100%Wet/dry mix. The script accepts values above 0 and up to 100.
Use_creative_IR_if_availableOnUses _IRart for audition when it exists; otherwise uses the prepared IR.
Match_wet_level_to_dryOnPreview-only RMS matching before wet/dry mixing.

Input & output behavior

OutputWhen createdMeaning
<source>_IRpreparedPrepare_convolution_ready_IR enabledDirect-sound-aligned or timing-preserved, measured-tail-trimmed IR with final fade and attenuation-only peak protection.
<source>_IRearlyCreate_early_and_late_Sounds enabledFull-length early component with complementary boundary crossfade.
<source>_IRlateCreate_early_and_late_Sounds enabledFull-length late component complementary to _IRearly.
<source>_IRartCreative_IR_processing enabledArtistically derived IR after visible/editable sculpting controls.
<dry>_through_<IR>Audition_on_another_Sound enabled and a valid dry Sound is foundConvolution audition with optional wet-level matching and wet/dry mix.
<source>_IRresultsResults_table enabledOne-row broadband Table containing metadata, noise/truncation information, EDT/T20/T30 validity, curvature, clarity, definition, and Ts.
<source>_IRbandsResults table + octave bandsPer-band Table containing T30, T20, EDT, C50, relative band level, validity flags, and measured filter self-decay.

The source Sound is preserved. Internal work objects are removed at the end, while every requested user-facing output remains in the Objects window.

Visualization

With Draw_visualization enabled, the script draws the AudioTools analysis page with:

When a creative IR exists, the page expands with a fifth panel: Prepared vs sculpted IR (dB). The prepared envelope is drawn in grey and the creative envelope in orange against the same reference, so the effect of gain balance, decay shaping, reversal, spectral color, or pre-delay can be inspected visually.

Batch / headless use

Analysis, octave bands, report, results tables, and visualization can run headless across the Praat versions documented in the script. The preparation, creative, and audition stages use beginPause dialogs and therefore require interactive use in newer headless builds.

Praat 6.4.63+ headless behavior: the script documents that beginPause can terminate a headless run silently. For batch analysis, leave Prepare_convolution_ready_IR, Creative_IR_processing, and Audition_on_another_Sound unticked. To automate those stages, set their defaults directly in the script and remove the corresponding pause calls.

Notes & limitations