Scenes are places; an arrangement is the journey. Write the order in bars, the transitions between scenes, and the slow-motion moves across them — then press play on the whole song.
FIRST, the long-hand song. The short spelling (song { intro = [...], drop = [...] }) has room for scenes and nothing else, so a song with a journey labels its parts: song { scenes = { … }, edges = { … }, arrange = … }. Same scenes as before, now with somewhere to put the next three ideas.
THEN the running order. arrange = arrange [[8, intro], [16, drop], [8, intro]] is a list of "this many bars of that scene", and a bar is one cycle of your patterns. A scene can come back at a different length — that's a reprise, not a repeat. The arrangement loops when it ends; pipe it through |> once for a piece that finishes.
THEN the seams. A transition is what happens BETWEEN two scenes, and edges know where you came from: edges = { * -> drop : [1, [riser]] } overlays the riser track for the bar before ANY arrival at the drop. * is the wildcard and a specific edge beats it, so groove -> drop can lift differently from breakdown -> drop. Edges fire on the arrangement's own advances and on live scene jumps alike.
LAST, motion across a section. A scene can carry automation for its whole duration: drop = [...] with { air = ramp 0.2 1.0 } sweeps the macro named air from 0.2 to 1.0 over however many bars that drop is scheduled for — the 16-bar filter opening as one clause, not sixteen edits. A bare with { air = 0.2 } just pins the knob for that section.
The starting point#
The lesson opens with this song in the editor. Every edit recompiles and plays.
-- The arrangement: scenes exist but the song just alternates them forever.
air = macro 0.3
bass = patch {
source = saw (freq pitch),
ampEnv = adsr 2ms 150ms 0 90ms,
cutoff = 700Hz + air * 2500Hz,
gain = vel * 0.5
}
riserP = patch {
source = saw (freq pitch) |> unison 5 30,
ampEnv = adsr 900ms 0ms 1 200ms,
cutoff = 3000Hz,
gain = vel * 0.25
}
kick = sound !"bd ~ bd ~"
bassline = play bass !"c2 ~ [c2 eb2] g1"
riser = play riserP !"c4"
set = song {
intro = [bassline],
drop = [kick, bassline]
}
What to watch#
Let the arrangement run: the picture rebuilds itself section by section — sparse in the intro, full at the drop — without you touching anything.
Goals#
The workbench checks these as you work; the solution is there when you want it.
- Write the journey — an arrange of 3+ steps
- A transition edge into the drop
- Stretch: ramp a macro across a scene
Make it yours#
Arrange a real EDM arc: 8 intro, 8 groove, 16 drop, 8 breakdown, 16 drop, 8 outro — with a riser edge into every drop and a ramp opening the breakdown.
Further reading#
Arrange a song in the reference.