Strudelify
Pools cover art

Steps Ahead

Pools

Steps Ahead

KeyG minorTempo83 bpm
0:00/0:00
// Pools — Steps Ahead
// 83 bpm, 4/4, key G minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: Full arrangement: all 120 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(83/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once · [...]/2 spreads a riff over 2 bars.
// A part's distinct bars are riffs (A, B, C...) played in order, A@4 for four bars: edit a riff to change every repeat.

// chords · piano
const piano = note(`<
  A@2 B@5 C@5 D@5 E@4 F@2 G@2 H I J@2 K@2 L@2 M@4 N@2 O@2 P@2 Q@4 R@7 S T S T S T S U@2 V@8 W@8 X@2 Y@2 Z@6 AA@8 AB@6
  AC@2 AD@6 AE@2 AF@2 AG@4 ~
>`.pickRestart({
  A: "[~@7 [bb3,db4,e4,gb4,a4]@6 ~@2 [ab3,bb3,eb4,g4]@15 ~@2]/2", // Gb7 Eb
  B: "[~@11 c2 ~@3 [ab3,bb3,eb4,g4]@18 ~@10 c2 ~@3 [ab3,bb3,eb4,g4]@18 ~@2 [eb2,eb3,a3,d4,gb4]@3 ~@2 [eb2,eb3,a3,db4,f4] ~@6 [a3,c4,eb4], ~@7 [bb3,db4,e4,gb4,a4]@6 ~@26 [bb3,db4,e4,gb4,a4]@6 ~@35]/5", // Eb D Dbaug Adim Gb7
  C: "[~@3 ab2@10 ~@2 [a2,g3,b3,db4,eb4,gb4]@14 ~@2 [ab2,gb3,bb3,db4,f4]@20 ~@4 [bb3,db4,e4,gb4,a4]@6 ~@2 [ab3,bb3,eb4,g4]@15 ~@2, [gb3,b3,db4]@3 ~@17]/5", // B7 Gbmaj7 Gb7 Eb Gbsus4
  D: "[~@7 [bb3,db4,e4,gb4,a4]@4 c2 ~@3 [ab3,bb3,eb4,g4]@19 ~@9 c2 ~@3 [ab3,bb3,eb4,g4]@18 ~@2 [eb2,eb3,a3,d4,gb4]@3 ~@2 [eb2,eb3,a3,db4,f4] ~@6 eb4, ~@39 [bb3,db4,e4,gb4,a4]@6 ~@35]/5", // Gb7 Eb D Dbaug Gb7
  E: "[[ab2,gb3,b3,db4]@12 ~@3 [a2,g3,db4,gb4]@14 ~@2 [ab2,gb3,bb3,db4,f4]@20 ~@5 [d3,c4,e4,g4,b4] ~ [d3,c4,e4,g4,b4] [gb2,d4,e4,f4,bb4,d5] ~ [gb2,d4,f4,bb4,d5] ~@2]/4", // Abm7 Gbm Gbmaj7 Cmaj7 Bb
  F: "[~@4 c4@15 ~@5 [d3,c4,e4,g4,b4] ~ [d3,c4,e4,g4,b4] [gb2,d4,f4,bb4,d5] ~ [gb2,d4,f4,bb4,d5] ~@2, ~@3 [g2,g3,d4,e4,g4]@17 ~@12]/2", // Cmaj7 Bb Em7
  G: "[~@3 [g2,d3,g3,f4,a4,b4,db5,e5]@17 ~@4 [db3,b3,eb4,gb4,bb4] ~ [db3,b3,eb4,gb4,bb4] [db4,e4,a4] ~ [db4,e4,a4,db5] ~@2, ~@3 [c5,f5] ~@28]/2", // G7 Ebm7 A F5
  H: "~@3 bb3 ~@5 eb4@3 gb2 ~ e2 ~, ~@3 [db4,gb4]@11 ~@2, ~@3 [gb2,gb3]@9 ~@4", // Gb5 Gb
  I: "[eb2,eb3,g3,bb3,db4]@3 [eb2,eb3,g3,bb3,db4] ~@4 [ab2,gb3,b3,eb4,gb4]@5 ~@3", // Eb7 Abm7
  J: "[[db3,b3,eb4,gb4,bb4] ~@2 [c3,bb3,e4,a4]@8 [ab3,eb4,g4]@15 ~@6, ~@11 bb3 ~@20]/2", // Ebm7 Am Abmaj7
  K: "[~@7 c2 ~@3 [ab3,bb3,eb4,g4]@19 ~@2, ~@3 [bb3,db4,e4,gb4,a4]@6 ~@23]/2", // Eb Gb7
  L: "[~@7 c2 ~@3 [ab3,bb3,eb4,g4]@18 ~@3, ~@3 [bb3,db4,e4,a4]@6 ~@23]/2", // Eb A
  M: "[[eb2,eb3,a3,d4,gb4]@3 ~ [eb2,eb3,a3,db4,f4] ~@6 eb4 [ab2,gb3,b3,db4]@14 ~ [a2,g3,db4,gb4]@14 ~@2 [ab2,gb3,bb3,db4,f4]@20 ~]/4", // D Dbaug Abm7 Gbm Gbmaj7
  N: "[~@4 [d3,c4,e4,g4,b4] ~ [d3,c4,e4,g4,b4] [gb2,d4,f4,bb4,d5] ~ [gb2,d4,f4,bb4,d5] ~@5 g2@9 g2 ~ f2 ~ [g2,g3]@2 ~ [g2,g3], ~@15 [c4,d4,e4,g4]@16 ~, ~@15 g3@11 ~@6]/2", // Cmaj7 Bb G C
  O: "[~@4 [d3,c4,e4,g4,b4] ~ [d3,c4,e4,g4,b4] [gb2,gb3,d4,f4,bb4,d5] ~ [gb2,gb3,d4,f4,bb4,d5] ~@5 g2@9 [g2,g3] ~ [f2,f3] ~ [g2,g3]@2 ~ [g2,g3], ~@15 [f4,a4,b4,db5,e5]@16 ~, ~@15 g3@7 ~@10]/2", // Cmaj7 Bb G F G A
  P: "[~@4 [db3,b3,eb4,gb4,bb4] ~ [db3,b3,eb4,gb4] [f2,f3,db4,e4,a4,db5] ~ [f2,f3,db4,e4,a4,db5] ~@5 [gb2,db3,gb3,db4,eb4,gb4]@9 [gb2,gb3] ~ [e2,e3] ~ [eb2,eb3,g3,bb3,db4]@3 [eb2,g3,bb3,db4]]/2", // Ebm7 B A Ebm7 Gb E Eb7
  Q: "[~@4 [ab2,gb3,b3,eb4,gb4]@7 ~ [db3,b3,eb4,gb4,bb4] ~@2 [c3,bb3,e4,a4]@29 [d3,d4,db5,gb5,a5]@14 ~@2 [a3,g4,db5,gb5,a5]@4, ~@15 db4 ~@28 a4 ~@19]/4", // Abm7 Ebm7 Am Dmaj7 Gbm
  R: "[~@12 [d3,d4,a4,db5,gb5,a5]@14 ~@2 [a3,g4,db5,gb5,a5]@14 ~@2 [d3,d4,a4,db5,gb5,a5]@14 ~@2 [a3,g4,db5,gb5,a5]@14 ~@2 [d3,d4,a4,db5,gb5,a5]@14 ~@2 [a3,g4,db5,gb5,a5]@14 ~@2 [d3,d4,a4,db5,gb5,a5]@2 ~ [d3,d4,a4,db5,gb5,a5]]/7", // Dmaj7 Gbm Dmaj7 Gbm Dmaj7 Gbm Dmaj7
  S: "~@12 [a3,g4,db5,gb5,a5]@2 ~ [a3,g4,db5,gb5,a5]", T: "~@12 [d3,d4,a4,db5,gb5,a5]@2 ~ [d3,d4,a4,db5,gb5,a5]",
  U: "[~@4 [ab2,ab3,c4,gb4,bb4]@5 ~@2 [g2,f3,bb3,d4,f4,a4]@21]/2", // Ab7 Gm7
  V: "[~@3 [d3,c4,gb4,bb4]@7 ~ [g2,f3,bb3,d4,f4,a4]@22 ~@2 [d3,c4,gb4,bb4]@6 ~ d3 [g2,bb3,d4,f4,a4]@22 bb3 ~ [d3,c4]@8 [bb3,f4,a4]@22 ~@2 [c3,bb3,e4,ab4]@6 ~@2 [f2,c3,f3,ab3,c4,eb4,g4]@21, ~@11 d3 ~@31 f3@20 ~@4 [gb4,bb4]@6 ~@2 [g2,d4]@24 ~@29, ~@75 f3@14 ~@39]/8", // Daug Gm7 Daug Gm7 D7 Bbmaj7 Caug Fm7 …
  W: "[~@3 [c3,bb3,e4,ab4]@7 ~@2 f3@21 ~ c3 [c3,bb3]@8 [f2,c3,f3,ab3,c4,eb4,g4]@22 ~ [f2,f3] [bb3,e4,ab4]@7 ~ [f2,f3,c4,eb4,g4]@23 ~ [d3,c4,gb4,bb4]@7 ~ d3@2 ~ d3@12 ~@6, ~@10 c3@23 ~@2 [e4,ab4]@6 ~@34 ab3@21 ~@32, ~@11 [f2,ab3,c4,eb4,g4]@22 ~@34 c3@30 ~@10 [g2,f3,bb3,d4,f4,a4]@21]/8", // Caug C7 Fm7 F Bbm7b5 Cm Daug E …
  X: "[~@7 d4@3 ~ [g2,g3,bb3,d4,f4,a4]@21, ~@3 [d3,c4,gb4,bb4]@8 ~@21]/2", // Gm7 Daug
  Y: "[~@3 [c4,gb4,bb4]@6 ~@2 [g2,f3,bb3,d4,f4,a4]@21, ~@3 [d3,d4]@8 ~@21]/2", // Cm7b5 Gm7 D
  Z: "[~@3 [d3,c4,d4,gb4,bb4]@7 ~ [bb3,d4,f4,a4]@22 ~@2 [c3,bb3,e4,ab4]@7 ~ [f2,c3,f3,ab3,c4,eb4,g4]@22 ~@2 [c3,bb3,e4,ab4]@7 ~ [f2,c3,f3,ab3,c4,eb4,g4]@21, ~@11 [g2,f3]@24 ~@61]/6", // Daug Bbmaj7 Caug Fm7 Caug Fm7 G7
  AA: "[~@3 [c3,bb3,e4,ab4]@7 ~ [ab3,c4,eb4,g4]@22 ~@2 [c3,bb3,e4,ab4]@7 ~ [ab3,c4,eb4,g4]@21 ~@3 [d3,c4,gb4,bb4]@7 d3 [g2,f3,bb3,d4,f4,a4]@24 [d3,c4,gb4,bb4]@8 [g3,bb3,d4,f4,a4]@10 [bb3,d4] ~@2 [g3,bb3,d4,f4]@8, ~@11 [f2,c3,f3]@24 ~@8 [f2,c3,f3]@24 ~@40 g2@20 ~]/8", // Caug Abmaj7 Caug Abmaj7 Daug Gm7 Daug Gm7 …
  AB: "[~@3 [d3,c4,gb4,bb4]@7 ~@2 bb3@7 g3 [bb3,d4,f4]!2 ~@5 [g3,bb3,d4,f4]@6 ~@2 [d3,c4,gb4,bb4]@6 ~ d3 [g3,bb3,d4,f4,a4]@10 [bb3,d4,f4] ~@2 [bb3,d4,f4] ~@10 [bb3,db4,e4,gb4,a4]@6 ~@2 [ab3,bb3,eb4,g4]@19 ~@2, ~@11 g2@22 ~@10 g2@23 ~@30, ~@11 [g3,d4,f4,a4]@8 ~@37 g3@11 ~@29]/6", // Daug Bb Gm7 Daug Gm7 Bb Gb7 Eb …
  AC: "[~@7 c3@2 ~@2 [ab3,bb3,eb4,g4]@19 ~@2, ~@3 [bb3,db4,e4,gb4,a4]@6 ~@23]/2", // Eb Gb7
  AD: "[~@7 c3@2 ~@2 [ab3,bb3,eb4,g4]@19 ~ [eb2,eb3,a3,d4,gb4]@4 ~ [eb2,eb3,a3,db4,f4] ~@6 [a3,c4,eb4] [ab2,gb3,b3,db4]@11 ~@4 [a2,g3,db4,gb4]@14 ~@2 [ab2,gb3,bb3,db4,f4]@20 ~, ~ [bb3,db4,e4,gb4,a4]@2 ~@29]/6", // Eb D Dbaug Adim Abm7 Gbm Gbmaj7 Gb7
  AE: "[~@4 [d3,c4,e4,g4,b4] ~ [d3,c4,e4,g4,b4] [gb2,d4,f4,bb4,d5] ~ [gb2,d4,f4,bb4,d5] ~@5 [g2,g3]@9 [g2,g3] ~ [f2,f3] ~ [g2,g3]@2 ~ [g2,g3], ~@15 [c4,d4,e4,g4]@17]/2", // Cmaj7 Bb G F G C
  AF: "[~@4 [d3,c4,e4,g4,b4] ~ [d3,c4,e4,g4,b4] [gb2,gb3,d4,f4,bb4,d5] ~ [gb2,gb3,d4,f4,bb4,d5] ~@5 g3 g3@8 [g2,g3] ~ [f2,f3] ~ [g2,g3]@2 ~ [g2,g3], ~@15 [f4,a4,b4,db5,e5]@17, ~@15 g2@9 ~@8, ~@15 d3@5 ~@12]/2", // Cmaj7 Bb G F G A
  AG: "[~@4 [db3,b3,eb4,gb4,bb4] ~ [db3,b3,eb4,gb4,bb4] [gb2,db4,e4,a4] ~ [gb2,db4,e4,a4] ~@5 gb2@9 gb2 ~ e2 ~ eb2@2 [g3,bb3,db4] [eb2,g3,bb3,db4] ~@4 [ab2,gb3,b3,eb4,gb4]@6 ~@2 [db3,b3,eb4,gb4] ~@2 [c3,bb3,e4,gb4,a4]@17, ~@15 [db4,gb4]@13 ~@36, ~@15 [gb3,eb4]@11 ~@2 eb3@7 ~@29]/4", // Ebm7 Gbm7 Gdim Eb7 Abm7 B Gbm7b5 Gb5 …
})).s("gm_piano").gain(0.37).pan(0.2)

