Strudelify

Easy Lover

Phil Collins

KeyA♭ majorTempo132 bpm
0:00/0:00
// Easy Lover — Phil Collins
// 132 bpm, 4/4, key Ab major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 11 overdriven guitar (copy of ch 9 distortion guitar, 0.104 beats late)
// note: Full arrangement: all 144 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(132/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: edit a riff to change every repeat.

// chords · synth strings 1 · "Everything"
const synth_strings_1 = note(`<
  A@4 B@5 C@4 D@4 E@4 F@8 G@2 ~@15 H@2 I J I J I K@4 F@4 L@4 F@4 G@2 ~@15 H@2 I J I J I M@4 N@5 O@3 P Q@4 R@4 S@4 I T I
  T I U@4 F@16 ~
>`.pickRestart({
  A: "[[bb3,db4,eb4,ab4]@15 [c4,eb4,ab4]@17]/4", // Bbm7 Ab
  B: "[[db4,f4,bb4,c5]@30 [eb4,ab4,bb4,c5]@15 ~ [ab3,db4,f4]@8 [bb3,eb4,g4]@8 [c4,eb4,ab4]@18]/5", // Bbm Ab Db Eb Ab
  C: "[[bb3,db4,ab4]@6 [c4,eb4,g4]@8 [c4,eb4,ab4]@15 ~ [ab3,db4,f4]@8 [bb3,eb4,g4]@8 [c4,eb4,ab4]@17 ~]/4", // Bbm7 Cm Ab Db Eb Ab
  D: "[[ab3,db4,f4]@6 [bb3,eb4,g4]@8 [c4,eb4,ab4]@16 [ab3,db4,f4]@8 [bb3,eb4,g4]@8 [c4,eb4,ab4]@17 ~]/4", // Db Eb Ab Db Eb Ab
  E: "[[bb3,db4,ab4]@3 [bb3,eb4,g4]@4 [c4,eb4,ab4]@8 [ab3,db4,f4]@4 [bb3,eb4,g4]@4 [c4,eb4,ab4]@9]/4", // Bbm7 Eb Ab Db Eb Ab
  F: "[[bb3,db4,ab4]@6 [bb3,eb4,g4]@8 [c4,eb4,ab4]@16 [ab3,db4,f4]@8 [bb3,eb4,g4]@8 [c4,eb4,ab4]@17 ~]/4", // Bbm7 Eb Ab Db Eb Ab
  G: "[[bb3,db4,ab4]@4 [bb3,eb4,g4]@3 [c4,eb4,ab4]@7 ~@2]/2", H: "[~@14 [ab3,db4,f4]@17 ~]/2",
  I: "[bb3,eb4,g4]@3 [c4,f4,ab4]@5", J: "[ab3,db4,f4]",
  K: "[[db4,f4,bb4]@29 ~ [ab3,db4,f4]@8 [bb3,eb4,g4]@8 [c4,eb4,ab4]@17 ~]/4", // Bbm Db Eb Ab
  L: "[[bb3,db4,ab4]@6 [bb3,eb4,g4]@8 [eb4,ab4]@16 [ab3,db4,f4]@8 [bb3,eb4,g4]@8 [c4,eb4,ab4]@17 ~, ~@7 c4@7 ~@18]/4", // Bbm7 Eb Ab5 Db Eb Ab
  M: "[[db4,f4,ab4,bb4]@30 [c4,eb4,f4,ab4]@33 ~]/4", // Bbm7 Fm7
  N: "[[db4,f4,bb4,c5]@30 [eb4,f4,ab4,bb4,c5]@16 [ab3,db4,f4]@8 [bb3,eb4,g4]@8 [c4,eb4,ab4]@17 ~]/5", // Bbm Fm7 Db Eb Ab
  O: "[[ab3,db4,f4]@3 [bb3,eb4,g4]@4 [c4,eb4,ab4]@8 [ab3,db4,f4]@4 [bb3,eb4,g4]@5]/3", P: "[c4,eb4,ab4]",
  Q: "[[ab3,db4,f4]@6 [bb3,eb4,g4]@8 [c4,eb4,ab4]@15 ~ [ab3,db4,f4]@7 ~ [bb3,eb4,g4]@7 ~ [c4,eb4,ab4]@17 ~]/4", // Db Eb Ab Db Eb Ab
  R: "[[ab3,db4,f4]@5 ~ [bb3,eb4,g4]@7 ~ [c4,eb4,ab4]@16 [ab3,db4,f4]@7 ~ [bb3,eb4,g4]@8 [c4,eb4,ab4]@17 ~]/4", // Db Eb Ab Db Eb Ab
  S: "[[ab3,db4,f4]@6 [bb3,eb4,g4]@7 ~ [c4,eb4,ab4]@15 ~ [ab3,db4,f4]@7 ~ [bb3,eb4,g4]@8 [ab3,db4,f4]@17 ~]/4", // Db Eb Ab Db Eb Db
  T: "[ab3,db4,f4]@15 ~", U: "[[db4,f4,ab4,bb4]@30 [ab3,db4,f4]@8 [bb3,eb4,g4]@8 [c4,eb4,ab4]@17 ~]/4",
})).s("gm_synth_strings_1").gain(0.49)

