Subtle Random Texture — User Guide
Smooth random, phase-preserving spectral colouration with optional time-evolving blends between full-file FFT states.
What this does
Subtle Random Texture creates smooth, random spectral colouration. Each processed copy receives a set of Gaussian-shaped boosts and cuts at random centre frequencies. The same positive gain is applied to the real and imaginary components of every FFT bin, so the existing bin phase is preserved while spectral magnitude is reshaped.
With one time segment the colour is static. With two or more segments, the script generates several complete full-file FFT colourations and blends them over time with triangular weights. This creates gradual timbral drift without windowed grain extraction or overlap-add reconstruction.
Quick start
- Select exactly one mono or stereo Sound.
- Run
Subtle_Random_Texture.praat. - Choose a preset. Subtle Shimmer is a useful starting point; Frozen Colour gives a static filter-like colour.
- Use Time segments to control how many independently random spectral states are blended across the file.
- Set Wet/Dry, then run the script. The result is named
originalName_PresetName.
How the random spectral envelope works
For each resonance, the script draws a random centre frequency fc and a random signed depth. Odd-numbered features are boosts and even-numbered features are cuts. The spectral gain is:
The 0.05 floor prevents polarity inversion. Low/High frequency define the range from which the random centre frequencies are drawn; Gaussian tails can extend outside that range. Bandwidth Hz is the scale parameter used by the Gaussian formula, not a measured filter FWHM.
Evolving mode
For N ≥ 2, the script does not split the source into N audio segments. It makes N complete FFT-processed copies of the entire source, each with a different random spectral envelope, then blends those copies with triangular weights. Adjacent weights sum to 1 at every time point; for N=2 the blend is a simple linear crossfade.
Presets
| Preset | Resonances | BW | Depth | Centre range | Segments |
|---|---|---|---|---|---|
| Custom | 8 | 100 Hz | 2.0 | 80–10000 Hz | 4 |
| Subtle Shimmer | 6 | 150 Hz | 1.0 | 200–10000 Hz | 6 |
| Warm Resonance | 6 | 80 Hz | 2.5 | 150–5000 Hz | 3 |
| Evolving Texture | 10 | 100 Hz | 2.0 | 100–10000 Hz | 8 |
| Lo-Fi Character | 8 | 40 Hz | 4.0 | 200–6000 Hz | 4 |
| Spectral Chorus | 16 | 200 Hz | 1.5 | 80–14000 Hz | 6 |
| Frozen Colour | 8 | 60 Hz | 3.0 | 100–10000 Hz | 1 |
Presets replace the resonance and time-variation parameters above. Wet/Dry and output controls remain user controls.
Controls
| Control | Meaning |
|---|---|
| Number of resonances | Number of Gaussian gain features in each random spectral state. |
| Bandwidth Hz | Width scale in the Gaussian gain law. Smaller values make narrower, more selective colouration. |
| Depth | Scales the random boost/cut amplitudes. Overlapping features can combine; cuts are floor-limited by the final gain law. |
| Low / High freq Hz | Random centre-frequency range. The upper value is automatically reduced when necessary to remain below Nyquist. |
| Time segments | Number of full-file random colourations. 1 = static; 2+ = time-varying blend. |
| Wet/Dry percent | Blend before final level scaling. 0% is a true dry bypass. |
| Scale peak | For every nonzero wet amount, the final result is target-normalized to this peak value. |
Processing pipeline
- Validate one mono/stereo input and clamp the random centre-frequency range to the available Nyquist region.
- For each channel and each spectral state: full-file FFT → random smooth gain envelope → inverse FFT → trim FFT padding.
- If multiple states are requested, blend their complete time-domain copies with a partition-of-unity triangular crossfade.
- For stereo input, repeat the process independently for left and right channels.
- Apply Wet/Dry.
- If Wet = 0, copy the original exactly and skip peak scaling. Otherwise target-normalize the final output to Scale peak.
Channels, duration, sample rate and level
- Input: mono or stereo only; 3+ channels are rejected.
- Output channels: preserved. Stereo L/R use independent random spectral states.
- Duration and sample rate: preserved.
- Wet = 0: exact dry copy; peak scaling is skipped.
- Wet > 0: the mixed result is always target-normalized to Scale peak. This means Wet/Dry sets the blend before final global level normalization.
Visualization
The four-panel display is mechanism-first:
- A — Actual Random Envelopes: the realized random spectral-gain curves stored for channel 1.
- B — Exact Time Blend: the triangular crossfade weights actually used.
- C — Realized Gain Over Time: the resulting time-varying gain at representative frequencies.
- D — Measured Pure-Wet Change: measured source-to-wet spectral consequence.
For stereo processing, the plotted random envelopes are the left-channel realization; the right channel is independently randomized and therefore intentionally different.