Messagesquisse Opening — User Guide
Six-layer SACHER pitch-field construction with Morse-derived entry times, score-advancing source reads, sample-rate pitch shifting, and stereo accumulation.
What this does
Messagesquisse Opening builds a stereo six-layer field from one selected Sound. The six target pitches follow the SACHER pitch collection Eb–A–C–B–E–D. Their entries are staggered by the Morse-code durations of the letters S-A-C-H-E-R, while each later layer reads from a correspondingly later score-relative position in the source.
The processed layers are generated by sample-rate reinterpretation followed by resampling. A target-register parameter defines where the SACHER field is placed, while a separate source-pitch parameter states the assumed fundamental of the input recording and therefore anchors the actual transposition ratio.
What is the SACHER mapping here?
The script uses the six pitch classes associated with the letters of SACHER:
This is a compositional reference used by the tool. The script does not reproduce the score or performance structure of Boulez's Messagesquisse.
Current implementation:
- Six SACHER layers with independent target frequencies.
- Morse-derived cumulative entry times over a fixed 36-unit score.
- Target register and assumed source pitch are separate controls.
- Optional global quartertone offset of the target register.
- Sample-rate reinterpretation with selectable resample precision.
- Score-advancing source extraction with optional looping or zero padding.
- Constant-power stereo placement from left to right.
- True dry/wet crossfade.
- Attenuation-only final peak safety and a short final fade-out.
Quick start
- Select exactly one Sound in Praat. It must be at least 1 second long.
- Run
Messagesquisse_Opening.praat. - Choose a preset or Custom.
- Set Source_pitch_MIDI to the assumed fundamental of the input recording. Named presets intentionally do not change this field.
- Use Base_MIDI_note and, if needed, Quartertone_offset_semitones to place the target SACHER register.
- Choose a Speed mode, then adjust timing, fade, pan spread, wet mix, and source looping as needed.
- Run the script. The final Sound is named
Messagesquisse_Opening.
Base_MIDI_note describes the target register. Source_pitch_MIDI describes the assumed fundamental of the input recording. The pitch-shift ratio is calculated from both; they are not interchangeable.
SACHER & Morse structure
Pitch collection
SACHER pitch field
| Layer | Letter | Pitch | Offset from target C |
|---|---|---|---|
| 1 | S | Eb | +3 st |
| 2 | A | A | +9 st |
| 3 | C | C | 0 st |
| 4 | H | B | +11 st |
| 5 | E | E | +4 st |
| 6 | R | D | +2 st |
Morse timing
36-unit timing grid
The code assigns dot = one unit, dash = three units, and the gap between symbols inside a letter = one unit.
| Letter | Morse | Duration in code |
|---|---|---|
| S | ... | 5 units |
| A | .- | 5 units |
| C | -.-. | 11 units |
| H | .... | 7 units |
| E | . | 1 unit |
| R | .-. | 7 units |
Total = 36 units. With Unit_duration_s ≤ 0, one unit is set to source duration / 36, so the score duration equals the original source duration.
Pitch and source model
Target register
Assumed source pitch
The script does not estimate the input fundamental. Source_pitch_MIDI is supplied by the user and is left untouched by all named presets.
Score-advancing source reads
Layer i starts reading at its score entry time. Before sample-rate reinterpretation, the requested source duration is:
This compensates for the duration change caused by sample-rate reinterpretation. If the required material extends beyond the source, Loop_if_short chooses between repeated source material and zero padding.
Preset strategies
Named presets replace target-register, quartertone-offset, timing, fade, pan, wet-mix, and looping values. They do not replace Source_pitch_MIDI or Speed_mode.
| Preset | Target register | Offset | Fade | Pan | Wet | Loop |
|---|---|---|---|---|---|---|
| Custom | Form value | Form value | Form value | Form value | Form value | Form value |
| Boulez Reference | MIDI 36 (C2) | 0 st | 50 ms | 1.00 | 0.80 | yes |
| Low Drone Field | MIDI 24 (C1) | 0 st | 80 ms | 1.00 | 0.90 | yes |
| High Shimmer | MIDI 60 (C4) | 0 st | 30 ms | 1.00 | 0.70 | yes |
| Centred Mass | MIDI 36 (C2) | 0 st | 50 ms | 0.00 | 1.00 | yes |
| Dry Ghost | MIDI 36 (C2) | 0 st | 50 ms | 1.00 | 0.20 | no |
| Quartertone Haze | MIDI 36 (C2) | +0.5 st | 60 ms | 0.65 | 0.75 | yes |
Parameters & controls
| Parameter | Default | Current behaviour |
|---|---|---|
| Preset | Custom | Custom plus six named strategies. |
| Base_MIDI_note | 36 | Integer MIDI note defining the target/root register of the SACHER field. |
| Quartertone_offset_semitones | 0.0 | Real semitone offset added to the entire target register; 0.5 = 50 cents. |
| Source_pitch_MIDI | 36 | Assumed fundamental of the input recording; used to calculate each pitch-shift ratio. Presets do not override it. |
| Unit_duration_s | 0.0 | One Morse unit. ≤0 means auto-fit: source duration / 36. |
| Fade_duration_s | 0.05 | Monotonic half-cosine fade-in at each layer entry. |
| Pan_spread | 1.0 | Clamped to 0–1. Layers are evenly placed from -spread to +spread. |
| Wet_mix | 0.8 | Clamped to 0–1. Wet layers are scaled by this value; dry path uses 1 - Wet_mix. |
| Loop_if_short | on | If a requested source segment overruns the source, repeat source material when on; otherwise append silence. |
| Speed_mode | Balanced | Full Quality / Balanced / Fast correspond to resample precision 50 / 20 / 10. |
| Draw_visualization | on | Draws the current six-panel process view plus parameter/footer strips. |
| Play_result | on | Plays the final stereo Sound. |
Rendering pipeline
Wet field
Stereo placement
The six wet layers are therefore equally spaced across the selected stereo span using a constant-power pan law.
Dry path
The dry signal is the script's mono working source, centred equally into both output channels at gain 0.707 per side and multiplied by 1 - Wet_mix. If the source is shorter than the score, the dry path is zero-padded; if it is longer, it is trimmed.
Wet_mix = 0 skips the six-layer wet render entirely. Wet_mix = 1 skips dry-path preparation. Intermediate values scale both paths continuously.
Final level and tail
After combining the left and right accumulators, the script measures the stereo peak. It scales to 0.99 only if the peak already exceeds 0.99; quiet outputs are not boosted. A final cosine fade-out of 3 × Fade_duration_s, capped at 25% of the score duration, is then applied to both channels.
Visualization
The current Picture view is a direct process visualization rather than an explanatory diagram. Its main panels are:
- Input waveform — drawn on the source's actual time domain.
- Output L waveform — left channel of the final stereo result.
- Output R waveform — right channel on the same output amplitude scale as L.
- Layer Accumulation Timeline — six rows showing pre-entry silence and active duration. Each active bar carries pitch, target frequency, and pan position.
- Stereo Pan Map — six colored positions distributed across the selected stereo span.
- SACHER Pitches — horizontal frequency bars for the six target layers.
A parameter footer reports source duration, target register, assumed source pitch, dot/score duration, wet/dry balance, pan spread, fade, looping, sample rate, and all six target frequencies. A final Summary strip identifies the process as a pitch-field opening and points to the Info window for complete run parameters.
entry[i] and continues to the score end. The layer color is reused in the pan map and pitch display so the six voices can be followed across panels.
Output and edge cases
- The output is always a stereo Sound named
Messagesquisse_Opening. - Its duration is the 36-unit score duration. With auto timing this equals the original source duration; with an explicit positive unit duration it equals
36 × Unit_duration_s. - Multichannel input is converted to mono for the working source used by both the wet source extraction and the dry path.
- Non-zero source time domains are supported: source-relative score positions are converted to the source's actual time domain before extraction.
- When looping is disabled and requested wet source material runs out, the missing tail is silence; the layer still occupies its exact score duration after pitch shifting.
Pan_spreadandWet_mixare clamped to 0–1.- The Info window reports whether final peak attenuation was applied as
Peak safety: 0/1.