Spectral Blur — User Guide
Global FFT magnitude smoothing with phase preservation, repeated binomial kernels, two tail strategies and multichannel wet/dry rendering.
What this does
Spectral Blur smooths the magnitude of each channel's global FFT spectrum while preserving that spectrum's phase. Repeated binomial smoothing passes spread energy across neighbouring frequency bins, softening narrow peaks and valleys while retaining the complex phase angles used for inverse transformation.
What is spectral blur?
A complex FFT spectrum has a magnitude and a phase at each frequency bin. The script computes the original magnitude, repeatedly smooths it with a symmetric binomial kernel, then multiplies both the real and imaginary spectrum rows by the same ratio:
Because the same positive ratio scales both complex components, the phase angle of each non-zero bin is preserved. The audible change comes from redistributing spectral magnitude across neighbouring bins.
The script reports an approximate blur width in Hz using the accumulated variance of the repeated binomial kernels. More passes and wider kernels increase that effective frequency-domain smoothing.
Quick start
- Select exactly one Sound.
- Run
Spectral_Blur.praat. - Start with Standard Blur or Metallic Sheen.
- Use Blur_passes for depth and Blur_type for local kernel width.
- Choose Stable core when you want the blur inside the original duration to be independent of the requested tail; choose Extended FFT tail for the older long-tail character.
Presets
| Preset | Passes | Kernel | Wet |
|---|---|---|---|
| Standard Blur | 10 | Medium (5-bin) | 100% |
| Ethereal Pad | 30 | Wide (7-bin) | 100% |
| Underwater | 20 | Wide (7-bin) | 85% |
| Metallic Sheen | 5 | Narrow (3-bin) | 70% |
| Extreme Wash | 50 | Wide (7-bin) | 100% |
| Custom | Uses the values entered in the form. | ||
Presets do not replace Tail_seconds, Tail_behavior, Fade_out_seconds or Scale_peak.
Controls
| Control | Default | Meaning |
|---|---|---|
| Blur_passes | 10 | Number of repeated smoothing passes; internally clamped to 1…100. |
| Blur_type | Medium | Narrow = [1 2 1]/4; Medium = [1 4 6 4 1]/16; Wide = 7-bin Pascal/binomial kernel. |
| Wet_dry_percent | 100 | Linear blend of processed and original signal; clamped to 0…100. |
| Tail_seconds | 1.0 | Requested extra output duration, interpreted differently by the two Tail modes. |
| Tail_behavior | Extended FFT tail | Selects explicit pre-FFT padding or stable-core use of Praat's internal FFT padding. |
| Fade_out_seconds | 0.5 | Raised-cosine fade at the final output ending. |
| Scale_peak | 0.95 | Final target peak; must be >0 and ≤1. |
Tail behaviour
Extended FFT tail (v2.2 character)
The source channel is explicitly extended with Tail_seconds of silence before the FFT. This guarantees the requested tail length, but it changes the FFT size and bin lattice. Because the blur itself works in FFT bins, changing Tail_seconds can therefore change the texture heard even inside the original source duration.
Stable core
The FFT input remains exactly the original channel length. Praat's FFT already introduces internal zero-padding to an efficient transform size; after inverse FFT, the script retains up to the requested Tail_seconds from that existing padding. The retained tail can therefore be shorter than requested, but Tail_seconds cannot alter the core FFT lattice or the blur heard inside the source.
Processing pipeline
- Process every source channel independently.
- Construct the FFT input according to the selected Tail behaviour.
- Convert the complete channel to a complex Spectrum.
- Extract the magnitude and repeatedly smooth it with the selected binomial kernel using ping-pong buffers.
- Scale the original complex bins by
smoothed/original magnitude, preserving phase. - Transform back to Sound and trim to the requested/available duration.
- Recombine all processed mono channels into a multichannel Sound.
- Blend the original dry signal over the source portion; the added tail is wet-only (or silence at 0% wet).
- Apply the final fade, then target-normalize the whole result to Scale_peak.
Channels, mix and level
- Channels: preserved. Each channel is blurred independently and then recombined; Praat's “Combine to stereo” command can combine any number of selected Sounds, so the resulting channel count equals the source count.
- Sample rate: preserved.
- Duration: source + requested tail in Extended mode; source + available retained FFT tail in Stable mode.
- Wet = 0: not an identity bypass. Processing still occurs, the output retains the selected tail duration (as silence), the final fade still applies, and the result is target-normalized to Scale_peak.
- Final normalization: unconditional target peak normalization for every non-silent result.
Output name: <source>_blur_<preset>.
Visualization
- Input and output waveforms: drawn on one shared amplitude scale for an honest level comparison.
- Original and blurred spectrograms: side-by-side, using channel 1 and a Nyquist-safe upper range capped at 5 kHz.
- Summary: preset, pass count, kernel, wet/dry, retained tail, applied fade, approximate blur sigma and processing time.