All live performance actions are sent to the Performance object β€” typically stored in a variable named ep. Think of it as the mixing desk for your session: it holds all active Sequencers and exposes controls that take effect immediately on the next bar.

Start & Stop

Start

EcoPhausto start. ep := EcoPhausto new. ep playFor: N bars.
MessageEffect
EcoPhausto startInitialises the audio engine. Must be called once per session before anything else.
EcoPhausto newCreates a new Performance object. Assign it to a variable so you can control it.
ep playFor: N barsStarts the clock running for N bars. Sequencers added at any point during the run will join immediately.
EcoPhausto start.
ep := EcoPhausto new.
ep playFor: 128 bars.   "Runs for 128 bars then stops automatically"

Stop

ep stop.
ep stop.   "Stops all sequencers and the internal clock immediately"
⚠️ ep stop is immediate β€” no fade. For a live context consider muting first, then stopping after a bar.

Tempo β€” bpm:

Change the tempo of the running performance at any time. The change takes effect from the next beat.

ep bpm: value.
ArgumentTypeDescription
valueNumberBeats per minute. No practical limit, but 60–200 is typical.
ep bpm: 120.
ep bpm: 90.    "Slow down mid-performance"
ep bpm: 140.   "Ramp up the energy"

Mute & Unmute

Silence one or more instruments without removing them from the performance. The sequencers keep running β€” un-muting brings them back at the right phase.

ep mute: #( #instA #instB ... ). ep unmute: #( #instA #instB ... ).
ArgumentTypeDescription
#( symbols )Array of SymbolsThe instrument names to mute or unmute
"Mute kick, snare and bleep together"
ep mute: #(#kick #snare #bleep).

"Bring kick and snare back in"
ep unmute: #(#kick #snare).

"Un-mute everything at once"
ep unmute: ep allInstrumentNames.
ℹ️ Muted instruments are still sequencing internally β€” their step counter advances. When unmuted they re-enter on the correct beat, never out of phase.

Solo & Unsolo

Solo focuses the output to only the named instruments; everything else is silenced. Multiple instruments can be soloed together β€” they all play, the rest are muted.

ep solo: #( #instA #instB ... ). ep unsolo: #( #instA #instB ... ).
"Solo the synth and cowbell β€” hear only those two"
ep solo: #(#psg #cowbell).

"Release the solo β€” all instruments return to their prior mute state"
ep unsolo: #(#psg #cowbell).
πŸ’‘ Use solo to build up a performance piece by piece: start soloed on the kick, add hi-hat, unsolo, add melody… great for club contexts where the build matters.

Loop & Unloop

Lock the performance into a repeating section of a given number of steps. Useful for drilling into a moment while you re-code other parts.

ep loop: N. ep unloop.
ArgumentTypeDescription
NIntegerNumber of steps to loop
"Loop the next 5 steps forever"
ep loop: 5.

"Return to normal playback"
ep unloop.

Save & Restore

Take a snapshot of the current performance state β€” all sequencers, levels, mute statuses β€” and restore it later. Essential for recovering a working state after an experiment goes wrong.

ep temporarySave. ep restore.
"Capture the current state"
ep temporarySave.

"Experiment β€” change rhythms, BPM, anything"
ep bpm: 200.
'FFFF' hexBeat to: #kick.

"Something went wrong β€” go back to saved state"
ep restore.
πŸ’‘ Call temporarySave before every risky live edit. It costs nothing and saves your performance from a wrong evaluation.

Global rhythm assignment

Apply the same rhythm pattern to all active sequencers in the performance at once. A blunt, high-energy tool for sudden shifts.

ep rhythm: aPattern.
"Force all sequencers to a hex pattern simultaneously"
ep rhythm: '1312' hexBeat.

"Assign the same named rhythm to an array of specific instruments"
#(#kick #ch #cowbell) rhythm: #banda.

Level control

Set the per-step amplitude for a specific instrument already in the performance. The message can be sent to the instrument symbol directly.

#instrumentName level: 'v1 v2 v3 ...'.
#clap level: '0.3 0.1 0.4'.
#kick level: '1.0'.     "All steps at full volume"
#psg  level: '0.6 0.2 0.8 0.4'.

Typical performance workflow

A structured example of a full set, from soundcheck to closure:

"──── SOUNDCHECK ────"
EcoPhausto start.
ep := EcoPhausto new.
ep bpm: 110.
ep playFor: 512 bars.

"──── BUILD UP ────"
#(1 0 0 0) asSeq to: #kick.

ep temporarySave.   "save clean starting point"

#cumbiaClave asRhythm to: #conga.
#plena to: #snare.
16 randomTrigs to: #ch; level: '0.9 0.4 0.6 0.3'.

"──── SOLO FOR TENSION ────"
ep solo: #(#kick #snare).

"──── FULL DROP ────"
ep unsolo: #(#kick #snare).
64 randomTrigs
    notes: (32 randomWalksOn: Scale pentatonicMajor octaves: 2 root: 60)
    to: #psg; level: '0.6'.

"──── COOL DOWN ────"
ep mute: #(#psg #ch).
ep bpm: 90.

"──── END ────"
ep stop.