// bass · acoustic bass
const bass = note(`<
  ~ A B C D E@2 F G H I J K L@2 M@2 N O H P Q R S T U V W X Y Z Y AA ~ AB AC AD AE@2 AF@4 AG@3 AH AI AJ AI AH AI AH AK
  AL AM AL AM AL AM AL AN AO AP@2 AQ@2 AR@2 AS@2 AT@2 AU AV AW@2 AX@2 AY@2 AZ@2 BA@2 BB@2 BC@2 BD BE AW@2 BF@2 BG@2 BH@2
  BI@2 ~ BJ Y BK Y BL ~ BM BN AD BO@2 BP@2 BQ@2 BR@2 ~
>`.pickRestart({
  A: "~@7 f3 c3@2 ~ f3@3 ~@2", B: "~@11 c2@2 ~@3", C: "~@7 f3 c3@2 f3 c3 ab2@2 c3 ab2", D: "~ f2 ~ f2@2 ~@6 c2@2 ~@3",
  E: "[~@4 eb3 ~ eb3 ~ f3@3 ~@2 f3 ~ ab3@4 ~@13]/2", F: "~@7 eb3 eb3@2 ~ ab3@3 ~@2", G: "~@5 a2 e3 a3 b3@2 ~ e3 ~ a2@3",
  H: "~@3 bb3 ~@3 ab3 ~@3 eb3 ~@3 bb2", I: "ab2@2 ~ bb2@2 ~@6 c2@2 ~@3", J: "~@7 f3 c3@3 f3@2 ~@3", K: "~@11 c2 ~@4",
  L: "[~@7 f3 c3 ~ f3 c3 ~@2 c3 ab2@2 f2 ~ f2@2 ~@6 c2@2 ~@3]/2", M: "[~@4 eb3 ~ eb3 ~ f3@2 ~ eb3 ~ f3 ~ ab3@5 ~@12]/2",
  N: "~@7 eb3 eb3@2 ~ ab3@4 ~", O: "~@5 a2 e3 a3 b3@2 ~ e3 b2 a2@2 ~", P: "ab2@2 ~ bb2 ~@4 d3 ~ d3 gb3 ~ gb3 ~ c3",
  Q: "d3@2 f3 g2@8 ~ g2 ~ f2 ~", R: "g2@2 ~ g2 ~@4 d3 ~ d3 gb3 ~ gb3 ~ d3", S: "~@2 f3 a3@8 ~ g2 ~ f2 ~",
  T: "g2@2 ~ g2@2 ~@3 db3 ~ db3 f3 ~ f3 ~ bb2", U: "db3 ~ eb3 gb2@5 ~@4 gb2 ~ e2 ~", V: "eb2@2 ~ eb2 ~@4 ab1@6 ~@2",
  W: "db2 ~@2 c2@5 ~@8", X: "~@3 f3 c3@3 f3@2 ~@7", Y: "~@7 c2 ~@8", Z: "~@3 f3 c3 ~ f3 c3 ~@2 c3 ab2 ~ f2 ~ f2",
  AA: "eb3 ~ eb3 ~ f3@2 ~ eb3 ~ f3 ~ ab3@5", AB: "~@3 eb3 eb3@2 ~ ab3@4 ~@5",
  AC: "~ a2 e3 a3 b3@2 ~ e3 b2 a2@2 ~@4 bb3", AD: "~@3 ab3 ~@3 eb3 ~@3 bb2 ab2@2 ~ bb2",
  AE: "[~@4 d3 ~ d3 gb2 ~ gb2 ~ [c2,d2] f2 ~ g2 g2@6 ~@3 g2 ~ f2 ~ g2@2 ~ g2]/2", // Csus2
  AF: "[~@4 d3 ~ d3 gb2 ~ gb2 ~ c3 d3 ~ f3 a3@7 ~@2 g2 ~ f2 ~ g2@2 ~ g2@2 ~@3 db3 ~ db3 f2 ~ f2 ~ db3 eb3@2 db3 gb2@5 ~@4 gb2 ~ e2 ~ eb2 ~@2 eb2]/4",
  AG: "[~@4 ab1@6 ~@2 db2 ~@2 c2@25 ~@4 d2 ~@3]/3", AH: "~@3 d2 b1@2 ~ d2 ~@4 a1@2 ~ a1", AI: "~@7 a1 b1@3 ~ d2@2 ~@2",
  AJ: "~@4 b1@2 ~ d2 ~@4 a1@2 ~ a1", AK: "~@7 a1 b1@2 ~@2 d2@2 ~ d2", AL: "~@12 a1@2 ~ a1", AM: "~@12 d2@2 ~ d2",
  AN: "~@4 ab1@7 g1@2 ~@3", AO: "~@3 g1 g1@9 g1 ~@2", AP: "[~@3 d2@7 ~ g1@7 ~ g1 ~@9 g1 ~@2]/2",
  AQ: "[~@3 d2@8 ~ g1@9 ~ g1 ~ g1@2 ~@6]/2", AR: "[~@3 d2@7 ~ g1@7 ~@2 g1!2 ~@10]/2",
  AS: "[~@3 c2@7 ~ f1@7 ~@4 f1 ~@9]/2", AT: "[~ f1 ~@2 c2@6 ~ f1@7 ~ c1 f1!2 ~@7 f1 ~@2]/2", AU: "~@3 c2@8 ~@5",
  AV: "~@5 f1 ~@2 f1 ~@7", AW: "[~@3 c2@7 ~ f1@7 ~@3 f1 ~@2 f1 ~@7]/2", AX: "[~@11 g1@7 ~ f1 g1 ~@8 g1 ~@2]/2",
  AY: "[g1 ~@2 d2@7 ~ g1@7 ~@3 g1 ~ g1 ~@8]/2", AZ: "[~@3 d2@7 ~ g1@7 ~@2 g1!2 ~@7 g1 ~@2]/2",
  BA: "[~@3 d2@7 ~ g1@7 ~@3 g1 ~@2 g1 ~@7]/2", BB: "[~@3 c2@7 ~ f1@9 ~ f1 ~@2 f1@2 ~@6]/2",
  BC: "[~ f1 ~ c2@7 ~ f1@7 ~@3 f1 ~@2 f1 ~@7]/2", BD: "~@3 c2@8 f1@5", BE: "~@5 f1 ~@4 f1 ~@5",
  BF: "[~@3 d2@7 ~ g1@7 ~ f1 g1@3 ~@9]/2", BG: "[~@3 d2@7 ~ g1@8 ~@2 g1 ~@2 g1 ~@4 g1 ~@2]/2",
  BH: "[~@3 d2@7 ~ g1@7 ~ f1 g1 ~ g1 ~@6 g1 ~@2]/2", BI: "[~@3 d2@7 ~ g1@7 ~@3 g1 ~@10]/2", BJ: "~@3 f3 c3@3 f3 ~@8",
  BK: "~@3 f3 c3@2 f3 c3 ab2@2 c3 ab2 ~ f2 ~ f2", BL: "eb3 ~ eb3 ~ f3@3 eb3 ~ f3 ~ ab3@4 ~",
  BM: "~@3 eb3 eb3@3 ab3@2 ~@7", BN: "~ a2 ~ a3 b3 ~@3 b2 a2@2 ~@4 bb3",
  BO: "[~@4 d3 ~ d3 gb2 ~ gb2 ~@2 f2 ~ g2 g2@6 ~@3 g2 ~ f2 ~ g2@2 ~ g2]/2",
  BP: "[~@4 d3 ~ d3 gb2 ~ gb2 ~ c3 d3 ~ f3 a3@7 ~@2 g2 ~ f2 ~ g2@2 ~ g2]/2",
  BQ: "[~@4 db3 ~ db3 ~ f2!2 ~@5 gb2@8 ~ gb2 ~ e2 ~ eb2@2 ~ eb2]/2",
  BR: "[~@4 ab2@5 ~@3 db2 ~@2 c2@6 ~@11, ~@4 ab1@3 ~@25]/2",
})).s("gm_acoustic_bass").gain(0.38)

