Total Serialism Machine — User Guide
A serially organized audio-event generator. One numerical series, optionally transformed by inversion, retrograde and rotation, is normalized and read at different rotational offsets to control event duration, source position, pitch, gain and stereo pan.
What this does
Total Serialism Machine converts one selected Sound to a mono processing source, generates a sequence of event parameters from one transformed numerical series, and writes the resulting events into a stereo output canvas.
What “total serialism” means in this tool
The same normalized series controls several compositional dimensions through different rotational offsets. The implementation uses one shared row rather than a separate independent row for every parameter.
Quick start
- Select exactly one Sound object.
- Run
Total_Serialism_Machine.praat. - Choose Custom or one of the five named presets.
- Select Arithmetic, Permutation, or the built-in 12-tone row.
- Optionally apply inversion, retrograde and/or rotation.
- Set Num_events, event-duration limits, gap and pitch range.
- Run. The result is named
<source>_serial_<preset>.
Serial parameter mapping
After transformation, the working series is normalized:
For event i, five different rotational offsets are read from that same series:
| Parameter | Series offset | Mapping |
|---|---|---|
| Duration | +1 | Min_event + value × (Max_event − Min_event) |
| Source position | +3 | Normalized position inside the legal source-start range. |
| Pitch | +4 | Min_pitch_cents + value × pitchRange |
| Gain | +6 | Mapped linearly from −12 dB to 0 dB, then converted with 10^(dB/20). |
| Pan | +8 | 0 = full left, 1 = full right. |
If two offsets become identical modulo Series_length, those two parameters read the same row stream. The script reports such collisions in the Info window.
Series types & transformations
Arithmetic
Builds 1, 2, 3, …, N.
Permutation
Reads comma-separated numeric values from Series_values. Missing or invalid entries are replaced by their positional index; extra entries beyond Series_length are ignored. Repeated values are accepted but reported because the resulting row is then a numeric series rather than a true permutation.
12-tone row
The built-in row is:
Choosing this type forces the effective Series_length to 12.
Transformation order
Enabled operations are applied in this order:
Inversion reflects each numeric value around the row's minimum-plus-maximum sum. Retrograde reverses the row. Rotation applies a cyclic positional shift; rotation values wrap modulo Series_length.
Event synthesis
Source channel handling
All mono, stereo and multichannel inputs are converted to a private mono processing source. The original spatial image is therefore not retained. The final stereo field is generated anew from the pan values.
Source extraction
Each serial duration is an output duration. Before a pitched event is extracted, the script compensates for varispeed:
After varispeed resampling, the event is trimmed or silence-padded to exactly the serially assigned event duration. Pitch and output duration therefore remain independently controlled.
Pitch
Pitch uses varispeed:
Values within ±1 cent bypass this stage.
Gain
The event is multiplied by its series-derived linear gain before panning. Relative event-level differences are therefore preserved until the common final normalization stage.
Edge fade
Every event can receive a linear fade-in and fade-out:
The fade is omitted only when the effective fade is no longer than one sample.
Stereo pan
Each mono event is written to both output channels using constant-power gains:
Timing, gaps & overlap
The timeline follows event index directly:
The next onset is advanced by:
| Gap | Behavior |
|---|---|
| > 0 | Silence between events. |
| = 0 | Adjacent event spans. |
| < 0 | The next event begins before the previous event ends, creating real additive overlap in the stereo canvas. |
A negative custom gap is limited to no less than −0.9 × Min_event_ms, ensuring that event onsets continue to advance.
The allocated output duration is:
When the source is shorter than an event read
Pitch-up events may require more source material than their final output duration. If the source cannot supply the largest required extraction, the script builds one shared looped source in advance.
Successive source copies are joined using Concatenate with overlap. The loop overlap is:
Events that require the tiled source begin from a series-derived position within one original source-duration cycle. This keeps the requested event duration instead of shortening events when the source is very short.
Presets
| Preset | Events | Duration | Gap | Pitch range | Transformation override |
|---|---|---|---|---|---|
| Pointillism | 24 | 80–250 ms | +150 ms | −400…+400 cents | None |
| Moment Form | 20 | 300–800 ms | +200 ms | −300…+300 cents | None |
| Granular Texture | 60 | 50–150 ms | +20 ms | −200…+200 cents | None |
| Transformational | 40 | 100–700 ms | +80 ms | −600…+600 cents | Inversion + Retrograde enabled |
| Statistical Field | 80 | 150–500 ms | −120 ms | −300…+300 cents | None |
Named presets do not replace the selected Series_type, Series_length, Series_values, Rotation, Draw_visualization or Play_result. Except for Transformational, they also leave the user's inversion/retrograde settings unchanged.
Parameters
| Parameter | Default | Exact role |
|---|---|---|
| Preset | Custom | Custom plus five named configurations. |
| Series_length | 12 | Must be at least 2; 12-tone row mode forces 12. |
| Series_type | 12-tone row | Arithmetic, custom numeric permutation/series, or built-in row. |
| Series_values | 0,10,7,11,3,8,1,9,2,5,6,4 | Comma-separated values read by Permutation mode. |
| Use_inversion | Off | Reflect the series numerically before other transformations. |
| Use_retrograde | Off | Reverse the working series. |
| Rotation | 0 | Cyclic positional rotation modulo Series_length. |
| Num_events | 30 | Must be at least 1. |
| Min_event_ms / Max_event_ms | 200 / 600 ms | Series-mapped event-duration range; reversed custom bounds are automatically swapped. |
| Gap_between_events_ms | 50 ms | Positive silence, zero adjacency, negative overlap; very negative values are limited relative to Min_event_ms. |
| Min_pitch_cents / Max_pitch_cents | −200 / +200 | Series-mapped varispeed pitch range; reversed custom bounds are automatically swapped. |
| Draw_visualization | On | Draw event, row, distribution, waveform and summary panels. |
| Play_result | On | Play the completed stereo output. |
Visualization
The v0.4 Picture view contains:
- Event scatter: x = scheduled output time, y = pitch in cents, marker size = event duration, marker color = pan position from blue/left to red/right.
- Row comparison: normalized original row above and normalized transformed working row below.
- Parameter histograms: pitch, pan and duration distributions, each using 12 bins and one shared count scale.
- Output waveform: left channel in blue and right channel in orange on the same amplitude scale.
- Summary: preset, series length, transformations, event count, effective gap, pitch/event ranges, output duration and final peak.
Row-comparison color
The upper original-row bars use one neutral color. In the lower working row, bar height and blue→red color both follow the normalized series value.
Event scatter
The scatter follows the actual serial event schedule, including the effective gap. Negative gaps therefore move later event centers closer together and can show overlapping event spans even though only one center marker is drawn per event.
Output behavior
- Name:
<source>_serial_<preset>. - Channels: always stereo.
- Sample rate: source sample rate.
- Source channel layout: folded to mono before event generation; original spatial image is not preserved.
- Event order: event-index/series-positional order; no post-generation sorting.
- Pitch: varispeed with source-duration compensation so output event duration remains serially assigned.
- Final level: every non-silent output receives target peak scaling to 0.99.
- Randomness: none in the current engine; identical input and settings produce the same parameter sequence and audio construction.
- Playback: controlled by Play_result.