Creative Convolution — Flexible Convolution Mixing

Use any selected Sound as an impulse response or creative convolution kernel, then shape its temporal form, level, feedback, dry/wet relationship, and stereo field around Praat's native convolution engine.

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

What this does

Creative Convolution is a pure-Praat convolution processor for both conventional impulse responses and arbitrary sound kernels. Select two Sounds, identify which is the dry source, and the other becomes the convolution kernel. The kernel can be a measured room IR, a synthetic IR, noise, an instrumental sound, a resonant texture, or an output from another Praat AudioTools generator such as the Self-Oscillating FDN Synthesizer.

Any Sound can become the kernel. The tool is designed as much for spectral and temporal imprinting as for room simulation. Convolution is performed by Praat's native Sounds: Convolve...; the script concentrates on kernel preparation, mixing, spatialisation, level handling, and safe creative extensions.

Key Features:

Quick start

  1. Select exactly two Sound objects in Praat.
  2. Run Creative_Convolution.praat.
  3. Choose a preset. Natural Convolution is the safest starting point for a conventional impulse response; FDN Space is designed for a Self-Oscillating FDN rendering used as the kernel.
  4. In the role dialog, choose which selected Sound is the Source (dry). The other Sound becomes the Kernel.
  5. Leave Wet dry = -1 to use the preset value, or enter 0–100% to override it.
  6. Keep Normalization = Peak and Target peak = -1 dBFS for a safe first render.
  7. Enable Show parameters or choose Custom to open the Kernel and Mix/Space/Advanced dialogs.
  8. Enable Draw visualisation to inspect the exact prepared kernel and the resulting wet/output waveforms.
No dependencies: Praat 6.3+ is the only requirement. The original Source and Kernel are never modified.

Core concept

Source → dry path ───────────────────────────────┐ │ Kernel → trim → stretch → reverse → fades → spatial kernel → pre-delay → native convolution → optional feedback → RMS match → wet gain → width → pan ────────┤ ↓ Linear / Equal Power mix ↓ tail fade → normalisation → clipping protection → stereo output

The script deliberately keeps the dry and wet paths separate until the final mix. Kernel operations therefore affect the convolution response rather than destructively altering the original Source.

When the Source and Kernel use different sample rates, the Kernel is resampled to the Source rate before convolution. The final output normally remains at the Source sample rate.

9 Presets + Custom

Natural Convolution

Kernel largely unchanged, 30% wet, RMS matching, Equal Power mixing, Stereo Wet, a short tail fade, and slightly expanded width.

Long Hall

140% kernel stretch, 25 ms pre-delay, 55% wet, Early Center / Late Wide spatialisation, and a broader 150% wet field.

Reverse Bloom

Reversed kernel, 20 ms kernel fade-in, 40 ms pre-delay, 65% wet, Wide Wet, and 140% width.

Spectral Imprint

High-wet arbitrary-kernel treatment with short kernel fades and RMS matching. Designed to transfer the kernel's spectral/time identity strongly onto the source.

Resonant Kernel

Uses only the first 40% of the kernel, stretches it to 120%, applies short fades, and mixes it strongly at a controlled 80% width.

FDN Space

Designed for a Self-Oscillating FDN rendering: 50% wet, 20 ms pre-delay, Wide Wet, 130% width, and a long 200 ms kernel fade-out.

Frozen Metal

Extreme 300% resample-like kernel stretch, long fades, 85% wet, Wide Wet, and 150% width for slow metallic convolution fields.

Short Texture

Restricts the kernel to its first 15%, adds compact fades, uses 35% wet, and opens the wet field to 170% width.

Experimental Reverse FDN

Reversed and 200%-stretched kernel, 80% wet, 160% width, plus 35% finite feedback over two iterations.

Custom

Opens both parameter dialogs and exposes the complete kernel, mix, spatial, native-convolution, and feedback controls.

Controls

Main dialog

ControlDefaultFunction
PresetNatural ConvolutionNine supplied designs or Custom.
Wet dry (%)-1-1 keeps the preset value; 0 is dry only; 100 is wet only.
NormalizationPeakNone / Peak / RMS (-18 dBFS).
Target peak-1 dBFSPeak ceiling for Peak normalisation and clipping protection.
Show parametersOffOpens the detailed Kernel and Mix/Space/Advanced dialogs.
Draw visualisationOnCreates the multi-panel Praat Picture explanation.
Play resultOnPlays the rendered result.