// bass · electric bass finger
const bass = note(`<
  A@4 B@5 C@8 D@4 E@4 F@3 G H@2 I J K L M N O P K J K L M Q@2 R@2 S T U@2 V W@4 X Y@3 Z@4 AA@3 AB AC@2 I J K L M N O P K
  J K L M AD@2 R@2 AE AF AG@2 AH AI@4 AJ@5 AK@3 AL AM AN@2 AO AP@4 AQ AR@3 AS@4 AT AU@4 AV@4 AW@4 X AX@3 AW@4 X
>`.pickRestart({
  A: "[gb1@27 ~ gb1@2 f1@31 ~@3]/4", B: "[gb1@13 ~ gb1 f1@7 ~ db2@4 eb2@4 f2@2 f2 eb2 c2 f2 ~ c2 b1]/5",
  C: "[bb1@5 ~ c2@7 ~ f2@4 f2@2 eb2@2 c2@2 f2@2 ~@4 db2@7 ~ eb2@7 ~ f2@4 f2@2 eb2@2 c2@2 f2@2 ~@2 c2@2 b1@2]/4",
  D: "[bb1@5 ~ c2@4 eb2@2 c2@2 f2@4 f2@2 eb2@2 c2@2 f2@2 ~@4 db2@8 eb2@8 f2@4 f2@2 eb2@2 c2@2 f2@2 ~@2 c2@2 b1@2]/4",
  E: "[bb1@5 ~ c2@8 f2@4 f2@2 eb2@2 c2@2 f2@2 ~@4 db2@7 ~ eb2@7 ~ f2@4 f2@2 eb2@2 c2@2 f2@2 ~@2 ab1@2 a1@2]/4",
  F: "[bb1@5 ~ c2@7 ~ f2@4 f2@2 eb2@2 c2@2 f2@2 ~@4 db2@7 ~ eb2@7 ~ f2@2]/3", G: "~ f2 eb2 c2 f2 ~ ab1 a1",
  H: "[bb1@8 c2@5 ~ f1@6 f2@4 f1@4 f2@4]/2", I: "db2 ~@2 c2 db2 ~@3", J: "db2 ~@2 db2 ~ c2 ~ db2", K: "~@3 c2 db2 ~@3",
  L: "db2 ~@2 db2 ~ eb2 ~ f2", M: "~ f2 eb2 c2 f2 ~@2 eb2", N: "f2 ~@2 f2 ~ eb2 ~ f2", O: "~ f2 eb2 c2 f2 ~@3",
  P: "f2 ~@2 f2 ~ c2 ~ db2", Q: "[f2 ~@2 f2 ~ c2 ~ f2@2 f2 eb2 c2 f2 ~@3]/2", R: "[f2 ~@2 f2 ~ c2 b1 bb1@2 bb1!7]/2",
  S: "c2@5 ~ f2@4 c2@2 b1@2 bb1@2", T: "~ bb1!7", U: "[c2!3 f2@2 c2 b1 bb1@2 bb1!7]/2",
  V: "c2 ~ c2@2 c2@2 f2@5 ~ f2@3 ~", W: "[gb2@28 ~@2 db2@8 eb2@7 ~ f2@4 f2@2 eb2@2 c2@2 f2@2 ~@2 ab1@2 a1@2]/4",
  X: "bb1@5 ~ c2@4 eb2@2 c2@2 f2@2", Y: "[~ f2 eb2 c2 f2 ~@2 db2@4 eb2@4 f2@2 f2 eb2 c2 f2 ~ c2 b1]/3",
  Z: "[bb1@5 ~ c2@8 f2@4 f2@2 eb2@2 c2@2 f2@2 ~@4 db2@7 ~ eb2@7 ~ f2@4 f2@2 eb2@2 c2@2 f2@2 ~@2 c2@2 b1@2]/4",
  AA: "[bb1 ~ bb1 c2@2 eb2 c2 f2@2 f2 eb2 c2 f2 ~@2 db2@2 db3 db2 eb2@2 eb3 eb2 f2]/3", AB: "~ f2 eb2 c2 f2 ~ c2 b1",
  AC: "[bb1@3 c2@4 f2@3 f2@2 f1@2 f2@2]/2", AD: "[f2 ~@2 f2 ~ eb2 ~ f2@2 f2 eb2 c2 f2 ~@3]/2",
  AE: "c2!3 f2@2 c2 b1 bb1", AF: "~ bb1!6 bb2", AG: "[f1!5 c2 b1 bb1@2 bb1!7]/2",
  AH: "c2 ~ c2@2 c2@2 f2@4 f2@2 f2@2 f2@2", AI: "[gb2@27 ~ gb2@2 f2@33 ~]/4",
  AJ: "[gb2@27 ~ gb2@2 f2@12 c3@4 db2@7 ~ eb2@6 ~@2 f2@4 f2@2 eb2@2 c2@2 f1@4 c2@4]/5",
  AK: "[bb1@4 bb1@2 c2@4 eb2@2 c2@2 f2@4 f2@2 eb2@2 c2@2 f2@4 ~@2 db2@7 ~ eb2@6 eb2@4]/3",
  AL: "f2!2 eb2 c2 f1@2 ab1 a1", AM: "bb1@5 ~ b1@2 c2@2 eb2@2 e2@2 f2@2",
  AN: "[~@2 f2@2 eb2@2 c2@2 f2@5 ~ db2@4 db3@2 db2@2 eb2@4 eb3@2 eb2@2 f2@2]/2", AO: "~ f2 eb2 c2 f1@2 ab1 a1",
  AP: "[bb1@6 c2@4 eb2@2 c2@2 f2@4 f2@2 eb2@2 c2@2 f2@3 ~@3 db2@8 eb2@7 ~ f2@4 f2@2 eb2@2 c2@2 f1@4 ab1@2 a1@2]/4",
  AQ: "bb1@3 b1 c2 eb2 e2 f2",
  AR: "[~@2 f2@2 eb2@2 c2@2 f2@5 ~ db2@8 eb2@4 c2@2 b1@2 bb1@4 bb1 ~ bb1@2 bb1@2 bb1@2 bb1@2 bb1@2 bb1@2]/3",
  AS: "[c2@2 c2@2 c2@2 f2@3 ~ c2@2 b1@2 bb1@4 bb1@2 bb1@2 bb1@2 bb1@2 bb1@2 bb1@2 bb1@2]/2", AT: "c2!3 f2@3 f2@2",
  AU: "[gb2@28 ~@2 db2@8 eb2@7 ~ f2@4 f2@2 eb2@2 c2@2 f1@2 ~@2 ab1@2 a1@2]/4",
  AV: "[bb1@5 ~ c2@4 eb2@2 c2@2 f2@4 f2@2 eb2@2 c2@2 f2@2 ~@4 db2@8 eb2@8 f2@4 f2@2 eb2@2 c2@2 f1@2 ~@2 c2@2 b1@2]/4",
  AW: "[bb1@5 ~ c2@8 f2@4 f2@2 eb2@2 c2@2 f2@2 ~@4 db2@7 ~ eb2@7 ~ f2@4 f2@2 eb2@2 c2@2 f1@2 ~@2 ab1@2 a1@2]/4",
  AX: "[~ f2 eb2 c2 f2 ~@2 db2@4 eb2@4 f2@2 f2 eb2 c2 f1 ~ c2 b1]/3",
})).s("gm_electric_bass_finger").gain(0.65)