// bass · acoustic bass · soft notes
const bass_soft = note(`<
  ~@5 A ~@2 B ~@4 C ~@4 D ~@4 E ~@6 F ~@4 G ~@12 H ~@16 I ~@2 J ~@4 K@2 ~@2 L M ~@3 J ~@7 N ~ O ~@7 P ~@8 Q ~@10
>`.pickRestart({
  A: "~@11 eb3 ~@4", B: "~@10 a3 ~ b2 ~@3", C: "~@6 ab2 ~", D: "~@10 a3 ~@5", E: "c3 ~@15", F: "~@4 ab2 ~@3",
  G: "~@6 a3 ~@9", H: "~@3 d2 ~@12", I: "~@11 bb1 ~@4", J: "~@3 f1 ~@12", K: "[~@11 bb1 f1@7 ~@13]/2",
  L: "~@3 d2@8 ~@5", M: "~@5 g1 ~@10", N: "~@3 c1 f1 ~@11", O: "~@6 c1 ~@9", P: "~@11 g1@2 ~@3",
  Q: "~@2 e3 ~@3 a3 e3 ~@8",
})).s("gm_acoustic_bass").gain(0.21)

// chords · vibraphone
const vibraphone = note(`<
  A@2 B@5 C@5 D@5 E@4 F@2 G@2 H I J@2 K@2 L@2 M@4 N@2 O@2 P@2 Q@3 R@8 S T S U V W S ~@16 X Y Z AA AB AC AD AE AF AG AH
  AI AJ AK AL AM AN AO AP AQ AR AS AT AU AV@2 AW@2 AX@6 AY@2 AZ@2 BA@2 BB@3
>`.pickRestart({
  A: "[~@7 [bb5,db6,e6,gb6,a6]@6 ~@2 [ab5,bb5,eb6,g6]@15 ~@2]/2", // Gb7 Eb
  B: "[~@7 [bb5,db6,e6,gb6,a6]@6 ~@2 [ab5,bb5,eb6,g6]@18 ~@6 [bb5,db6,e6,gb6,a6]@6 ~@2 [ab5,bb5,eb6,g6]@18 ~@2 [eb4,eb5,a5,d6,gb6]@3 ~@2 [eb4,eb5,a5,db6,f6] ~@6 [a5,c6,eb6]]/5", // Gb7 Eb Gb7 Eb D Dbaug Adim
  C: "[[b5,db6]@12 ~@3 [a4,g5,b5,db6,eb6,gb6]@14 ~@2 [ab4,gb5,bb5,db6,f6]@20 ~@4 [bb5,db6,e6,gb6,a6]@6 ~@2 [ab5,bb5,eb6,g6]@15 ~@2]/5", // Bsus2 B7 Gbmaj7 Gb7 Eb
  D: "[~@7 [bb5,db6,e6,gb6,a6]@5 ~@3 [ab5,bb5,eb6,g6]@19 ~@5 [bb5,db6,e6,gb6,a6]@6 ~@2 [ab5,bb5,eb6,g6]@18 ~@2 [eb4,eb5,a5,d6,gb6]@3 ~@2 [eb4,eb5,a5,db6,f6] ~@6 eb6]/5", // Gb7 Eb Gb7 Eb D Dbaug
  E: "[[ab4,gb5,b5,db6]@12 ~@3 [a4,g5,db6,gb6]@14 ~@2 [ab4,gb5,bb5,db6,f6]@20 ~@5 [d5,c6,e6,g6,b6] ~ [d5,g6] [gb4,d6,e6,f6,bb6,d7] ~ [gb4,d6,f6,bb6,d7] ~@2]/4", // Abm7 Gbm Gbmaj7 Cmaj7 G5 Bb
  F: "[~@3 [g4,g5,d6,e6,g6]@17 ~@4 [d5,c6,e6,g6,b6] ~ [d5,e6,g6] [gb4,d6,f6,bb6,d7] ~ [gb4,d6,f6,bb6,d7] ~@2]/2", // Em7 Cmaj7 Em7 Bb
  G: "[~@3 [g4,d5,g5,f6,a6,b6,db7,e7]@17 ~@4 [db5,b5,eb6,gb6,bb6] ~ [db5,b5,gb6,bb6] [db6,e6,a6] ~ [db6,e6,a6,db7] ~@2, ~@3 f7 ~@28]/2", // G7 Ebm7 Gb A
  H: "~@3 [gb4,gb5]@9 gb4 ~ e4 ~, ~@3 [db6,gb6]@11 ~@2, ~@3 bb5 ~@12", // Gb Gb5
  I: "[eb4,eb5,db6]@6 ~@2 [ab4,gb5,b5,eb6,gb6]@5 ~@3", // Eb7 Abm7
  J: "[[db5,b5,eb6,gb6,bb6] ~@2 [c5,bb5,e6,a6]@8 [ab5,eb6,g6]@15 ~@6, ~@11 bb5 ~@20]/2", // Ebm7 Am Abmaj7
  K: "[~@3 [bb5,db6,e6,gb6,a6]@6 ~@2 [ab5,bb5,eb6,g6]@19 ~@2]/2", // Gb7 Eb
  L: "[~@3 [bb5,db6,e6,a6]@6 ~@2 [ab5,bb5,eb6,g6]@18 ~@3]/2", // A Eb
  M: "[[eb4,eb5,a5,d6,gb6]@3 ~ [eb4,eb5,a5,db6,f6] ~@6 eb6 [ab4,b5,db6]@14 ~ [a4,g5,db6,gb6]@14 ~@2 [ab4,gb5,bb5,db6,f6]@20 ~]/4", // D Dbaug Db7 Gbm Gbmaj7
  N: "[~@4 [d5,c6,e6,g6,b6] ~ [d5,e6,g6] [gb4,d6,f6,bb6,d7] ~ [gb4,d6,f6,bb6,d7] ~@5 [g4,c6,d6,e6,g6]@16 g5, ~@15 g5@11 ~@6]/2", // Cmaj7 Em7 Bb C
  O: "[~@4 [d5,c6,e6,g6,b6] ~ [d5,c6,e6,g6,b6] [gb4,gb5,d6,f6,bb6,d7] ~ [gb4,gb5,d6,f6,bb6,d7] ~@5 g5@7 ~@2 g5 ~ f5 ~ g5@2 ~ g5, ~@15 [g4,f6,a6,b6,db7,e7]@16 ~]/2", // Cmaj7 Bb A7
  P: "[~@4 [db5,b5,eb6,gb6,bb6] ~ [db5,b5,eb6,gb6] [f4,f5,db6,e6,a6,db7] ~ [f4,f5,db6,e6,a6,db7] ~@5 [gb4,db5,gb5,db6,eb6,gb6]@9 [gb4,gb5] ~ e4 ~ [eb4,eb5,g5,bb5,db6]@3 [eb4,g5,bb5,db6]]/2", // Ebm7 B A Ebm7 Gb Eb7
  Q: "[~@4 [ab4,gb5,b5,eb6,gb6]@7 ~ [db5,b5,eb6,gb6,bb6] ~@2 [c5,bb5,e6,a6]@29 [d3,d4,e5,gb5]@4, ~@15 db6 ~@28 c5 ~@3]/3", // Abm7 Ebm7 Am D
  R: "[~@12 [a3,a4,db5,gb5,a5]@14 ~@2 [d3,d4,b4,c5,e5,gb5,a5]@14 ~@2 [a3,a4,db5,gb5,a5]@14 ~@2 [d3,d4,b4,c5,e5,a5]@14 ~@2 [a3,a4,db5,gb5,a5]@14 ~@2 [d3,d4,b4,c5,e5,a5]@14 ~@2 [a3,a4,db5,gb5,a5]@14 ~@2 [d3,d4,b4,c5,e5,a5]@2 ~ [d3,d4,b4,e5,gb5,a5]]/8", // Gbm D7 Gbm Am Gbm Am Gbm Am …
  S: "~@12 [a3,a4,db5,gb5,a5]@2 ~ [a3,a4,db5,gb5,a5]", T: "~@12 [d3,d4,b4,c5,e5,gb5,a5]@2 ~ [d3,d4,b4,c5,e5,a5]",
  U: "~@12 [d3,d4,b4,c5,gb5,a5]@2 ~ [d3,d4,b4,c5,e5,gb5,a5], ~@12 e5 ~@3", V: "~@12 [a3,a4,db5]@2 ~ [a3,a4,db5,gb5,a5]",
  W: "~@12 [d3,d4,b4,c5]@2 ~ [d3,d4,b4,c5,e5,a5], ~@12 [e5,a5] ~@3", X: "~@14 a4 g4",
  Y: "~ a4 ~ f4 ~@5 g4 ab4 a4 bb4 c5 d5 f5", Z: "g5 ~@2 d5 f5 g5 [g5,a5] ~ g5 f5 g5 a5 g5@2 f5 d5",
  AA: "f5 ~ d5 ~@6 [g4,a4,bb4,d5]@3 ~ g5 f6 ~", // Gm
  AB: "d6 c6 f5 bb5 ~ a5 g5 f5 d5 [g5,a5] [f5,g5] [c5,d5] [d5,f5] [ab4,b4] a4 [f4,g4]", // Gsus2 Fsus2 Csus2 Dm Abm Fsus2
  AC: "d4 c4 d4 ~@5 c4 d4 f4 g4 ~ f4 g4 a4", AD: "bb4 c5 d5 f5 ~ g5 f5 ~ f5 d5 ~ f5 ~ f5 d5 ~",
  AE: "[e5,f5] ~ f5 ~@2 f5 d5 ~ f5!2 d5 c5 ~ [g5,a5] g5 f5", // Fmaj7 Gsus2
  AF: "g5 a5 g5 [d5,f5] [c5,f5] [b4,d5] [ab4,a4] [ab4,c5] [f4,g4] [c4,d4] d4 [eb4,e4] [f4,gb4] g4@2 ~", // Dm F5 Bm Amaj7 Ab Fsus2 Csus2 Emaj7 …
  AG: "ab4 [gb4,g4] f4 c4 bb3 g3 ab3 g3 f3 g3 ~@2 [c4,g4,ab4]@3 ~", // Gmaj7 Abmaj7
  AH: "bb4 c5 d5 eb5 f5 g5 ab5 bb5 ab5 ~@2 g5 f5@2 g5 eb5",
  AI: "~ f5 c5 ~@2 bb4 ~ ab4 g4@2 f4 g4 c4 ~ f4 c4, ~@8 ab4 ~@7",
  AJ: "~ f4 bb4 f4 bb4 [g4,ab4] bb4 [bb4,b4] g4 [ab4,bb4] [b4,c5] [d5,eb5] e5 [f5,gb5] [g5,bb5] [g5,ab5]", // Abmaj7 Bmaj7 Absus2 Cmaj7 Ebmaj7 Gbmaj7 Gm Abmaj7
  AK: "[f5,g5] [c5,eb5] [f5,g5] [c5,eb5] [g4,bb4] [bb4,c5] [f4,g4] [c4,eb4] [f4,g4] [bb3,c4,eb4] ab3 [f3,g3] eb3 ~@3", // Fsus2 Cm Fsus2 Cm Gm Bbsus2 Fsus2 Cm …
  AL: "[ab4,c5] ~@2 bb3 g3 ~ a3 bb3 b3 c4 db4 d4 f4 ~ g4 ~", AM: "ab4 ~ bb4 g4 ab4 bb4 c5 d5 eb5 f5!2 ~@2 bb5 ~ ab5",
  AN: "[gb5,g5] ~ f5 g5 [eb5,f5] eb5 ~ c5 d5@2 eb5 [db5,d5] ~ c5 bb4!2", // Gmaj7 Ebsus2 Dmaj7
  AO: "a4 [g4,ab4] [f4,g4] a4 bb4 ~@4 a4 ~ g4!2 a4 f4 g4", AP: "f4 c4 ~ d4 ~@9 bb4 gb4 g4",
  AQ: "a4 bb4 db5 d5 e5 f5 bb5 ~ a5 ~ f5 ~ g5 ~@3", AR: "~ f6 c6 ~ eb6 ~ d6 ~ c6 d6 c6 ~ bb5 [ab5,a5] ab5 [c5,f5]",
  AS: "bb4 [a4,c5] [a4,bb4] [ab4,a4] f4 [bb3,c4] [ab3,a3] [f3,g3] [c3,d3] [a2,bb2] g2 f2 ~@4", // Am Bbmaj7 Amaj7 Bbsus2 Amaj7 Fsus2 Csus2 Bbmaj7
  AT: "~@2 c4 f4 g4 bb4 ~ ab4 a4 ~ g4 f4 ~ g4 [ab4,a4] ~", AU: "f4 ~ d4 ~@6 g4 a4 bb4 c5 f5 a4@2, ~@14 ab4 ~",
  AV: "[~@3 [bb5,e6,a6]@6 ~@2 [ab5,c6,eb6,g6]@17 ~@4, ~@3 c5@8 ~@21]/2", // A Abmaj7
  AW: "[~@3 [c5,bb5,e6,a6]@6 ~@2 [ab5,c6,eb6,g6]@18 ~@3]/2", // Am Abmaj7
  AX: "[~@3 [c5,bb5,e6,a6]@6 ~@2 [f4,ab5,c6,eb6,g6]@17 ~@3 [eb4,a5,db6,gb6]@4 ~ [eb4,a5,db6,f6] ~@6 eb6 [ab4,b5,db6]@13 ~@2 [a4,g5,db6,gb6]@14 ~@2 [ab4,bb5,db6,f6]@21]/6", // Am Fm7 Ebm7b5 Dbaug Db7 Gbm Bbm7
  AY: "[~@4 b6 ~ b6 d7 ~ d7 ~@5 [g4,d5]@15 ~@2, ~@15 [b5,d6]@12 ~@5]/2", // G5 Bm
  AZ: "[~@4 [d5,c6,e6,g6,b6] ~@2 [d6,f6,bb6] ~ [gb4,d6,f6,bb6] ~@5 [g4,g5,f6,a6,e7]@12 ~@5]/2", // Cmaj7 Bb Fmaj7
  BA: "[~@4 [db5,b5,db6,eb6,gb6] ~ [db5,gb6] [f4,e6,a6] ~ [f4,db6,e6,a6] ~@5 [gb4,db5,db6,gb6]@9 ~@4 [eb4,bb5,eb6]@4]/2", // B Gb5 Fmaj7 A Gb5 Eb5
  BB: "[~@4 [eb5,b5,eb6,gb6]@5 ~@3 [db5,b5,eb6,gb6] ~@2 [c5,e6,a6]@20 ~@13, ~@15 bb5@11 ~@22]/3", // B Am
})).s("gm_vibraphone").gain(0.15).pan(0.6)

