Auto-Swell / Stereo Amplitude Modulator - User Guide

Stereo amplitude modulation for mono or stereo Sounds, with periodic, gated, stochastic, and single-arc envelopes.

Author: Shai Cohen Version: 1.3 (2026) Output: Stereo Sound
Contents:

What this does

Auto-Swell is a stereo amplitude modulator. It creates one modulation envelope for the left channel and one for the right channel, scales each envelope by the requested depth, multiplies the audio by those envelopes, and combines the two processed channels into a stereo Sound.

The processor accepts mono or stereo input only. Mono input is duplicated to stereo before processing. Stereo input is processed channel by channel. Sounds with more than two channels are rejected instead of silently discarding additional channels.

Core gain law: if the raw envelope is m(t) in the range 0...1 and depth is d in the range 0...1, the applied gain is g(t) = (1-d) + d*m(t). Therefore 0% depth gives a constant gain of 1, while 100% depth uses the raw envelope directly.

Quick start

  1. Select exactly one mono or stereo Sound object.
  2. Run Auto-Swell_v1.3.praat.
  3. Choose a preset or use Custom.
  4. Set the envelope shape, rate, depth, and stereo relationship.
  5. Leave Normalize output on if you want the final stereo Sound peak-scaled to 0.95; turn it off if you want the modulation-induced level change preserved.
  6. The result is named <source>_swell_<ShapeName>.
Important: Normalize_output is not a limiter and is not attenuation-only. Praat's Scale peak: 0.95 scales the entire stereo result to a peak of 0.95, so it can either attenuate or amplify.

Presets

Preset selections overwrite the listed parameters. Parameters not mentioned by a preset remain at their form values, but may be irrelevant to that preset's shape or stereo mode.

PresetShapeRateDepthStereo behavior
CustomForm settingForm settingForm settingForm setting
Gentle TremoloSine0.3 Hz50%Identical L/R envelope
Fast TremoloSine6 Hz70%Identical L/R envelope
Rhythmic ChopPulse gate4 Hz100%Identical L/R; pulse width 50%
Stereo Ping-PongSine0.5 Hz90%Phase offset 180°
Polyrhythmic DriftSine0.4 Hz70%Right rate = left rate × 1.618
Textural ContrastLeft: Triangle0.5 Hz80%Right: Exponential rise
Single SwellRise-fallRate ignored95%Identical L/R envelope

Swell shapes

Shapes 1-9 and 11 are periodic. Shape 10 is stochastic. Shape 12 is one non-periodic arc across the entire file.

#ShapeImplemented envelopeSpecial behavior
1Sine0.5 + 0.5*sin(2*pi*rate*t + phase)Phase_start applies.
2TriangleLinear rise 0→1 over half a cycle, then fall 1→0.Phase_start applies.
3Sawtooth(rate*t + phaseCycles) mod 1Natural rising phase; Phase_start is ignored.
4Reverse sawtooth1 - ((rate*t + phaseCycles) mod 1)Phase_start is ignored.
5Square1 for first half-cycle, then 0.Fixed 50% duty cycle; Phase_start is ignored.
6Exponential rise1 - exp(-5*p), where p is cycle position.Resets each cycle.
7Exponential fallexp(-5*p).Resets each cycle.
8S-curveQuadratic ease-in/ease-out: 2*p^2 then 1-2*(1-p)^2.Periodic; not a cosine curve.
9Double peakabs(sin(2*pi*rate*t + phase))Absolute value creates two peaks per nominal cycle.
10Smoothed randomGaussian random values around 0.5, three smoothing passes, then full-envelope normalization to 0...1.Stochastic; no phase-addressable cycle.
11Pulse gate1 while cycle position is below Pulse_width, otherwise 0.Duty cycle is controlled by Pulse_width_percent.
12Rise-fall envelopeOne exponential rise over the first half of the file and one exponential fall over the second half.Ignores rate, phase offset, and Phase_start.
Smoothed random is not a mathematical random walk. The implementation generates Gaussian random samples, smooths them three times, and normalizes the resulting envelope. No random seed is set by the script.

Stereo modes

1. Mono (same both channels)

The right modulation envelope is an exact copy of the left modulation envelope. The output is still stereo. On mono input, both audio channels are identical and remain centered. On stereo input, the source's existing L/R differences remain; they simply receive the same gain envelope.

2. Phase offset

Both channels use the same shape and rate, but the right envelope receives Phase_offset_degrees. This can create level-based left/right movement, especially when the source began as mono. Smoothed random and Rise-fall are rejected in this mode because they do not have a meaningful phase-addressable cycle.

3. Different rates

The left channel uses Swell_rate_Hz. The right channel uses Swell_rate_Hz * Right_rate_multiplier. The same shape is used on both sides. Smoothed random and Rise-fall are rejected because the mode requires a shape whose temporal behavior is meaningfully controlled by rate.

4. Different shapes

The left channel uses Swell_shape and the right channel uses Right_swell_shape, both at the left/base rate. This mode may use periodic, stochastic, or single-arc shapes. If a side uses Rise-fall, that side still ignores the rate parameter.

Parameters

ParameterDefaultActual behavior
PresetCustomSelects one of seven predefined configurations or leaves the form settings unchanged.
Swell_shapeSineLeft/base modulation shape.
Swell_rate_Hz0.5Positive. Period is 1/rate. Ignored by Rise-fall.
Depth_percent80Validated to 0...100. Sets the modulation gain range from 1-depth to 1.
Stereo_modePhase offsetSelects the relationship between left and right modulation envelopes.
Phase_offset_degrees90Positive; converted to radians. Used by Phase-offset mode on periodic shapes.
Right_rate_multiplier1.5Positive multiplier used only by Different-rates mode.
Right_swell_shapeTriangleUsed only by Different-shapes mode.
Phase_startStart at minimumApplies only to Sine and Triangle. Other shapes use their natural cycle start.
Pulse_width_percent50Validated to 0...100; used by Pulse gate. 0% is always off before depth scaling; 100% is always on.
Random_smoothness10Positive. Controls the sample offset used by the three smoothing passes: round(sr/(rate*smoothness)), clamped to 2...1000 samples.
Normalize_outputOnIf on, scales the completed stereo Sound to peak 0.95. This may amplify or attenuate.
Draw_visualizationOnDraws the source, L/R envelopes, result, and summary strip.
Play_resultOnPlays the final Sound after cleanup.

Processing details

INPUT exactly one mono or stereo Sound 1. PREPARE CHANNELS copy source mono input -> duplicate to stereo extract channels 1 and 2 2. GENERATE RAW ENVELOPES create left envelope from Swell_shape create/copy right envelope according to Stereo_mode 3. APPLY DEPTH g(t) = (1-depth) + depth * m(t) 4. APPLY AMPLITUDE MODULATION left_out(t) = left_in(t) * gL(t) right_out(t) = right_in(t) * gR(t) 5. COMBINE combine processed L/R channels to stereo name: <source>_swell_<ShapeName> 6. OPTIONAL PEAK SCALING if Normalize_output = yes: Scale peak to 0.95 7. CLEANUP / PLAY remove temporary envelope/channel objects select final Sound optionally play
Depth and normalization are separate operations. With Depth = 0%, the modulation stage itself is transparent, but if Normalize output is enabled the final Sound can still be rescaled to a 0.95 peak.

Visualization

The Picture window uses the Praat AudioTools standardized layout while retaining the processor-specific modulation views:

The waveform panels use Praat's own drawing scales; they are not a shared-amplitude before/after comparison. The modulation panels use the explicit 0...1 range.

Limits and cautions