Amplitude-Varying Ring Modulation — User Guide
Ring modulation with a moving carrier and a separate amplitude envelope. The carrier can remain fixed or follow a rising chirp, while a sinusoidal gain envelope adds slower or faster pulsing.
What this does
The script multiplies the selected Sound by a sinusoidal carrier, producing ring modulation. Instead of requiring a fixed carrier, the carrier frequency can rise over the duration of the sound. A second sinusoidal control changes the overall gain of the ring-modulated result, creating amplitude pulses at the chosen rate.
Input Sound → ring modulation by the carrier → amplitude envelope → optional peak normalization → output Sound
For a fixed carrier, ring modulation shifts spectral components into sum-and-difference sidebands around the carrier. When the carrier moves, those sidebands move with it. The amplitude envelope does not change the carrier trajectory; it simply scales the already ring-modulated signal over time.
Quick start
- In Praat, select exactly one Sound object.
- Run
Amplitude-Varying_Ring_Modulation.praat. - Choose a preset, or use Manual to keep the values entered in the form.
- Enable Peak_normalize_output only if you want the final result normalized to Scale_peak.
- Enable Draw_modulation to inspect the carrier-frequency trajectory and amplitude envelope.
- Click OK. The output is named
<source>_ringmod_<preset>.
How the modulation moves
Carrier-frequency trajectory
Carrier_frequency is calibrated as the instantaneous carrier frequency at t = 1 second from the start of the Sound. The sweep is controlled by Sweep_exponent.
| Sweep exponent | Carrier behavior | What this means |
|---|---|---|
| 1.0 | Fixed | The carrier stays at Carrier_frequency for the whole Sound. |
| 1.0–2.0 | Rising, concave-down trajectory | The frequency rises quickly near the beginning and then continues rising more gradually. |
| 2.0 | Linear frequency rise | The carrier starts at 0 Hz, reaches Carrier_frequency at 1 s, and reaches twice that value at 2 s. |
| > 2.0 | Accelerating frequency rise | The frequency increase becomes progressively steeper. At 3.0, the instantaneous frequency follows a quadratic rise. |
Amplitude envelope
Amplitude_rate sets how many gain cycles occur per second. Amplitude_center sets the middle of the gain range and Amplitude_depth sets its excursion around that center. The script clamps the depth when necessary so the resulting envelope remains within 0–1.
For example, center 0.5 and depth 0.5 produce a gain range of 0–1; center 0.8 and depth 0.2 produce a range of 0.6–1.0.
Presets
Presets override the five carrier/amplitude-modulation controls shown below. They do not override the output options: peak normalization, scale peak, playback, or visualization.
| Preset | Carrier | Exponent | AM rate | Center ± depth |
|---|---|---|---|---|
| Manual | Uses the values entered in the form. | |||
| Subtle Modulation | 100 Hz | 1.5 | 1 Hz | 0.7 ± 0.3 |
| Extreme Sweep | 500 Hz | 3.0 | 5 Hz | 0.5 ± 0.5 |
| Fast Pulsing | 200 Hz | 2.0 | 10 Hz | 0.6 ± 0.4 |
| Metallic | 440 Hz | 1.0 | 7 Hz | 0.8 ± 0.2 |
| Alien Voice | 150 Hz | 2.5 | 4 Hz | 0.5 ± 0.5 |
| Underwater Transmission | 80 Hz | 1.2 | 0.5 Hz | 0.6 ± 0.4 |
Parameters
| Parameter | Default | What it controls |
|---|---|---|
| Preset | Manual | Selects Manual or one of six preset parameter combinations. |
| Carrier_frequency | 250 Hz | Instantaneous carrier frequency at t = 1 s. With exponent 1.0 it is the fixed carrier frequency. |
| Sweep_exponent | 2 | Shapes the carrier-frequency trajectory. Values below 1 are clamped to 1. |
| Amplitude_rate | 3 Hz | Rate of the post-ring-modulation amplitude envelope. Values at or above Nyquist are clamped to 99% of Nyquist. |
| Amplitude_center | 0.5 | Center of the gain envelope. Values are clamped to 0–1. |
| Amplitude_depth | 0.5 | Excursion around the center. It is reduced automatically if necessary to keep the envelope within 0–1. |
| Peak_normalize_output | Off | If enabled, applies target peak normalization after modulation. |
| Scale_peak | 0.99 | Target peak used only when normalization is enabled. Values above 1 are clamped to 1. |
| Play_after_processing | On | Plays the processed Sound after completion. |
| Draw_modulation | On | Draws the carrier and amplitude-control trajectories in the Picture window. |
Output & channels
- Object name:
<source>_ringmod_<preset>. - Channels: preserved. The same carrier and amplitude envelope are applied to every channel, so the existing inter-channel timing and level relationships are retained through a common modulation law.
- Duration: unchanged.
- Sample rate: unchanged.
- Sound start time: preserved, but both modulators use time relative to the Sound start, so their phase always begins at the start of the selected object.
- Normalization: off by default. When enabled,
Scale peakperforms target peak normalization to the requested value.
Visualization
When Draw_modulation is enabled, the Picture window shows the control signals rather than a waveform comparison.
- Panel A — Carrier-frequency trajectory: instantaneous carrier frequency over time. A Nyquist warning region is shown when it falls inside the display range. If the trajectory continues above the plotted range, the curve stops at the display boundary rather than falsely appearing to flatten.
- Panel B — Post-ring-modulation amplitude envelope: the gain multiplier generated by Amplitude_rate, Amplitude_center, and Amplitude_depth.
- Status strip: output name and peak, normalization state, carrier start/end values, AM rate, aliasing status, and whether parameter adjustments were made.
The carrier plot is a control trajectory, not an output spectrum. The actual spectral result also depends on the input Sound.