// chords · vibraphone · soft notes
const vibraphone_soft = note(`<
  ~@7 A ~@12 B C@2 D E F G ~@6 H@2 ~@2 I J ~@3 K ~@2 L@2 ~@2 M@4 N ~ O ~@2 P Q ~@24 R S ~@4 T U V ~@3 W ~@3 X Y@2 Z@2
  ~@2 H@2 AA@2 AB@2 AC ~ AD@2 AE ~@2
>`.pickRestart({
  A: "~@3 ab4@10 ~@3, gb5@3 ~", B: "~@10 [c6,e6,b6] ~@5", C: "[~@4 c6@15 ~@7 [c6,b6] ~@5]/2", D: "~@3 c7 ~@12",
  E: "~@10 eb6 ~@5", F: "~@9 eb6@4 ~@3", G: "[g5,bb5]@5 ~@11", H: "[~@12 gb5@13 ~@7]/2", I: "~@6 [c6,b6] ~@9",
  J: "~@6 g5 ~", K: "~@10 e5 ~@5", L: "[~@6 [b4,a5]@7 ~@3]/2", M: "[~@6 gb5@7 ~@3]/2", N: "~@12 gb5@2 ~ c5",
  O: "~@15 gb5", P: "~@6 [gb5,a5] ~", Q: "~@12 gb5@2 ~ gb5", R: "~@3 d5 ~@12", S: "~@10 db4 ~@5", T: "~@10 a3 ~@5",
  U: "f4 ~@15", V: "~@9 e5 ~@6", W: "~@11 c5 ~@4", X: "~ c4 ~@14", Y: "[~@11 f4@17 ~@4]/2", Z: "[~@11 f4@18 ~@3]/2",
  AA: "[~@11 gb5@20 ~]/2", AB: "[~@15 g5@15 ~@2, ~@15 a5@12 ~@5]/2", AC: "~@6 [c6,e6,g6,b6] gb4 ~@8",
  AD: "[~@6 [b5,eb6] db6 ~@8 ab5@9 ~@3 [eb5,g5]@4, ~@15 bb5@9 ~@8]/2", AE: "~@4 [ab4,gb5]@5 ~@7",
})).s("gm_vibraphone").gain(0.08).pan(0.6)