Kernel dialog

ParameterRange / role
Kernel start / end0–100%. Extracts a percentage region before further processing; start must remain below end.
Kernel stretchClamped to 25–400%. Resample-like scaling: duration and spectrum change together.
Reverse kernelReverses only the prepared kernel, never the Source.
Kernel fade in / outRaised-cosine fades. If their total exceeds the kernel duration, both are proportionally shortened.
Pre delay0–500 ms. Adds silence before the kernel so only the wet path is delayed.

Mix, space & advanced dialog

ParameterOptions / role
Wet dry0–100%.
Mix lawLinear / Equal power.
Wet gain-30 to +18 dB, applied after optional RMS matching.
Match wet RMS to dryMatches the wet active region to the Source RMS, with a +60 dB maximum boost and a numerical-silence threshold.
Spatial modeMono Wet / Stereo Wet / Wide Wet / Early Center / Late Wide.
Early late splitSplit position in milliseconds for the Early Center / Late Wide mode.
Wet pan-100…+100 constant-power pan law.
Wet width0–200% Mid/Side width.
Protect against clippingAttenuates the final output only when the selected ceiling would otherwise be exceeded.
Convolution scalingSum / Integral / Normalize / Peak 0.99.
Outside domainZero / Similar.
Feedback0–90%, finite iterative convolution.
Feedback iterations1–4 iterations.

Kernel preparation

The kernel is prepared in a fixed order before convolution:

trim → resample-like stretch → reverse → raised-cosine fades → spatial kernel construction → pre-delay

Resample-like stretch

Kernel Stretch is intentionally not pitch-preserving. The script reinterprets the kernel sampling frequency and then resamples back to the Source rate.

StretchApproximate result
50%Half duration; spectrum shifted approximately one octave upward.
100%Original temporal/spectral scale.
200%Double duration; spectrum shifted approximately one octave downward.
300%Three times the duration with a correspondingly lower spectral scale.
Very short kernels: resample-like stretching is skipped when the prepared kernel has fewer than eight samples.

Spatial modes

Mono Wet

The Source is converted to a mono wet feed and convolved with a mono version of the kernel. The result is later placed in stereo by the Wet Pan control.

Stereo Wet

A stereo kernel is used channel-wise. A mono kernel is converted into a complementary stereo pair using slow, reproducibly seeded modulation of its tail at moderate depth.

Wide Wet

Uses the same complementary-pair method at greater depth for mono kernels. Existing stereo kernels remain channel-wise and can be expanded further with Wet Width.

Early Center / Late Wide

Splits the prepared kernel around the requested time with a 5 ms overlap transition. The early section is convolved as centred mono; the late section becomes a wide stereo pair and is widened further before recombination.

For a mono kernel, the stereo pair is built as complementary modulation:

kL(t) = k(t) · [1 + d·m(t)] kR(t) = k(t) · [1 − d·m(t)]

The modulation signal is seeded, low-frequency noise filtered below 40 Hz. The first 5 ms of the kernel remain centred and the modulation fades in over the following 15 ms. Depth is 0.5 for Stereo Wet and 0.9 for Wide Wet and the late component of Early Center / Late Wide.

Mono compatibility: with a mono Source, the complementary pair sums exactly to twice the mono-kernel response. With a stereo Source, Praat convolves left and right channel-wise, so that exact sum identity does not apply.

Width and pan

After convolution and level matching, the wet signal is transformed out-of-place in Mid/Side form:

M = (L + R) / 2 S = (L − R) / 2 S' = Width · S

Wet Width = 0% collapses the wet field to mono; 100% preserves its current width; values up to 200% exaggerate the Side component. Wet Pan then applies a constant-power balance law to the wet signal only.

Wet/dry & level handling

Mix laws

Linear mixing uses direct complementary gains:

dry = 1 − mix wet = mix

Equal Power uses trigonometric gains:

dry = cos(mix · π / 2) wet = sin(mix · π / 2)

The script explicitly forces the endpoints, so 0% is genuinely dry only and 100% is genuinely wet only.

v1.0.1 dry-only fix: when Wet/Dry is 0%, the output is rendered at the exact Source length rather than keeping a silent convolution tail. The final 5 ms tail fade is also applied only when an audible wet tail extends beyond the Source.

