Whisper Morph — User Guide
LPC-based creative whisper resynthesis with per-channel noise excitation, source-relative intensity shaping, controllable breathiness, and time-varying dry/whisper morphs.
What this does
Whisper Morph builds a noise-excited LPC resynthesis target from the selected Sound and morphs between that target and the unmodified source. Each input channel is analysed independently, so stereo and multichannel material keep their channel structure. The LPC model supplies a time-varying spectral envelope; Gaussian noise supplies the whisper-like excitation; a source-derived relative intensity contour restores the broad amplitude trajectory.
The wet target can range from the unchanged tonal source (Breathiness = 0) to fully noise-excited LPC resynthesis (Breathiness = 1). Five morph patterns and three curve shapes then control how much of that target is heard through time.
Signal flow
The dry path is never normalized or preprocessed. Internal time shifting is used only to make the LPC/noise objects share a zero-based domain; the final Sound is shifted back to the source start time.
Quick start
- Select exactly one Sound object.
- Run
Whisper_Morph.praat. - Choose a preset, or use Custom.
- Choose the morph pattern and curve.
- Use Breathiness to set how noise-like the wet target becomes.
- Use Brightness_adjust_dB to move the whisper target brighter or darker relative to the built-in reference curve.
- Use a non-zero Random_seed when you need the same noise realization again.
- Run the script. The result is named
<source>_whispermorph.
Breathiness = 0 makes the wet target an exact copy of the tonal source before the final Safety stage. Full Whisper bypasses the morph curve and outputs the wet target for the whole duration.Presets
Presets override only the four whisper-target parameters shown below. They do not override Morph type, Morph curve, Random seed, Safety peak, visualization, or playback.
| Preset | LPC factor | Breathiness | Brightness adjust | Gate range |
|---|---|---|---|---|
| Custom | User value | User value | User value | User value |
| Gentle Whisper | 0.9 | 0.7 | −2 dB | 40 dB |
| Breathy Whisper | 1.0 | 1.0 | +2 dB | 40 dB |
| Harsh Whisper | 1.2 | 0.9 | +4 dB | 40 dB |
| ASMR Style | 1.1 | 0.6 | −3 dB | 35 dB |
Whisper-target controls
LPC order
The base order is round((2 + sampleRate/1000) × LPC_order_factor), then clamped to 10–50. The factor itself is clamped to 0.5–2.0. At 44.1 kHz and factor 1.0, the order is 46.
Praat's To LPC (burg) is used with a 25 ms analysis window, 5 ms time step, and 50 Hz pre-emphasis. Because this command models the spectrum up to the Sound's Nyquist frequency, the result should be understood here as a resynthesis filter, not as a direct formant measurement.
Breathiness
Breathiness is clamped to 0–1. At 1, the target is fully the noise-excited LPC branch. Between 0 and 1, the script linearly blends that target with the unchanged source channel, then matches the result to the source channel's average intensity. At 0, the script special-cases the endpoint and copies the source channel exactly.
Reference whisper EQ and Brightness
The LPC-filtered noise is shaped by a fixed, piecewise spectral EQ inherited from the v1.2 sound design. Brightness_adjust_dB = 0 is not a flat EQ. It means “use the v1.2 reference curve unchanged.” The adjustment is added to the two main positive bands:
| Frequency region | Gain |
|---|---|
| < 354 Hz | −24 dB |
| 354–707 Hz | +12 dB + Brightness adjust |
| 707–2828 Hz | +24 dB + Brightness adjust |
| 2828–11314 Hz | +12 dB + Brightness adjust |
| ≥ 11314 Hz | −6 dB |
The user adjustment is clamped to −18…+18 dB. Frequency regions above Nyquist simply do not occur for lower-rate input.
Relative intensity envelope and gate
Each source channel is analysed with To Intensity: 100, 0.01, "yes". The maximum measured intensity becomes 0 dB, and every other frame becomes its dB difference below that maximum. Frames more than Gate_range_dB below the maximum are assigned −300 dB, effectively silencing the wet target there. Praat's IntensityTier multiplication interprets these values as relative dB gains.
The shaped full-noise target is then globally scaled to the source channel's average intensity. This preserves the intended relative envelope while aligning the overall wet level with that channel.
Random seed
Random_seed = 0 uses an unpredictable Gaussian-noise realization. Any non-zero integer initializes the generator reproducibly. The same seed and settings produce the same result; channels are generated sequentially from the same seeded generator.
Morph system
The morph variable m is the wet/whisper weight. Output is a linear-amplitude crossfade:
This is not an equal-power crossfade; correlated dry and wet signals can therefore sum differently at intermediate values.
| Morph type | Linear trajectory before curve shaping |
|---|---|
| Dry to Wet | 0 → 1 across the full duration |
| Wet to Dry | 1 → 0 across the full duration |
| Dry-Wet-Dry | 0 → 1 → 0, with the peak at the midpoint |
| Wet-Dry-Wet | 1 → 0 → 1, with the minimum at the midpoint |
| Full Whisper | m = 1 throughout; curve selection is irrelevant |
Morph curves
| GUI choice | Implementation | Behavior |
|---|---|---|
| Linear | m = u | Direct trajectory. |
| Smooth (cosine) | m = 0.5 − 0.5 cos(πu) | Zero slope at both ends. |
| Exponential | m = u² | Square-law curve. Despite the GUI label, this is quadratic rather than a mathematical exponential function. |
Input & output behavior
| Property | Behavior |
|---|---|
| Selection | Exactly one Sound. |
| Minimum duration | 0.1 s. |
| Silent input | The script exits if the complete input peak is zero. A silent individual channel remains silent. |
| Channels | Arbitrary channel count preserved; every channel gets its own LPC analysis and whisper target. |
| Sample rate | Preserved. |
| Duration | Preserved. |
| Start time | Preserved. Processing is internally shifted to time 0 and restored afterward. |
| Dry path | Exact unmodified source samples before the final Safety stage. |
| Spectrum conversion | The reference whisper EQ uses To Spectrum: "no", avoiding power-of-two padding/cropping. |
| Safety peak | 0 disables it. Otherwise, the output is attenuated only when its peak exceeds the requested value; quieter outputs are never boosted. |
| Output name | <source>_whispermorph |
Visualization
When enabled, v1.4 draws the AudioTools suite-standard 8-inch page:
- Input waveform.
- Output waveform.
- Input and output spectrograms, up to min(8 kHz, Nyquist).
- The actual whisper-mix curve used by the selected morph type and curve.
- A summary strip with LPC order, breathiness, brightness, gate, channel count, sample rate, start time, peaks, and Safety status.
Notes & limitations
- Creative model: replacing excitation with Gaussian noise is a useful source-filter transformation, but real whisper production involves articulatory and aerodynamic changes that this script does not model.
- LPC is not formant tracking here: the script never reports F1/F2/F3 values. Its high-order LPC model follows a broader time-varying spectral envelope.
- Source dependence: clean speech or singing with a clear spectral envelope usually gives the most recognizably voice-like results; other sounds can still be used creatively.
- Brightness 0 dB is a reference offset: it does not bypass the built-in whisper EQ.
- Stochastic target: with seed 0, repeated runs can differ. Use a non-zero seed for controlled comparison or reproducible rendering.
- Safety can change exact endpoints: if the final peak exceeds the Safety setting, the complete output is uniformly attenuated.