// chords · synth brass 1
const synth_brass_1 = note(`<
  ~@31 A B C D E F G H C B C D E F G I ~@24 A B C D E F G H C B C D E F G I ~@46 J K L ~ J M N ~ O P ~
>`.pickRestart({
  A: "[f4,ab4] ~@5 [eb4,g4] ~ [f4,ab4] ~@7", B: "[f4,ab4] ~@5 [f4,ab4] ~@3 [eb4,g4] ~@3 [f4,ab4] ~",
  C: "~@6 [eb4,g4] ~ [f4,ab4] ~@7", D: "[f4,ab4] ~@5 [f4,ab4] ~@3 [g4,bb4] ~@3 [ab4,c5] ~",
  E: "~@2 [ab4,c5] ~ [g4,bb4] ~ [g4,bb4] ~ [ab4,c5] ~@5 [g4,bb4] ~", // Ab Gm Ab Gm
  F: "[ab4,c5] ~@5 [ab4,c5] ~@3 [g4,bb4] ~@3 [ab4,c5] ~", G: "~@2 [ab4,c5] ~ [g4,bb4] ~ [g4,bb4] ~ [ab4,c5] ~@7",
  H: "[ab4,c5] ~@5 [ab4,c5] ~@3 [g4,bb4] ~@3 [f4,ab4] ~", I: "[ab4,c5] ~@5 [ab4,c5] ~@9", J: "~@14 [f5,ab5] ~",
  K: "~@2 [f5,ab5] ~ [eb5,g5] ~@3 [f5,ab5] ~@3 [eb5,g5] ~@3", // Fm Eb Fm Eb
  L: "f5@2 ~@2 [g5,bb5]@2 [eb5,g5] ~@3 [c5,eb5] ~@5, db5 ~@15", // Gm Eb Cm
  M: "~@2 [f5,ab5] ~ [eb5,g5] ~@3 [f5,ab5] ~@3 [eb5,g5]@2 ~@2", // Fm Eb Fm Eb
  N: "[db5,f5] ~ [g5,bb5] eb5 ~ eb5 ~@2, ~@6 g5 ~@3 c5 ~@5", O: "~@7 ab5, ~@14 f5 ~",
  P: "~@2 ab5@2 [eb5,g5] ~@3 ab5@2 ~@2 eb5@2 ~@2, ~@2 f5 ~@5 f5 ~@3 g5 ~@3", // Eb
})).s("gm_synth_brass_1").gain(0.5)

