Beat Repeat — User Guide
Tempo-grid stutter processing: selects a beat-aligned source slice, repeats it with optional exponential level decay and short edge fades, then inserts the repeated section back into the source.
What this does
Beat Repeat takes a short source slice whose duration is derived from BPM and a musical note value, creates a chain of repeated copies, and replaces part of the original Sound with that chain. The first copy is unchanged in level; later copies can decay by Amplitude_decay^(repeat-1).
The source slice is extracted with a rectangular window, so its attack and spectral content are not softened by a full-duration window. If Fade_repeats is enabled, only short fades are applied at the two edges before the slice is copied.
What is beat repeat?
A beat-repeat effect captures a short rhythmic slice and plays that slice several times in succession. The repeated unit is usually tied to the musical grid — for example a 1/16, 1/8, triplet, or dotted value — so the result behaves as a tempo-related stutter rather than an arbitrary edit.
Quick start
- Select exactly one Sound object.
- Run
Beat_Repeat.praat. - Enter the source tempo in Bpm.
- Choose a preset or select Custom.
- Choose the rhythmic slice length with Note_value.
- Choose how the source beat is selected: Specific, Random, Beat range, or Auto.
- Set the number of repeats and amplitude decay.
- Leave Skip_silence on if silent candidate slices should be avoided.
- Optionally enable Fade_repeats for short edge fades.
- Click OK. The result is created as
<source>_beatRepeat_<presetName>.
Presets
Named presets override only the note value, repeat count, amplitude decay, and — where listed — fade settings. BPM, beat-selection mode, silence settings, visualization, and playback remain user-controlled.
| Preset | Note value | Repeats | Decay | Fades |
|---|---|---|---|---|
| Stutter 1/16 | 1/16 | 4 | 1.00 | Off |
| Fast Stutter 1/32 | 1/32 | 8 | 1.00 | Off |
| Slow Repeat 1/4 | 1/4 | 4 | 0.85 | On, 20 ms requested |
| Triplet Fill | 1/8 triplet | 6 | 0.95 | Off |
| Decaying Echo | 1/8 | 8 | 0.70 | On, 10 ms requested |
| Glitch Burst | 1/32 | 16 | 0.95 | Off |
Tempo & note values
The script counts only beat-grid starts from which the complete chosen slice fits:
This prevents a late selection from being silently moved backward off the beat grid.
Beat selection modes
The requested beat is clamped to the valid range. With silence skipping on, a silent request searches outward in the order +1, -1, +2, -2, and so on until a non-silent candidate is found.
With silence skipping on, selection is uniform over all non-silent candidate beats. With silence skipping off, the legacy behavior chooses randomly from beats 2 through N-1 when possible, otherwise beat 1.
The user-defined range is the section that will be replaced. The source slice is normally taken from the range start; with silence skipping on, it moves to the first non-silent candidate inside the range. The replacement range itself does not move.
The nominal location is 1 second into the Sound, or 25% of the duration when the Sound is shorter than 2 seconds. This time is converted to a beat index. If that candidate is silent, the search goes forward first and then backward.
Silence-aware selection
Before choosing a source beat, the script measures the RMS of every valid candidate slice. Each measurement covers the actual selected note duration, not an entire quarter-note beat.
The default threshold is -40 dB relative to amplitude 1.0. For normally scaled digital audio, this corresponds to the familiar full-scale reference convention. The scan is performed even when Skip_silence is off so the visualization and diagnostics can still report silent candidates.
Parameters
| Parameter | Default | Behavior |
|---|---|---|
| Preset | Custom | Custom or one of six named settings. |
| Bpm | 120 | Must be greater than zero. Defines the beat grid. |
| Note_value | 1/16 | One of 12 standard, triplet, or dotted rhythmic values. |
| Beat_selection_mode | Specific beat number | Specific, Random, Beat range, or Auto. |
| Specific_beat | 4 | Requested source beat in Specific mode; clamped to valid candidates. |
| Beat_range_start | 2 | First beat of the replacement range. |
| Beat_range_end | 4 | Last beat of the replacement range; start/end are swapped if entered in reverse order. |
| Num_repeats | 4 | 1–512 copies of the selected slice. |
| Amplitude_decay | 0.9 | 0–1. Repeat i has gain decay^(i-1). The first repeat is always 1.0. |
| Skip_silence | On | Avoids candidate slices whose RMS is below the threshold. |
| Silence_threshold_dB | -40 | RMS threshold expressed in dB relative to amplitude 1.0. |
| Fade_repeats | Off | Applies short fades to the source slice before it is copied. |
| Fade_duration_s | 0.01 | Requested fade duration. The applied fade is min(requested, 0.3 × sliceDuration). |
| Draw_visualization | On | Draws Source, Beat-repeat map, Output, and Summary. |
| Play_result | On | Plays the result after processing. |
Visualization
The visualization is organized as a direct description of the transformation:
- Source: the original waveform, with the selected source slice highlighted in orange. In Beat Range mode, purple dashed boundaries show the replacement range.
- Beat-repeat map: candidate slices are shown as blue (active) or grey (silent); orange marks the selected source beat and the requested range. The lower lane shows the repeat chain, with bar height equal to
decay^(repeat-1). - Output: the rendered result, with the repeated region highlighted.
- Summary: preset, BPM, note value, source beat, repeat count, decay, silence settings, fades, duration change, and final peak.
Source and output waveforms share the same amplitude scale. Multichannel Sounds are converted to mono only for drawing; audio processing itself preserves the source channel count.
Output behavior
For Specific, Random, and Auto modes, the selected note-length slice is replaced by Num_repeats copies of that same slice:
In Beat Range mode, the user-defined beat range is removed and replaced by the repeated chain. The source slice may come from a later non-silent beat inside that range:
- The output keeps the source channel count.
- The assembled Sound is zero-based even when the input Sound has a non-zero time origin.
- There is no final normalization or safety ceiling. High source levels can therefore remain high; however, the repeats are concatenated rather than overlapped, so their amplitudes are not summed with each other.
- The output is named
<source>_beatRepeat_<presetName>.