2.1 System structure
The instrument is the Processing sketch Swarm_Synth_V/ (16 tabs). The flocking logic knows nothing about drawing or sound; sound and visuals only read the swarm's state. No external Processing library is needed: the sketch has its own synthesizer and reads MIDI through Java's own javax.sound.midi.
| File | Role |
|---|---|
Swarm_Synth_V.pde |
Main: modes (free play, score preview, render, atlas), the step loop, keys P / V / F / Shift+A / Shift+B |
Boid.pde, Flock.pde |
Pure flocking logic, 8 parameters, resolution scaling, torus distance |
SwarmMetrics.pde |
Whole-swarm measures, flock detection and flock identity over time |
SwarmEvents.pde |
Encounters between individual boids; flocks crossing the beat grid |
SoundEngine.pde |
Decides what to play: flock voices (macro), encounter notes (micro), pings, beat hits |
Synth.pde |
Makes the samples: 4 drone slots × 4 partials, one-shot notes, sine hits for the beat, limiter |
AudioOut.pde |
Speakers in real time; WAV writer for renders |
Score.pde |
Reads and plays a score (any .txt in data/) |
ScoreRecorder.pde |
Writes free play down as a simplified score (Shift+R) |
VideoRecorder.pde |
Offline render to mp4 via ffmpeg |
Atlas.pde |
Sound atlas: measures pattern, sound and feeling over 64 settings |
VisualEngine.pde |
Draws into the stage image (boids, sliders, overlay, HUD) |
BeatAtlas.pde |
Beat atlas: measures the beat over speed, max force and grid |
InputManager.pde |
Keyboard and mouse control |
Midi.pde |
MIDI controllers: a mapping file per device, pick-up, button lights, the controller map on screen |
Every simulation step lasts exactly 1/60 s and produces exactly one audio block of 800 samples (48 kHz):
score.apply(t) // score cues move the parameters
flock.update() // the swarm moves
metrics.compute() // whole swarm + flocks + identity
events.compute() // encounters
events.computeBeats() // flocks crossing the beat grid
sound.update() // flock voices, notes, pings, beat hits -> synth
synth.renderBlock() // 800 samples
In real time the sound card paces this loop (the sketch waits until the audio buffer needs the next block). In a render, nothing is real time: steps run as fast as the computer can, and the result is identical every time.