// other · flute
const flute = note(`<
  A B C A B C A D E F ~ D G H ~@39 I J D G K ~ D G F ~ D G F ~ D L F ~@23 M J B C A B C N ~@22 M J O G P ~ O L Q ~ O R Q
  ~ O S Q ~ D G ~
>`.pickRestart({
  A: "c7 ~ f6 ~ f7 ~ f6 ~ eb7 ~ f6 ~ c7 ~ f6 ~", B: "f7 ~ f6 ~ eb7 ~ f6 ~ c7 ~ f6 ~ f7 ~ f6 ~",
  C: "eb7 ~ f6 ~ c7 ~ f6 ~ f7 ~ f6 ~ eb7 ~ f6 ~", D: "~@14 ab6 ~", E: "~@2 ab6 ~ g6@2 ~@2 ab6 ~@3 g6 ~@3",
  F: "f6 ~@3 bb6 ~ g6 ~@3 eb6 ~@5", G: "~@2 ab6 ~ g6 ~@3 ab6 ~@3 g6 ~@3", H: "f6 ~@3 bb6 ~ g6 ~@3 eb6 ~@3 f6 ~",
  I: "bb7@2 bb6 ~ ab7@2 ab6 ~ gb7@2 gb6 ~ f7 ~ f6 ~", J: "eb7 ~ eb6 ~ db7@2 db6 ~ c7 ~ c6 ~ bb6 ~@3",
  K: "f6@2 ~@2 bb6 ~ g6 ~@3 eb6 ~@5", L: "~@2 ab6 ~ g6 ~@3 ab6 ~@3 g6@2 ~@2",
  M: "bb7@2 bb6 ~ ab7@2 ab6 ~ gb7 ~ gb6 ~ f7 ~ f6 ~", N: "c7 ~ f6 ~ f7 ~ f6 ~@9", O: "~@7 ab6",
  P: "f6@2 ~@2 bb6@2 g6 ~@3 eb6 ~@5", Q: "f6@2 ~@2 bb6 ~ g6 ~@3 eb6@2 ~@4", R: "~ ab6 g6 ~ ab6 ~ g6 ~",
  S: "~@2 ab6 ~ g6@2 ~@2 ab6 ~@3 g6@2 ~@2",
})).s("gm_flute").gain(0.49).pan(0.4)

