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.

Author: Shai Cohen Affiliation: Department of Music, Bar-Ilan University, Israel Version: 0.4 (2026) License: MIT License Repo: GitHub
Contents:

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.

series → optional inversion → optional retrograde → optional rotation → normalize to 0…1 different row offsets control: duration source position pitch gain pan events remain in event-index order → write to stereo timeline → target peak 0.99
There is no separate serial timing value and no sorting of events by row value. Event 1 is followed by Event 2, Event 3, and so on; their durations and the fixed gap determine the output timeline.

Quick start

  1. Select exactly one Sound object.
  2. Run Total_Serialism_Machine.praat.
  3. Choose Custom or one of the five named presets.
  4. Select Arithmetic, Permutation, or the built-in 12-tone row.
  5. Optionally apply inversion, retrograde and/or rotation.
  6. Set Num_events, event-duration limits, gap and pitch range.
  7. Run. The result is named <source>_serial_<preset>.

Serial parameter mapping

After transformation, the working series is normalized:

normalized[i] = (series[i] - minimum) / (maximum - minimum)

For event i, five different rotational offsets are read from that same series:

ParameterSeries offsetMapping
Duration+1Min_event + value × (Max_event − Min_event)
Source position+3Normalized position inside the legal source-start range.
Pitch+4Min_pitch_cents + value × pitchRange
Gain+6Mapped linearly from −12 dB to 0 dB, then converted with 10^(dB/20).
Pan+80 = 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:

0, 10, 7, 11, 3, 8, 1, 9, 2, 5, 6, 4

Choosing this type forces the effective Series_length to 12.

Transformation order

Enabled operations are applied in this order:

1. inversion 2. retrograde 3. rotation 4. normalization

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:

pitchRatio = 2^(pitchCents / 1200) sourceExtractDuration = eventDuration × pitchRatio

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:

Override sampling frequency: sourceSampleRate × pitchRatio Resample: sourceSampleRate, quality 50

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:

fadeTime = min( 5 ms, 40% of actual event duration )

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:

L = sqrt(1 - pan) R = sqrt(pan)

Timing, gaps & overlap

The timeline follows event index directly:

event 1 → gap → event 2 → gap → event 3 → ...

The next onset is advanced by:

eventDuration + Gap_between_events_ms / 1000
GapBehavior
> 0Silence between events.
= 0Adjacent event spans.
< 0The 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:

sum(all event durations) + (Num_events - 1) × effectiveGap + 10 ms tail margin

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:

min( 5 ms, 25% of source duration )

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

PresetEventsDurationGapPitch rangeTransformation override
Pointillism2480–250 ms+150 ms−400…+400 centsNone
Moment Form20300–800 ms+200 ms−300…+300 centsNone
Granular Texture6050–150 ms+20 ms−200…+200 centsNone
Transformational40100–700 ms+80 ms−600…+600 centsInversion + Retrograde enabled
Statistical Field80150–500 ms−120 ms−300…+300 centsNone

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.

Statistical Field is the built-in preset that deliberately creates temporal overlap. Granular Texture remains concatenative with a positive 20 ms gap.

Parameters

ParameterDefaultExact role
PresetCustomCustom plus five named configurations.
Series_length12Must be at least 2; 12-tone row mode forces 12.
Series_type12-tone rowArithmetic, custom numeric permutation/series, or built-in row.
Series_values0,10,7,11,3,8,1,9,2,5,6,4Comma-separated values read by Permutation mode.
Use_inversionOffReflect the series numerically before other transformations.
Use_retrogradeOffReverse the working series.
Rotation0Cyclic positional rotation modulo Series_length.
Num_events30Must be at least 1.
Min_event_ms / Max_event_ms200 / 600 msSeries-mapped event-duration range; reversed custom bounds are automatically swapped.
Gap_between_events_ms50 msPositive silence, zero adjacency, negative overlap; very negative values are limited relative to Min_event_ms.
Min_pitch_cents / Max_pitch_cents−200 / +200Series-mapped varispeed pitch range; reversed custom bounds are automatically swapped.
Draw_visualizationOnDraw event, row, distribution, waveform and summary panels.
Play_resultOnPlay the completed stereo output.

Visualization

The v0.4 Picture view contains:

  1. Event scatter: x = scheduled output time, y = pitch in cents, marker size = event duration, marker color = pan position from blue/left to red/right.
  2. Row comparison: normalized original row above and normalized transformed working row below.
  3. Parameter histograms: pitch, pan and duration distributions, each using 12 bins and one shared count scale.
  4. Output waveform: left channel in blue and right channel in orange on the same amplitude scale.
  5. 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