Wet RMS matching

When enabled, the script measures the wet RMS from the end of the pre-delay through at most one Source duration and compares it with the Source RMS. This avoids allowing a long silent or decaying tail to dominate the level estimate.

Experimental feedback

Feedback is implemented as a finite offline process rather than an unbounded recursive loop. The first wet convolution is retained, then the previous wet pass is convolved again with the prepared kernel and accumulated.

wet₁ = Source * Kernel wet₂ = wet₁ * Kernel wet₃ = wet₂ * Kernel … output wet = wet₁ + scaled wet₂ + scaled wet₃ + …

Each feedback pass is RMS-scaled relative to the first wet result according to feedback^i. The script supports at most four requested iterations and refuses a pass when the accumulated duration plus the current kernel would exceed 180 seconds.

Creative rather than physical. This finite repeated-convolution stage is intended for resonant and experimental kernels. It is not presented as a physical room-feedback model.

Normalisation & safety

ModeBehavior
NoneNo deliberate output normalisation. If clipping protection is on, peaks above the safety ceiling are attenuated.
PeakScales the complete result to the user-selected Target Peak, limited internally to a maximum of 0.999 linear peak.
RMS (-18 dBFS)Scales the complete result to -18 dBFS RMS, then applies clipping protection when needed.

Silent output is never normalised. When protection is disabled and the final peak exceeds full scale, the Info report explicitly warns about the measured peak.

Visualisation

When Draw visualisation is enabled, Creative Convolution produces a Praat Picture display showing the actual material used by the algorithm.

1 — Source

The dry Source waveform on the final output time axis.

2 — Prepared Kernel

The actual kernel after trim, stretch, reverse, fades, spatial construction and pre-delay, shown on its own time axis.

3 — Wet Convolution

The stereo wet result after RMS matching, Wet Gain, Width and Pan, but before the final dry/wet mix.

4 — Output

The final stereo Sound after dry/wet mixing, tail handling, normalisation and protection.

Summary strip

Kernel region, stretch, reverse, pre-delay, spatial mode, width, pan, RMS matching, wet gain, native convolution scaling, feedback, output duration, peak, RMS, and kernel resampling when applicable.

Technical behavior

Requirements

ComponentRequirement
PraatPraat 6.3+.
InputExactly two selected Sound objects.
PythonNot required.
External libraries / pluginsNot required.
Network / cloudNot required.

Limitations

Outputs

The script creates a new stereo Sound named from the Source and the active preset, for example:

Source_NaturalConvolution
Source_FDNSpace
Source_ExperimentalReverseFDN

For Custom, the output name is derived from the Custom preset label. The original selected Sounds remain unchanged.

Length behavior: whenever the wet signal is audible, the output retains the full convolution tail. At 0% wet, v1.0.1 returns the exact Source length with no appended silent tail.

Applications

Conventional convolution reverb

Use case: apply a measured or synthetic room impulse response with controlled pre-delay, dry/wet law, RMS matching, and stereo width.

Starting point: Natural Convolution or Long Hall.

FDN-generated spaces

Use case: render a Self-Oscillating FDN texture, then use that Sound as the convolution kernel for another source.

Starting point: FDN Space.

Spectral imprinting

Use case: use an instrumental note, voice fragment, resonant object, or noise texture as the Kernel so its temporal/spectral structure is imposed on another Sound.

Starting point: Spectral Imprint or Resonant Kernel.

Reverse convolution gestures

Use case: reverse the prepared kernel and separate the wet onset from the Source with pre-delay to create swelling or anticipatory convolution shapes.

Starting point: Reverse Bloom.

Extreme temporal/spectral scaling

Use case: stretch the kernel far beyond its original duration while deliberately shifting its spectrum downward.

Starting point: Frozen Metal.

Finite convolution recursion

Use case: repeatedly convolve an already resonant wet signal with the same kernel to produce increasingly dense, self-imprinted structures.

Starting point: Experimental Reverse FDN.

Workflow: synthesis → kernel → convolution

Example: create a nonlinear texture with Self-Oscillating FDN Synthesizer, select that Sound together with a dry instrumental recording, choose the instrumental recording as Source, then render with FDN Space or Experimental Reverse FDN. The FDN result becomes the spectral-temporal memory through which the Source is filtered.