Fade-Out — User Guide

Applies a configurable fade-out envelope to one Sound, with full-duration or tail-only fades, five curve shapes, optional whole-output soft waveshaping, explicit normalization, playback, and visualization.

Author: Shai CohenVersion: 1.2 (2026)Category: DynamicsInput: exactly one SoundLicense: MIT
Contents:

What this does

The script copies the selected Sound and multiplies it by a fade-out gain envelope. Before the fade begins, gain remains 1.0. Inside the fade region, the selected curve falls toward zero. A partial fade covers only the final N seconds; a full-duration fade spans the entire Sound.

Actual Sound time is preserved. Version 1.2 computes the fade from the Sound's true xmin/xmax, so non-zero-start Sound objects are handled correctly.

An optional soft compression waveshaper is applied to the whole copied Sound before the fade-out. Optional peak normalization is a separate final stage and is off by default.

Quick start

  1. Select exactly one Sound object.
  2. Run Linear_Fade-Out.praat.
  3. Choose a preset or Custom.
  4. Choose the curve and whether the fade spans the full Sound or only its final N seconds.
  5. Optionally enable soft compression and/or final normalization.
  6. Leave Draw_visualization and Play_result enabled if desired, then click OK.

Fade curves

Let φ = (x − fadeStart) / fadeLen within the fade region, so φ runs from 0 to 1 in continuous time.

CurveEnvelope inside fadeCharacter
Linear1 − φConstant-rate fall.
Exponential(base^(1−φ) − 1) / (base − 1)For base > 1, holds level longer and drops more strongly toward the end.
Logarithmic1 − ln(1 + φ(base−1)) / ln(base)For base > 1, drops quickly and then approaches zero more gradually.
S-Curve(1 + cos(πφ)) / 2Smooth slope at both ends.
Quarter-cosinecos(πφ/2)Gentle initial decline followed by a stronger fall toward zero.
Curve_base: used only for Exponential and Logarithmic. Values below 1 are rejected. Curve_base = 1 is handled explicitly as the exact linear limiting case.

Presets

Preset selection overwrites the parameters listed below. Parameters not mentioned by a preset retain the value chosen in the form.

PresetCurveFade rangeSoft compression
CustomForm valuesForm valuesForm values
Natural DecayQuarter-cosineFull durationOff
Hard CutExponential, base 30Final 10% of Sound durationOff
Cinematic CloseS-CurveFull durationOn, denominator 6
Slow DissolveLogarithmic, base 8Full durationOff
Tail TrimLinearFinal 3 s, clamped to Sound durationOff
Compressed ExitS-CurveFull durationOn, denominator 2
Normalize_output is not changed by presets. Its default remains off.

Parameters

ParameterDefaultBehavior
PresetCustomSelects one of the configurations above.
Curve_shapeQuarter-cosineLinear, Exponential, Logarithmic, S-Curve, or Quarter-cosine.
Curve_base10Used only by Exponential/Logarithmic; must be ≥ 1. Base 1 gives a linear fade.
Full_durationOnWhen on, the fade spans the complete Sound.
Fade_seconds3.0 sUsed only when Full_duration is off. The fade covers the last N seconds; longer values are clamped to the Sound duration.
Apply_compressionOffApplies the soft waveshaper to the whole copied Sound before fading.
Compression_denominator4.0Positive shaping constant C; higher values produce less processing. Presets use 2 or 6; the form suggests roughly 2–8.
Normalize_outputOffIf enabled and output is non-silent, scales sample peak to 0.99 after compression and fade.
Draw_visualizationOnDraws the diagnostic page in Praat Picture.
Play_resultOnPlays the processed Sound.

Soft compression

When enabled, the script first applies the memoryless waveshaper

y = x / (1 + x² / C)

where C = Compression_denominator. This reduces larger sample magnitudes more strongly than small ones for the normal parameter ranges used by the presets. It is not an envelope-following compressor: there is no threshold, ratio, attack, release, detector, or makeup gain.

The waveshaper acts on every sample in the Sound before the fade stage. It is therefore a global timbral/dynamic modification, not a processor restricted to the fade-out region.

Processing details

1. Copy source → <source>_fadeOut 2. If Apply_compression: sample = x / (1 + x²/C) 3. Compute fade region [srcEnd − fadeLen, srcEnd] 4. Before fadeStart: gain = 1.0 5. Inside fade region: multiply by selected curve 6. If Normalize_output and output peak > 0: Scale peak to 0.99 7. Optionally visualize and play

The script preserves the source's channels, sampling frequency, duration, and actual time domain. The same time-varying gain law is applied to every channel.

Because normalization is off by default, both the soft compression and fade retain their natural level effect. Enabling normalization can raise or lower the entire processed result so its sample peak becomes 0.99.

Praat Sound samples are located at sample-center times. The continuous fade law reaches zero at the mathematical srcEnd, but the final stored sample usually occurs slightly before that boundary and therefore need not equal exact digital zero.

Visualization

The 8-inch Picture page contains:

The Original and Output waveform panels share the same amplitude scale. The envelope panel shows only the fade multiplier; any preceding waveshaping and final normalization are reported separately.

Output