Ribbon Shimmer — User Guide
Exponentially spaced feed-forward shimmer taps with polarity texture, deterministic timing jitter, high-frequency sparkle and true wet/dry mixing.
What this does
Ribbon Shimmer creates a dense shimmer field from a feed-forward bank of delayed copies of the source. Delay times are exponentially distributed between a minimum and maximum delay, small deterministic jitter prevents a perfectly regular pattern, selected taps invert polarity, and a first-difference term adds high-frequency sparkle.
The output keeps the source sample rate and channel count, appends a silent tail, and applies a cosine fade only inside that added tail. Stereo receives separate left/right tap plans; other channel counts use the same left/mono plan on each channel.
Quick start
- Select exactly one Sound object.
- Run
Ribbon_Shimmer.praat. - Choose a preset or Custom.
- Set Wet_dry_percent: 0 = dry only, 100 = shimmer taps only.
- Optionally enable visualization and playback, then click OK.
source duration + tail duration. Even at 0% wet, the output therefore includes the requested silent tail.Presets
| Preset | Tail | Delays | Base amp | Delay range | Decay | Sparkle | Fade |
|---|---|---|---|---|---|---|---|
| Subtle | 0.3 s | 50 | 0.16 | 12–800 ms | 0.965 | 0.20 | 0.8 s* |
| Medium | 0.5 s | 72 | 0.24 | 15–1350 ms | 0.955 | 0.25 | 1.0 s* |
| Heavy | 0.8 s | 90 | 0.30 | 12–1800 ms | 0.945 | 0.30 | 1.4 s* |
| Extreme | 1.2 s | 100 | 0.38 | 10–2500 ms | 0.935 | 0.35 | 1.8 s* |
*The effective fade is capped to the tail duration, so it cannot attenuate the source region.
Presets override the effect and fade parameters above; Wet_dry_percent, visualization and playback remain user-controlled.
Parameters
| Parameter | Default | Meaning |
|---|---|---|
| Tail_duration_s | 0.5 | Silent extension appended before rendering the shimmer. |
| Number_of_delays | 48 | Number of feed-forward taps. Internally rounded and kept at least 1. |
| Base_amplitude | 0.24 | Starting tap coefficient; internally limited to 0…0.99. |
| Min_delay_s / Max_delay_s | 0.015 / 1.35 | Bounds for the exponential delay distribution. Bounds are reordered if entered backwards and kept at least two samples. |
| Decay_factor | 0.955 | Tap amplitude multiplier: base × decay^k; internally limited to 0…1. |
| Sparkle_amount | 0.25 | Amount of one-sample first-difference enhancement added to each delayed tap; internally limited to 0…2. |
| Wet_dry_percent | 60 | Linear dry/effect crossfade, clamped to 0…100%. |
| Fadeout_duration_s | 1.0 | Cosine fade length, capped to the appended tail. |
Tap plan and processing
Every third left tap is polarity-inverted. For stereo, the right plan is decorrelated: its delay bounds, base amplitude, decay and sparkle are slightly different; right jitter is ±2 ms and every fourth right tap is inverted.
The internal random seed is fixed at 20260814. Therefore the tap plan is reproducible for the same settings, and Praat's global RNG is returned to unpredictable operation afterwards.
High-frequency sparkle uses a one-sample difference of the delayed source: it emphasizes rapid changes without introducing a separate filter stage.
Channels, duration and level
- Mono: one shimmer plan is rendered.
- Stereo: left and right use separate deterministic tap plans, then are recombined.
- 3+ channels: channel count is preserved; the shared left/mono tap plan is applied independently by row.
- Duration: source duration + effective tail duration.
- Sample rate: preserved.
- Peak protection: if final absolute peak exceeds 0.98, the whole result is scaled down to 0.98. Quiet signals are never boosted.
Visualization
The display shows the dry waveform, the full shimmer output including the tail, the realized left/mono tap map, and a summary strip. The tap map uses the same deterministic jittered delays and polarities used for rendering, so it is a QC view of the actual plan rather than an idealized curve.
The waveform panels use a fixed -1…+1 amplitude range, making source/output level changes directly visible.
Output
Object name: <source>_ribbon_<Custom|Subtle|Medium|Heavy|Extreme>.
The result object remains selected and is played when Play_result is enabled.