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.
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.
Sounds: Convolve...; the script concentrates on kernel preparation, mixing, spatialisation, level handling, and safe creative extensions.Key Features:
- Pure Praat — no Python, external executable, plugin, cloud service, or external DSP library.
- Native convolution core — uses Praat's own
Sounds: Convolve...command. - Two-Sound workflow — explicit Source/Kernel role selection prevents ambiguity in object-list order.
- Kernel shaping — trim, resample-like stretch, reverse, raised-cosine fade-in/out, and wet-only pre-delay.
- Four spatial modes — Mono Wet, Stereo Wet, Wide Wet, and Early Center / Late Wide.
- Dry/wet laws — Linear or Equal Power mixing, with a true dry-only 0% mode.
- Level control — optional wet-RMS matching, wet gain, final Peak/RMS/None normalisation, and clipping protection.
- Wet-only spatial controls — constant-power pan and 0–200% Mid/Side width.
- Finite feedback convolution — optional 1–4-pass energy-controlled iterative convolution with a duration guard.
- 9 presets + Custom — from Natural Convolution and Long Hall to FDN Space, Frozen Metal, and Experimental Reverse FDN.
- Process visualisation — Source, Prepared Kernel, Wet Convolution, Output, and a compact processing summary.
Quick start
- Select exactly two Sound objects in Praat.
- Run
Creative_Convolution.praat. - 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.
- In the role dialog, choose which selected Sound is the Source (dry). The other Sound becomes the Kernel.
- Leave Wet dry = -1 to use the preset value, or enter 0–100% to override it.
- Keep Normalization = Peak and Target peak = -1 dBFS for a safe first render.
- Enable Show parameters or choose Custom to open the Kernel and Mix/Space/Advanced dialogs.
- Enable Draw visualisation to inspect the exact prepared kernel and the resulting wet/output waveforms.
Core concept
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
| Control | Default | Function |
|---|---|---|
| Preset | Natural Convolution | Nine supplied designs or Custom. |
| Wet dry (%) | -1 | -1 keeps the preset value; 0 is dry only; 100 is wet only. |
| Normalization | Peak | None / Peak / RMS (-18 dBFS). |
| Target peak | -1 dBFS | Peak ceiling for Peak normalisation and clipping protection. |
| Show parameters | Off | Opens the detailed Kernel and Mix/Space/Advanced dialogs. |
| Draw visualisation | On | Creates the multi-panel Praat Picture explanation. |
| Play result | On | Plays the rendered result. |
Kernel dialog
| Parameter | Range / role |
|---|---|
| Kernel start / end | 0–100%. Extracts a percentage region before further processing; start must remain below end. |
| Kernel stretch | Clamped to 25–400%. Resample-like scaling: duration and spectrum change together. |
| Reverse kernel | Reverses only the prepared kernel, never the Source. |
| Kernel fade in / out | Raised-cosine fades. If their total exceeds the kernel duration, both are proportionally shortened. |
| Pre delay | 0–500 ms. Adds silence before the kernel so only the wet path is delayed. |
Mix, space & advanced dialog
| Parameter | Options / role |
|---|---|
| Wet dry | 0–100%. |
| Mix law | Linear / Equal power. |
| Wet gain | -30 to +18 dB, applied after optional RMS matching. |
| Match wet RMS to dry | Matches the wet active region to the Source RMS, with a +60 dB maximum boost and a numerical-silence threshold. |
| Spatial mode | Mono Wet / Stereo Wet / Wide Wet / Early Center / Late Wide. |
| Early late split | Split position in milliseconds for the Early Center / Late Wide mode. |
| Wet pan | -100…+100 constant-power pan law. |
| Wet width | 0–200% Mid/Side width. |
| Protect against clipping | Attenuates the final output only when the selected ceiling would otherwise be exceeded. |
| Convolution scaling | Sum / Integral / Normalize / Peak 0.99. |
| Outside domain | Zero / Similar. |
| Feedback | 0–90%, finite iterative convolution. |
| Feedback iterations | 1–4 iterations. |
Kernel preparation
The kernel is prepared in a fixed order before convolution:
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.
| Stretch | Approximate 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. |
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:
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.
Width and pan
After convolution and level matching, the wet signal is transformed out-of-place in Mid/Side form:
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:
Equal Power uses trigonometric gains:
The script explicitly forces the endpoints, so 0% is genuinely dry only and 100% is genuinely wet only.
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.
- Wet signals below approximately -140 dBFS RMS are treated as numerically silent and are not boosted.
- The automatic match boost is capped at +60 dB.
- Wet Gain is applied in addition to the match factor.
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.
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.
Normalisation & safety
| Mode | Behavior |
|---|---|
| None | No deliberate output normalisation. If clipping protection is on, peaks above the safety ceiling are attenuated. |
| Peak | Scales 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
- Requires exactly two selected Sounds and asks explicitly which is the Source.
- Works on temporary copies and never modifies the original Source or Kernel.
- Mono and stereo Sources/Kernels are supported directly; material with more than two channels is folded to mono and reported.
- The Kernel is resampled to the Source sample rate with quality 50 when their rates differ.
- Praat native convolution is used with selectable scaling:
sum,integral,normalize, orpeak 0.99. ZeroandSimilarare exposed as the native outside-domain policies.- In Early Center / Late Wide, requests for convolution scaling
NormalizeorPeak 0.99are internally replaced bySumso the separately rendered early and late convolutions share one consistent scale; the Info report states this substitution. - Praat's stereo × stereo convolution is used channel-wise; mono input is broadcast by the native convolution behavior.
- The wet spatial width is calculated out-of-place so the right-channel formula never reads an already overwritten left channel.
- The output is always stereo.
- When wet is audible, the full convolution tail is retained; at 0% wet the output length equals the original Source length.
- An actual wet tail beyond the Source receives a short 5 ms end fade.
- The Info window reports Source/Kernel rates and channels, resampling, preset, kernel preparation, convolution settings, spatial mode, RMS matching, feedback, dry/wet gains, output duration, peak, and RMS.
- Temporary working objects are removed after rendering and the final result remains selected.
Requirements
| Component | Requirement |
|---|---|
| Praat | Praat 6.3+. |
| Input | Exactly two selected Sound objects. |
| Python | Not required. |
| External libraries / plugins | Not required. |
| Network / cloud | Not required. |
Limitations
- Offline only: this is a render-based convolution workflow, not a real-time convolution plugin.
- Stereo maximum input topology: Sounds with more than two channels are folded to mono rather than preserving a surround topology.
- Output is stereo: there is no quad, surround, or true multichannel convolution output in this version.
- Kernel Stretch changes pitch: it is deliberately resample-like and must not be described as pitch-preserving time stretching.
- Wide Wet on an existing stereo kernel: the kernel itself remains channel-wise; additional width comes from the separate Wet Width stage.
- Early Center / Late Wide is a creative split: the split time does not claim to detect physically measured early reflections automatically.
- Feedback is finite: it is repeated convolution over a limited number of iterations, not an infinite feedback loop.
- Long kernels and feedback can become expensive: the feedback engine includes a 180-second duration guard.
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.
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.