// drums · kick
const kick = s("bd").struct(`<
  A B C B C B@2 D B D B@2 C B E B@3 D B@3 F B@3 G H I J I J I@2 K I@3 L I@2 L M N O P I@31 Q F B F@3 R F S F R F T F B@2
  S U I@5 V W I J K J I@2 K I L I L I L@2 X Y ~@2
>`.pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~@4 x ~@6 x ~@4", D: "~@4 x ~@6 x!2 ~@3", E: "~@3 x!2 ~@6 x ~@4",
  F: "~@3 x!2 ~@7 x ~@3", G: "~@3 x ~@12", H: "x ~@2 x ~@12", I: "x!2", J: "x ~@6 x ~@8", K: "x ~@6 x!2 ~@7",
  L: "x ~@7 x ~@6 x", M: "x ~@7 x ~@3 x ~@2 x", N: "~@4 x ~@7 x ~@2 x", O: "~@15 x", P: "~ x ~ x!2 ~@7 x ~@3",
  Q: "x ~ x!2", R: "~@3 x ~@2 x ~@5 x ~@3", S: "~@3 x ~@8 x ~@3", T: "~@3 x ~@2 x ~", U: "~ x", V: "x",
  W: "x ~@2 x ~@4 x ~@7", X: "~@8 x ~ x ~ x ~@2 x", Y: "~@12 x ~@2 x",
})).gain(0.42)