// chords · sitar
const sitar = note("<A B C A D E A ~@88 B C A D E F ~@43>".pickRestart({
  A: "c7 ~ f6 ~ [ab6,f7] ~ bb6 ~ [c7,eb7] ~@3 c7 ~@3", B: "[ab6,f7] ~ bb6 ~ [c7,eb7] ~@3 c7 ~@3 [ab6,f7] ~ bb6 ~",
  C: "[c7,eb7] ~@3 c7 ~ f6 ~ [ab6,f7] ~ bb6 ~ [c7,eb7] ~@3", // Cm Db Cm
  D: "[ab6,f7] ~ bb6 ~ [c7,eb7] ~@3 c7 ~ f6 ~ [ab6,f7] ~ bb6 ~", // Db Cm Db
  E: "[c7,eb7] ~@3 c7 ~ f6 ~ [ab6,f7] ~ bb6 ~ [c7,eb7] ~ f6 ~", F: "c7 ~ f6 ~ [ab6,f7] ~ bb6 ~@9",
})).s("gm_sitar").gain(0.58).pan(0.6)

// other · brass section
const brass_section = note(`<
  ~@15 A@2 B@2 C@2 D E F@2 G@2 H@2 I@2 ~@23 J@3 K L C@2 M@2 F@2 G@2 H@2 N@2 ~@23 O@3 ~@27 J@3 K L C@2 D P F@2 Q L H@2
  R@2 A@2 ~
>`.pickRestart({
  A: "[~@8 bb4@3 ~ f5 ~ eb5@4 c5@2 ~@6 c5@2 f5@2 g5 ~]/2", B: "[gb5@4 g5@3 ~ eb5@4 c5 ~ f5@4 f5@2 ~@12]/2",
  C: "[~@8 b4@4 f5@2 eb5@4 c5@2 ~@6 c5@2 f5@2 g5 ~]/2", D: "gb5@2 ab5 ~ g5@2 g5@2 eb5@2 f5@4 f5@2, ~@14 e5 ~",
  E: "~ eb5 c5@2 ~@12", F: "[~@4 db5@2 db5 ~ b4@4 f5@2 eb5@4 c5@2 ~@6 c5@2 f5@2 g5 ~]/2",
  G: "[gb5@4 g5@3 ~ eb5@2 c5@3 ~ f5@4 f5@2 ~@12]/2",
  H: "[~@4 db5@3 ~ b4@4 f5@2 eb5@4 c5@2 ~@6 c5@2 f5@2 g5 ~, ~@4 c5 ~@27]/2",
  I: "[gb5@2 ab5 ~ g5@2 eb5@4 f5@4 f5@12 ~@6, ~@14 e5 ~@17]/2",
  J: "[~@14 db5@5 ~ db5@2 db5@6 f5@2 eb5@4 c5@2 ~@6 c5@2 f5@2 g5 ~]/3", K: "gb5@4 g5@3 ~ eb5@4 c5 ~ f5@2",
  L: "~ f5 ~@6", M: "[gb5@2 ab5 ~ g5@2 g5@2 eb5@2 f5@4 f5@3 eb5 c5 ~@13, ~@14 e5 ~@17]/2",
  N: "[gb5@2 ab5 ~ g5@2 eb5@4 f5@4 f5@9 ~@9, ~@14 e5 ~@17]/2",
  O: "[~@12 [bb4,g5]@2 [ab4,f5]@11 ~ [g4,eb5]@4 [ab4,f5]@18]/3", P: "~ eb5 c5 ~@13",
  Q: "gb5@4 g5@3 ~ eb5@2 c5@3 ~ f5@2", R: "[gb5@2 ab5 ~ g5@2 eb5@4 f5@4 f5@4 ~@14, ~@14 e5 ~@17]/2",
})).s("gm_brass_section").gain(0.64)

