Draw Intensity Envelope — User Guide
Draw a gain contour by hand over a selected Sound, edit it interactively, and apply the curve as true relative gain in decibels without external software or Python.
What this does
Draw Intensity Envelope turns the Praat Demo window into an interactive gain-envelope editor. The original waveform is shown above a drawing panel that shares the same time axis. Click points into the lower panel, move existing points vertically, undo edits, then apply the completed curve to the selected Sound.
The vertical axis is expressed in relative dB gain: 0 dB leaves the Sound unchanged, positive values amplify it, and negative values attenuate it.
IntensityTier, then the Sound and tier are multiplied with scaling disabled. The values you draw therefore act as actual relative gain values rather than as an automatically normalized envelope.Sound → drawn envelope
Quick start
- Select exactly one Sound object.
- Run
Draw_Intensity_Envelope.praat. - Set Range_dB to the vertical drawing range you want, such as ±30 dB.
- Leave Prevent_clipping enabled if you want the script to protect the result from peaks above full scale.
- Click inside the lower panel to add gain points.
- Click near the time of an existing point to move that point vertically instead of adding another one.
- Press U to undo the last add or move.
- Press Enter to apply the envelope and play the result.
- Press Esc to cancel without creating a new Sound.
Interactive editor
Adding points
A click inside the gain panel creates a control point at that time and dB value. Points are kept internally in chronological order, so you can draw them in any sequence.
Moving points
If you click close to the time coordinate of an existing point, the script keeps its time and replaces its dB value. This makes vertical adjustment fast without creating duplicate points.
Undo
U reverses the most recent add or move. Undo history remains available throughout the drawing session.
Outside the first and last point
The first gain value is held from the beginning of the Sound to the first point, and the last gain value is held from the final point to the end of the Sound. The editor shows these constant regions as dotted extensions.
Processing method
After the drawing is accepted, the script creates an IntensityTier on the Sound's original time domain. Each user point becomes one tier point after accounting for the Sound's actual start time.
The Sound and tier are then combined with Praat's multiplication command using scaling disabled:
This is important because the envelope represents relative dB gain. The script does not normalize the Sound simply because an envelope has been applied.
| Drawn value | Meaning |
|---|---|
| 0 dB | Original level is retained. |
| +6 dB | The local level is amplified by approximately 6 dB. |
| −6 dB | The local level is attenuated by approximately 6 dB. |
| Positive / negative curves | Create swells, fades, accents, dips, long-form dynamics, or manually drawn amplitude gestures. |
Controls
| Control | Default | Function |
|---|---|---|
| Range_dB | 30 dB | Sets the editor's vertical range to ± this value. It changes the available drawing range, not the Sound before processing. |
| Prevent_clipping | On | If the processed peak exceeds 0.99, rescales the entire result to a peak of 0.99. |
Editor commands
| Action | Function |
|---|---|
| Click | Add a new point or move an existing point at nearly the same time. |
| U | Undo the last add or move. |
| Enter | Apply the envelope and play the result. At least one point is required. |
| Esc | Cancel. No output Sound is created. |
Peak protection
The envelope itself is applied without normalization. After processing, the script measures the raw output peak.
When Prevent_clipping is enabled:
When the guard is disabled, peaks above ±1 are left unchanged and the Info window reports a clipping warning.
Outputs
| Output | Purpose |
|---|---|
<source>_drawnIntensity | The processed Sound with the hand-drawn gain contour applied. |
| Demo-window final view | Overlays input and output waveforms and keeps the envelope visible for immediate visual comparison. |
| Info report | Lists every envelope point, input/output peaks, whether peak protection was triggered, RMS change, and the output name. |
| Playback | The processed Sound is played automatically after the envelope is applied. |
The temporary IntensityTier is removed after processing. The original Sound remains unchanged.
Reading the display
The interactive display follows the AudioTools visual language and is divided into four functional regions:
- Title strip — source name, duration, channel count, and dB range.
- Waveform panel — input waveform during editing; input and output are overlaid after processing.
- Envelope panel — time on the x-axis and gain in dB on the y-axis, with a solid 0 dB reference and dotted gain grid.
- Summary strip — keyboard instructions, current point count, and status of the most recent edit.
Notes & limitations
- One Sound per run. The script requires exactly one selected Sound.
- One shared envelope for all channels. Stereo and multichannel Sounds keep their channel structure, but the same gain contour is applied to every channel.
- Relative gain, not loudness normalization. The tool does not target LUFS, RMS, perceptual loudness, or a final loudness standard.
- Peak guard is global. When activated it rescales the entire output, not only the samples that exceed the threshold.
- Point timing is manual. The tool does not automatically detect onsets, beats, phrases, or intensity events.
- Native Praat implementation. No Python, subprocess, or external DSP engine is required.
Citation
Praat AudioTools: Cohen, S. (2026). Praat AudioTools: An Offline Analysis–Resynthesis Toolkit for Experimental Composition.