// drums · rim
const rim = s("rim").struct("<~@45 A B@15 C D E F G E H I ~ J K L M N ~ O P ~@42>".pickRestart({
  A: "~@14 x!2", B: "x!16", C: "x!5 ~@11", D: "~ x ~@2 x ~@9 x ~", E: "~ x ~@14", F: "~ x ~@2 x ~@2 x ~@8", G: "~@7 x",
  H: "~@5 x ~@2 x ~@7", I: "~ x ~@2 x ~@2 x ~@2 x ~@5", J: "~ x ~@7 x ~@2 x ~@3", K: "~@6 x ~@2 x ~@6",
  L: "~@9 x ~@2 x ~@3", M: "~@13 x ~@2", N: "x ~@8 x ~@2 x ~@3", O: "~ x ~@2 x ~@8 x ~@2", P: "x",
})).gain(0.3)

// drums · snare
const snare = s("sd").struct(`<
  A B C D E F G H I J K L I M N I O P Q I R S T I U V W X Y Z AA AB AC AD AE AF S AG AH AI AJ AK AL ~@2 AM ~@32 AN@2
  AO@2 AN AO AN AO AN AO AN@2 AO@2 AN ~@8 AP AQ AR AS S AT AQ AR AU AR AV S AW AX AY AZ ~@3
>`.pickRestart({
  A: "~@10 x!2 ~@2 x ~", B: "~@2 x!2 ~@3 x ~@7 x", C: "~@2 x!2 ~@3 x ~@8", D: "~@3 x ~@2 x ~@4 x ~@3 x",
  E: "~@3 x ~@2 x!2 ~@3 x ~@2 x ~", F: "~@3 x ~ x!3 ~@3 x ~@2 x ~", G: "~@3 x ~@2 x ~@9", H: "~@3 x ~@2 x ~@3 x!3 ~@3",
  I: "~@2 x!2 ~@2 x ~@4 x ~@2 x ~", J: "~@3 x ~@2 x ~@4 x ~@2 x ~", K: "~@2 x!2 ~ x ~@3 x ~@3 x ~@2",
  L: "~@2 x!2 ~@2 x ~@8 x", M: "~@2 x!2 ~@4 x!2 ~@2 x ~@2 x", N: "~@2 x!2 ~@12", O: "~@2 x!2 ~@2 x!2 ~@2 x ~@5",
  P: "~@2 x!2 ~@2 x ~@3 x!2 ~@2 x!2", Q: "~@3 x ~@2 x ~@2 x ~@3 x ~@2", R: "~@3 x ~@12",
  S: "~@2 x ~@3 x!2 ~@2 x ~@3 x!2", T: "~ x ~@4 x ~@9", U: "~ x ~ x ~ x ~ x ~@8", V: "~@2 x!2 ~@2 x ~@4 x ~@4", W: "x",
  X: "~@15 x", Y: "~@2 x ~@4 x ~@2 x ~@4 x", Z: "~ x ~@4 x ~@2 x ~@6", AA: "~@2 x!2 ~@2 x ~@4 x ~@2 x!2",
  AB: "~@3 x ~@2 x!2 ~@6 x!2", AC: "~@2 x ~@3 x!2 ~@3 x ~@2 x!2", AD: "~@14 x!2", AE: "~@2 x ~@4 x ~@6 x!2",
  AF: "~@3 x ~ x ~@8 x!2", AG: "~ x ~@6", AH: "~@2 x!2 ~@2 x ~@3 x!2 ~@2 x ~", AI: "~@3 x ~ x ~@10",
  AJ: "~@2 x!2 ~@2 x ~@3 x!2 ~ x ~@2", AK: "~@2 x ~@12 x", AL: "~@2 x ~@3 x!6 ~@4", AM: "~@8 x!3 ~@5", AN: "x!2",
  AO: "x ~@8 x ~@6", AP: "~@6 x ~@3 x ~@3 x!2", AQ: "~ x!3 ~@2 x!2 ~@2 x ~@4 x", AR: "~@2 x ~@3 x!2 ~ x!3 ~@2 x!2",
  AS: "~@2 x ~@3 x!2 ~@2 x!2 ~@2 x!2", AT: "~ x ~ x ~@2 x!2 ~@2 x ~@3 x!2", AU: "~@2 x!2 ~@2 x!2 ~@2 x ~@3 x!2",
  AV: "~@2 x ~@3 x!2 ~@6 x!2", AW: "~ x!3 ~@10 x!2", AX: "~@2 x ~@4 x ~@3 x ~@2 x!2", AY: "~@2 x ~@11 x!2",
// … 121 more lines