// chords · distortion guitar
const distortion_guitar = note(`<
  A@4 B@6 C@7 D@12 E@2 F G H I@2 J@2 K H G H I@2 J@2 L@2 M@2 N@2 O P@4 D@12 E@2 F G H I@2 J@2 K H G H I@2 J@2 L@2 M@2
  N@2 O A@4 Q@5 R@3 S T@4 U@4 V@4 M@2 N@2 O P@4 D@16 W
>`.pickRestart({
  A: "[[gb2,gb3]@27 ~ [gb2,gb3]@2 [f2,f3]@33 ~]/4", // Gb F
  B: "[[gb2,gb3]@27 ~ [gb2,gb3]@2 [f2,f3]@15 ~ [db3,ab3,db4]@8 [eb3,bb3,eb4]@8 [f3,c4,f4]@6 [bb3,b3,e4] [a3,d4,eb4] [g3,ab3,c4,db4] [gb3,b3] ~@2 [ab4,c5] ~ [ab4,c5] ~ [ab4,c5]@6 [g4,b4] [f4,gb4,a4,bb4] [eb4,e4,g4,ab4] [d4,gb4] [c4,db4,e4,f4] ~@5 eb3@2]/6", // Gb F Db5 Eb5 F5 E D Dbmaj7 …
  C: "[~@2 f3@2 eb3@2 c3@2 f3@2 ~@4 [db3,ab3,db4]@8 [eb3,bb3,eb4]@8 [f3,c4,f4]@6 [bb3,b3,e4] [a3,d4,eb4] [g3,ab3,c4,db4] [gb3,b3] ~@2 [ab4,c5] ~ [ab4,c5] ~ [ab4,c5]@6 [g4,b4] [f4,gb4,a4,bb4] [eb4,e4,g4,ab4] [d4,gb4] [c4,db4,e4,f4] ~@5 eb3@4 f3@2 eb3@2 c3@2 f3@2 ~@4 [db3,ab3,db4]@8 [eb3,bb3,eb4]@8 [f3,c4,f4]@6 [bb3,b3,e4] [a3,d4,eb4] [g3,ab3,c4,db4] [gb3,b3] ~@8]/7", // Db5 Eb5 F5 E D Dbmaj7 B5 Ab …
  D: "[~@14 f3@4 f3@2 eb3@2 c3@2 f3@2 ~@4 [db3,ab3,db4]@8 [eb3,bb3,eb4]@8 [f3,c4,f4]@6 [bb3,b3,e4] [a3,d4,eb4] [g3,ab3,c4,db4] [gb3,b3] ~@8]/4", // Db5 Eb5 F5 E D Dbmaj7 B5
  E: "[~@14 [f3,c4,f4]@14 [b3,e4] [bb3,eb4] [ab3,a3,db4,d4] [gb3,g3,b3,c4]]/2", F: "db3 ~@2 c3 db3 ~@3",
  G: "db3 ~@2 db3 ~ c3 ~ db3", H: "~@3 c3 db3 ~@3", I: "[db3 ~@2 db3 ~ eb3 ~ eb3@2 f3 eb3 c3 f3 ~@2 eb3]/2",
  J: "[f3 ~@2 f3 ~ eb3 ~ eb3@2 f3 eb3 c3 f3 ~@3]/2", K: "f3 ~@2 f3 ~ c3 ~ db3",
  L: "[f3@2 ~@4 f3@2 ~@2 c3@2 b2@2 bb2@4 f3 ~ [ab3,db4] ~ f3 ~ [ab3,db4] ~ f3 ~ [ab3,db4] ~ f3 ~]/2", // Db5
  M: "[g3@2 bb3@2 eb4@2 bb3@4 bb3@2 bb3@2 ab3@5 ~ [ab3,db4] ~ f3 ~ [ab3,db4] ~ f3 ~ [ab3,db4] ~ f3 ~]/2", // Db5
  N: "[g3@2 bb3@2 eb4@2 bb3@4 db4@2 f4@2 eb4@5 ~ [ab3,db4] ~ f3 ~ [ab3,db4] ~ f3 ~ [ab3,db4] ~ f3 ~]/2", // Db5
  O: "g3 bb3 eb4 bb3@2 bb3!2 ab3",
  P: "[[gb2,gb3]@28 ~@2 [db3,ab3,db4]@8 [eb3,bb3,eb4]@8 [f3,c4,f4]@6 [bb3,b3,e4] [a3,d4,eb4] [g3,ab3,c4,db4] [gb3,b3] ~@8]/4", // Gb Db5 Eb5 F5 E D Dbmaj7 B5
  Q: "[[gb2,gb3]@27 ~ [gb2,gb3]@2 [f2,f3]@15 ~ [db3,ab3,db4]@8 [eb3,bb3,eb4]@8 [f3,c4,f4]@12 ~@6]/5", // Gb F Db5 Eb5 F5
  R: "[[ab3,db4]@3 [bb3,eb4]@4 [c4,f4]@8 [ab3,db4]@4 [bb3,eb4]@5]/3", S: "[c4,f4]",
  T: "[[ab3,db4]@3 [bb3,eb4]@4 [c4,f4]@8 [ab3,db4]@4 [bb3,eb4]@4 [c4,f4]@8 ~]/4", // Db5 Eb5 F5 Db5 Eb5 F5
  U: "[[ab3,db4]@6 [bb3,eb4]@7 ~ [c4,f4]@15 ~ [ab3,db4]@8 [bb3,eb4]@8 [c4,f4]@16 ~@2]/4", // Db5 Eb5 F5 Db5 Eb5 F5
  V: "[[ab3,db4]@6 [bb3,eb4]@8 [c4,f4]@16 [ab3,db4]@8 [bb3,eb4]@4 c3@2 b2@2 bb2@4 f3 ~ [ab3,db4] ~ f3 ~ [ab3,db4] ~ f3 ~ [ab3,db4] ~ f3 ~]/4", // Db5 Eb5 F5 Db5 Eb5 Db5
  W: "~@7 eb3",
})).s("gm_distortion_guitar").gain(0.57).pan(0.4)

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

