BPM Surround Panning — User Guide
BPM-locked multichannel spatialisation built around a real 2D source trajectory, one shared speaker panner, three speaker layouts, energy-preserving or creative gain fields, a derived low-frequency channel for 7.1, and practical 7.1 / 7.0 / 5.1 / quad / stereo outputs.
What this does
BPM Surround Panning converts one mono or stereo Sound into a moving multichannel sound field. The source is first reduced to one mono spatialisation source. Each pattern generates a real Cartesian position x(t), y(t) plus a pattern amplitude. A single panner then converts that position into gains for the actual speaker coordinates.
→ convert to mono spatial source + reset working time to 0
→ BPM-locked or file-synchronous base rate
→ pattern trajectory x(t), y(t), amplitude
→ clamp trajectory to Path_radius
→ distance-based speaker weights from the selected layout
→ optional energy-preserving gain normalisation
→ AmplitudeTier rendering
→ optional derived LF channel
→ shared peak gain
→ selected multichannel/downmix output
→ optional 8 mono stems + visualisation
Source_focus controls how strongly the closest speakers dominate.Quick start
- In Praat, select exactly one mono or stereo Sound.
- Run script… →
BPM_SURROUND__Panning.praat. - Keep Rate_mode at
BPM-locked, set Tempo_bpm, and choose a Subdivision. - Choose one of the 15 Pattern trajectories.
- Select the required Speaker_format. For conventional 7.1-style work, start with
7.1 with a derived LF channel. - Use Energy-preserving spatialisation when you want movement without deliberate level pumping. Use Creative gain field when the changing total level is part of the effect.
- Choose the Output_format and optionally enable Keep_8_mono_stems.
- Set Peak_target, then enable/disable Draw_visualization and Play_result.
Rate model
The script has two deliberately different timing modes.
BPM-locked — default
baseRate = Tempo_bpm / 60 × subdivision factor. The available subdivisions are 1/1 (one base cycle per four-beat bar), 1/2, 1/4, 1/8, and 1/16.
File-synchronous cycles
Legacy behaviour: 1, 2, 4, 8, 16, 32, or 64 base cycles are spread across the complete file duration. The same setting therefore runs at a different Hz rate on files of different lengths.
Tempo example
120 BPM at 1/8 → base rate = 4 Hz
120 BPM at 1/16 → base rate = 8 Hz
Speaker models
The speaker map is the single source of truth for the panner. Angles use 0° = front and increase clockwise.
| Speaker format | Directional channels | Ch4 | Geometry |
|---|---|---|---|
| 7.1 with derived LF | 7 | Derived low-frequency channel; not spatialised | FL 330°, FR 30°, C 0°, SL 250°, SR 110°, BL 210°, BR 150° |
| 8.0 full-range on 7.1 layout | 8 | BC at 180° | The 7.1 directional geometry plus a full-range back-centre; spacing is intentionally irregular |
| True octophonic ring | 8 | SE at 135° | N, NE, E, SE, S, SW, W, NW at exact 45° spacing |
Lfe_level sets its relative level. It is excluded from directional spatial normalisation, but it receives the same final global gain so its ratio to the main channels remains stable.Panning model
For each control point, the current source position is compared with every directional speaker position. A Gaussian weight is derived from squared distance:
wᵢ = exp[-Source_focus × (dᵢ² - d²min)]
Subtracting the nearest-speaker distance before the exponential keeps the calculation numerically stable. Source_focus increases or decreases the concentration of energy around the nearest speaker(s).
Energy-preserving mode
Therefore, at each control point:
Σgᵢ² = amplitude²
The equality is exact at the AmplitudeTier control points. Between points, the tiers are independently linearly interpolated, so a very small deviation can occur between control points.
Path_radius (maximum accepted value 0.98).The control rate follows the fastest internal component of the chosen pattern: 32 points per fastest cycle are requested, with a 200 Hz minimum, an 8000 Hz ceiling, and a 400,000-point maximum. When either cap is reached, the Info window reports it explicitly.
15 patterns
Each pattern returns a source position and an overall amplitude. The table distinguishes the pattern's primary phase rate from its visible geometric behaviour.
| # | Pattern | Primary phase | Trajectory character |
|---|---|---|---|
| 1 | Circle | 1× base | Clockwise circular orbit at Path_radius. |
| 2 | Figure-8 | 1× | Gerono lemniscate; vertical excursion is scaled to keep the path inside the radius. |
| 3 | Spiral | 2× | Continuous centre→out→centre radial motion with amplitude following radius. |
| 4 | Bounce | 2× | Reflected x/y ramps; the 0.75 axis ratio makes the complete shape close after four primary phase cycles. |
| 5 | Swarm | 3× | Quasi-random deterministic wander from several non-matching sinusoidal terms; no single exact repeat period. |
| 6 | Tornado | 3× | Rotating vortex with a radius that breathes in and out. |
| 7 | Wave | 1× | Strong side-to-side motion with a smaller 2× vertical wave. |
| 8 | Plasma | 2× | 3:2 Lissajous-type field with a faster amplitude term. |
| 9 | Neural | 4× | Six discrete spatial nodes per phase cycle with soft-gated amplitude transitions. |
| 10 | Quantum | 4× | Slow centre drift plus fast 5.3× / 7.1× jitter terms; no single exact repeat period. |
| 11 | DNA | 2× | Figure-like double-frequency path with an independent phase-related amplitude strand. |
| 12 | Galaxy | 1× | Rotation with a slower radius drift; complete modulation closes after three primary phase cycles. |
| 13 | Lightning | 8× | Soft-gated strikes that jump between deterministic angular positions with exponential decay. |
| 14 | Heartbeat | 1× | Continuous double-pulse amplitude envelope with slow circular position motion; spatial position closes after four phase cycles. |
| 15 | Breathing | 0.5× | Radius expands/contracts while the steering angle advances more slowly; full steering cycle spans three primary phase cycles. |
Parameters
| Parameter | Default | Description |
|---|---|---|
| Rate_mode | BPM-locked | Choose real tempo sync or the legacy file-synchronous cycle count. |
| Tempo_bpm | 120 | Tempo for BPM mode. Valid range: 1–999 BPM. |
| Subdivision | 1/4 | 1/1, 1/2, 1/4, 1/8, or 1/16. The 1/1 option means one base cycle per four-beat bar. |
| File_cycles | 8 cycles | Used only in file-synchronous mode: 1, 2, 4, 8, 16, 32, or 64 cycles over the complete file. |
| Pattern | Circle | One of the 15 source trajectories listed above. |
| Speaker_format | 7.1 + derived LF | 7.1 with derived LF, 8.0 full-range on the irregular 7.1 geometry, or a true 45° octophonic ring. |
| Spatialisation | Energy-preserving | Normalise squared directional gains to the pattern amplitude, or leave the raw gain field for intentional pumping. |
| Source_focus | 1.6 | Controls the concentration of distance-based speaker weights. Higher values favour the nearest speakers more strongly. |
| Path_radius | 0.85 | Maximum source distance from the listener. Values above 0.98 are clamped. |
| Lfe_cutoff_Hz | 100 Hz | Low-pass cutoff for the derived LF channel in 7.1 mode; capped below Nyquist. |
| Lfe_level | 0.4 | Relative level of the derived LF channel, clamped to 0–1. |
| Output_format | 7.1 / 8-channel | 8-channel main output, 7.0, 5.1 downmix, 4.0 quad, or stereo downmix. The exact meaning of the 8-channel option follows the selected speaker model. |
| Keep_8_mono_stems | Off | Keep the eight processed source channels in addition to the main result. |
| Peak_target | 0.95 | Final peak target. Invalid values fall back to 0.95. |
| Draw_visualization | On | Draw the trajectory, gains, speaker distribution, output waveform, and summary. |
| Play_result | On | Play the main result after processing. |
Outputs
| Output choice | Channels | Behaviour |
|---|---|---|
| 8-channel main output | 8 | With 7.1 speaker mode: FL, FR, C, derived LF, SL, SR, BL, BR. With either full-range speaker model: all eight channels are directional. |
| 7.0 full-range | 7 | In 7.1 mode, the derived LF channel is dropped. In a full-range 8-channel speaker mode, Ch4 is also dropped, so use this choice only when that is intended. |
| 5.1 downmix | 6 | BL/BR are folded into SL/SR. In 7.1 mode Ch4 supplies the derived LF channel. In full-range modes a fresh low-frequency channel is derived from the source and directional Ch4 is folded equally into SL/SR. |
| 4.0 quad | 4 | C is split into the front pair; SL/SR are folded into the rear pair; full-range Ch4 is also folded into the rear pair. |
| Stereo downmix | 2 | Weighted sum of front, centre, side, and rear channels. Full-range Ch4 is sent equally to both sides. This is not a binaural render. |
[source]_surr_[Pattern], [source]_51_[Pattern], [source]_quad_[Pattern], or [source]_stereo_[Pattern]. Optional stems are renamed [source]_stem1_... through [source]_stem8_... using the active speaker labels.Peak_target.Visualisation
The drawing is a process visualisation rather than a generic explanation layer. It is generated from the same trajectory and speaker-gain procedures used by the audio renderer.
Speaker map + motion
Shows the speaker coordinates, the actual source path, and the darker energy-centroid path computed from squared speaker gains. In 7.1 mode the derived LF channel is shown separately and is explicitly marked as non-spatialised.
Gain envelopes
Recomputes the true directional gain curves over one primary pattern cycle; it does not estimate gain by dividing processed audio by the source.
Polar mean gain
Displays the mean gain associated with each directional speaker, normalised to the loudest speaker for visual comparison.
Output waveform
Displays channels 1 and 2 of the final output as a structural reference, while stating how many channels the result actually contains.