Reich Generator
Composing with repetition, phase shifting, and temporal counterpoint in Praat.
The musical idea: Steve Reich and phase shifting
Reich Generator takes its name from Steve Reich and the phase-shifting processes that became central to his early music. In It's Gonna Rain (1965) and Come Out (1966), short fragments of recorded speech become repeating musical material. As initially aligned repetitions gradually move apart in time, previously unnoticed rhythms, accents, and auditory groupings emerge. The source does not need to change for the listener's perception of it to change.
Reich subsequently brought this process into instrumental performance in Piano Phase (1967). Two pianists begin with the same repeated figure; one gradually moves ahead while the other maintains the pulse, producing successive combinations of the same notes. The process itself becomes audible as musical form.
Reich Generator offers two approaches to this question. Single (Classic) explores gradual displacement between two versions of one pattern, close to the original phase-shifting principle. Dual Locked Loops extends the exploration to two different source fragments with independent loop durations and playback rates. The latter is better understood as temporal counterpoint between autonomous processes rather than a literal reconstruction of Reich's phase pieces.
Two approaches to composition
One pattern, gradually displaced
The script finds an active passage in the selected Sound and turns it into a repeating loop. One voice remains at its original loop speed, while a second voice moves gradually ahead. The time it takes to complete a relative phase cycle is controlled by the composer.
An optional third, non-drifting voice can reinforce or transform the sonority. Pitch intervals and subtle stochastic pitch perturbations offer additional textural possibilities.
Listen for: emerging subdivisions, displaced syllables, changing rhythmic accents, and alternation between clarity and complexity.
Two patterns, two autonomous clocks
Two different, non-overlapping fragments from the same recording become two independent looping voices: Unit A and Unit B. Each has its own duration, playback rate, and starting position. Their relative timing evolves through repetition.
By default A is heard on the left and B on the right, allowing each process to remain individually recognizable. Changing the stereo separation lets the composer bring them into a shared sound field.
Listen for: changing coincidences between attacks, call-and-response patterns, overlapping speech gestures, and longer cycles formed from unequal repetitions.
How the two units interact
Independent rate and start position
Left at full stereo separation
Independent rate and start position
Right at full stereo separation
In Dual mode there is no need to duplicate either source fragment to create phasing. Even when both units play at 100% speed, different loop lengths can yield a continually changing relationship. The composer can also specify a target relative cycle, allowing the rate of one unit to be derived from the other.
Compositional possibilities
Repetition can reveal features that a single hearing conceals. Rather than treating the tool as an audio effect, try approaching it as a way to compose with duration, recurrence, difference, and listening.
Speech becomes rhythm
Select a brief spoken phrase, consonant cluster, or breath. In Single mode, let two repetitions gradually separate; listen for new rhythmic and phonetic combinations. Compare a short phase cycle with one that unfolds very slowly.
Counterpoint between gestures
In Dual mode, choose two different phrases or instrumental attacks. Their repetitions may interrupt, answer, or partially mask one another. Change only their starting offsets to explore how the same two materials produce different openings.
Unequal periods
Lock two fragments of different lengths and leave both rates at 100%. Their relationship will move naturally. Small differences can produce gradual evolution; pronounced differences may create quickly shifting rhythmic alignments.
Controlled convergence
Use Target Relative Cycle to determine how long a complete relative loop-phase rotation should take, and whether B gains on or falls behind A. Long cycles invite attention to barely perceptible movement; short cycles reveal recurring pattern changes.
Space as a listening instrument
Keep Dual separation at 100% to hear one process per channel, then move toward the center. Separation makes individual strands legible; a shared stereo field encourages the ear to combine them into larger rhythmic figures.
Harmonic shadows and instability
In Single mode, use the optional third voice and pitch-interval choices to add a sustained harmonic identity to the repetitive texture. Flutter can introduce variation within the process, especially with pitched or voiced source material.
Three starting experiments
| Experiment | Suggested approach | What to listen for |
|---|---|---|
| A phrase gradually dissolves | Single (Classic); short vocal loop; unison pitch; 1–3 minute phase cycle. | The moment recognizable language becomes rhythm, and the moments when it seems to re-form. |
| Two independent pulses | Dual; two distinct attacks or phrases; different loop lengths; both rates 100%; full stereo separation. | Emergent accents and the shifting balance between individual patterns and a combined meter. |
| A slow temporal canon | Dual; related but different phrases; Target Relative Cycle set to several minutes; compare starting offsets. | Long-range movement, anticipation, and changing correspondences between the two materials. |
These are listening suggestions, not presets. Their results depend on the recorded material and the actual lengths of the selected loops.
Getting started
Select exactly one Sound object in Praat and run Reich_Generator.praat. Choose a Mode in the main dialog, and set the total output duration.
Single (Classic)
- Choose one of the four presets or Manual (Settings below).
- Set
Total_Duration_min. In Manual, also choose a loop-length range and phase-cycle duration. - Adjust Voice 2 pitch, Voice 3, start offset, or flutter as desired.
- Render and listen to the gradual shift between the repeating voices.
Dual Locked Loops
- Choose Dual Locked Loops in the main dialog.
- A second dialog presents two suggested, non-overlapping source regions. Keep or edit the start/end times, then confirm them with Render.
- Choose Independent Rates or Target Relative Cycle, and set starting positions and stereo separation.
- Listen first to the two channels separately, then to the complete stereo relationship.
Min_loop_sec and Max_loop_sec as a suggested length range. Edit their boundaries in the Dual dialog if you have particular musical gestures in mind. A non-zero Random_seed reproduces the same suggestions for the same source and settings.Controls and presets
Both modes share the output controls in the main form. The options for Single (Classic) are available there; Dual Locked Loops opens a separate dialog for its two independently repeating units.
Main form
| Control | What it shapes |
|---|---|
Mode | Single (Classic) or Dual Locked Loops. |
Preset | Four named starting points and a Manual option for Single (Classic). |
Min_loop_sec / Max_loop_sec | Loop-length range for Single (in Manual), and the range used when suggesting regions in Dual. |
V2_Interval | Single: pitch transformation of the drifting voice (Unison, fifth up, octave down or up). |
V3_Mode / V3_Level_dB_relative | Single: optional static anchor in unison or an octave, and its relative intensity. |
Cycle_Duration_min | Single: time for one relative loop-phase cycle. |
Start_Offset | Single: begin aligned, half a loop apart, or with a random offset. |
Flutter_Amount_st | Single: Gaussian pitch perturbation measured in semitones. |
Total_Duration_min | Duration of the finished stereo Sound (both modes). |
Random_seed | 0 = fresh random choices; non-zero = reproducible source choices and applicable random processes. |
Create_polar_phase_wheel / Play_result | Generate the process visualization; automatically play the resulting Sound. |
Single (Classic) presets
| Preset | Musical orientation | Loop / phase cycle |
|---|---|---|
| Classic Reich (Speech / Unison) | Unison phasing of a short repeated fragment. | 0.5–1.0 s / 1 min |
| Deep Space (Sub-Bass Shadow) | A slow cycle with a static low-octave layer. | 2.0–4.0 s / 5 min |
| Holy Trinity (5th + High Anchor) | Drifting fifth with a static high-octave layer. | 0.8–1.2 s / 3 min |
| Broken Tape (Flutter + Random Offset) | More pronounced pitch instability and displaced entry. | 0.4–0.9 s / 1.5 min |
Presets set the relevant Single-mode loop, pitch, cycle, offset, and flutter choices. They do not override the total output duration or the Voice 3 level.
Dual Locked Loops dialog
| Control | Compositional role |
|---|---|
Dual_A_Start_sec / Dual_A_End_sec | Beginning and end of the source fragment repeated by Unit A. |
Dual_B_Start_sec / Dual_B_End_sec | Beginning and end of the different fragment repeated by Unit B. |
Dual_Timing | Independent Rates or Target Relative Cycle. |
Dual_A_Rate_percent / Dual_B_Rate_percent | Each loop's playback speed, 50–200% (100% = original speed). In Target Relative Cycle, Unit B's entered rate is replaced by a calculated value. |
Dual_Target_Cycle_min | Desired duration of one relative cycle between the units, when Target Relative Cycle is selected. |
Dual_Drift_Direction | Choose whether B gains on A or falls behind A in relative loop position. |
Dual_A_Start_Offset_percent / Dual_B_Start_Offset_percent | Where each voice begins inside its own loop, from 0 to 100%. |
Dual_Stereo_Separation_percent | 0% = both centered; 100% = A left only and B right only (default). |
Dual_B_Level_dB | Unit B's level relative to Unit A before final normalization. |
Reading the visualizations
When Create_polar_phase_wheel is enabled, Praat draws an analytical picture of the temporal process. The figure complements listening; its curves are descriptions of repeating-loop positions, not measurements of spectral interference or loudness.
Single (Classic)
The main Phase Wheel traces the relative position of the drifting voice against the fixed voice. Its changing radius and color provide a visual account of the phase cycle. Below it, a source strip identifies the chosen fragment, a timeline shows the changing phase across the render, and the summary reports the main settings.
Dual Locked Loops
One Phase Wheel represents the relationship between A and B. Two accompanying timeline lanes show the individual loop positions; a source waveform highlights both locked fragments; and a relative-phase trajectory shows how their relationship unfolds across the whole composition.
In Dual mode, 0° means that A and B occupy the same fraction of their respective loops. It does not mean that the source waveforms are identical, in acoustic phase, or necessarily sounding together on an equivalent attack.
Listening and practical notes
- Let the process be heard. Very short renders may capture only the beginning of a long phase cycle. The output duration and relative cycle duration are separate compositional decisions.
- Choose material deliberately. Clear attacks emphasize rhythm and alignment; speech foregrounds phonetic ambiguity; sustained or noisy sounds emphasize texture.
- Playback rate also changes pitch. Dual rate adjustments use resampling, not pitch-preserving time stretching. Changing speed therefore changes both loop duration and pitch.
- Keep listening spatially. At full Dual separation, A is isolated in the left channel and B in the right. Reducing the separation mixes their contributions across both channels using equal-power panning.
- Confirm selected material. In Dual, proposed source regions can be edited before rendering. Both regions must be non-overlapping and at least 0.1 seconds long; fully silent regions are rejected.
- Understand the source conversion. Both modes create loops from a mono analysis signal. If a multichannel source nearly cancels when averaged, the script uses its strongest channel instead.
- Output and naming. Each render produces one peak-normalized stereo Sound, leaving the original unchanged. Single outputs use
<source>_ReichGen_<preset>; Dual outputs use<source>_ReichGen_Dual.
For a stronger sense of compositional development, try changing one variable at a time: keep the material constant while adjusting the cycle duration, or keep the timing constant while changing the locked fragments. The differences heard between these results can become the structure of a larger work.
Further listening and references
Reich Generator is inspired by the idea of the audible process in Steve Reich's music. These works provide especially useful listening points:
- Steve Reich, It's Gonna Rain (1965). Speech fragments and repeating tape loops reveal how gradual temporal displacement can reorganize language into musical rhythm.
- Steve Reich, Come Out (1966). Recorded voice is transformed perceptually through repetition, phase shifting, and increasing textural complexity.
- Steve Reich, Piano Phase (1967). An instrumental demonstration of one repeating pattern moving gradually against another: the changing relationship is the composition.
References: Steve Reich, works catalogue; Steve Reich, notes on Piano Phase; Phase Shifting, Open Music Theory.