// drums · snare
const snare = s("sd").struct(`<
  ~ A ~ B ~ A C D E@6 F E@14 G H E@15 I E@7 J E@31 K E@7 L E ~ E M N D E@15 L E@6 G ~ E@19
>`.pickRestart({
  A: "~ x", B: "x ~@2 x ~@2 x ~", C: "~@2 x!5 ~", D: "~ x!2 ~@2 x!2 ~", E: "~ x ~ x", F: "~@2 x ~ x!2 ~ x",
  G: "~ x ~@2", H: "~@4 x ~@3 x!3 ~ x ~@3", I: "~ x!2 ~", J: "x!7 ~", K: "x!5 ~@3", L: "~@2 x!3 ~@3", M: "~ x!3",
  N: "~@4 x ~@2 x!2 ~ x ~ x ~@3",
})).gain(0.73)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@8 A B@6 C B@13 D E A@2 B A B@8 F B@2 G A H B H B@3 ~@2 B@2 H B@10 H I A@2 B A B@8 F B@2 ~ A H B H B@2 A J A ~ A K L
  ~ A B@14 J A H B H B@2 M ~@2 B@2 H B@7 H B@7
>`.pickRestart({
  A: "~ x!7", B: "x!8", C: "~@2 x!6", D: "x!4 ~@4", E: "~ x ~ x ~@4", F: "x!4 ~ x!3", G: "x!5 ~@3", H: "x!7 ~",
  I: "~@3 x ~@4", J: "x!2 ~@6", K: "x!6 ~@2", L: "~ x ~@6", M: "~ x",
})).gain(0.58)

// drums · low tom
const low_tom = s("lt").struct("<~@6 A ~@22 A ~@24 B ~@15 A ~@15 C ~@9 D ~ E ~@25 B ~@19>".pickRestart({
  A: "~@3 x", B: "~@5 x!2 ~", C: "~ x", D: "~@7 x", E: "~@5 x ~@2",
})).gain(0.73)

// drums · mid tom
const mid_tom = s("mt").struct("<~ A B C ~ A D ~@7 E ~@14 F G ~@23 H ~@15 I ~@15 J ~@9 K ~ A ~@25 L ~@19>".pickRestart({
  A: "~@3 x ~@4", B: "~@7 x", C: "~@2 x ~@2 x ~@2", D: "~@2 x!4 ~@2", E: "~@3 x ~ x!2 ~", F: "~@4 x!2 ~@2",
  G: "~@11 x ~@4", H: "x!5 ~@3", I: "~@5 x ~@2", J: "x!4 ~@4", K: "~@9 x!2 ~ x ~@3", L: "~ x!6 ~",
})).gain(0.73)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@32 A ~ A ~@8 B ~@4 C ~ C ~@7 C ~@13 A ~ A ~@8 B ~@4 C ~ C ~@8 D ~@16 D ~ C ~ C ~@7 C ~@7 C ~@7
>`.pickRestart({
  A: "x", B: "~ x", C: "~@7 x", D: "~ x ~@2",
})).gain(0.65)

// drums · high tom
// … 25 more lines

More by Phil Collins