Strudelify
Easy cover art

Tuskegee

Easy

Lionel Richie

KeyA♭ majorTempo127 bpm
0:00/0:00
// Easy — RICHIE LIONEL
// 127 bpm, 4/4, key G# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 135 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(127/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.

// bass · electric bass finger · "Bass"
const bass = note(`<
  ~@7 A B C D E F G D H@2 I J K L M N@2 O@2 P Q R S P T U V W X Y Z AA@2 AB@2 B C D AC F AD D AE@2 I J K L M N@2 O@2 P Q
  R AF W AG U V W AH AI Z AA@2 AJ@2 AK AL AM AN AK AO AM AP AK AO AM AQ AR@5 B C D AS F AD D H@2 I J K L M AT@2 P Q R AF
  W T AU AV W X Y AF AW AX AY AZ BA BB BC BD BE BF BG BH BI@2
>`.pickRestart({
  A: "~@11 eb2", B: "ab1@11 ab1", C: "c2@6 c2@13 ~@3 c2@2", D: "bb1@19 ~@3 bb1@2", E: "eb2@3 eb2@5 ab2@2 f2 eb2",
  F: "ab1@10 ~ ab1", G: "c2@5 ~ c2@15 ~ c2@2", H: "[eb2@3 eb2@3 eb2@3 eb2@3 eb2@4 ~@2 ab2@12 ab1@15 ~ ab1@2]/2",
  I: "c2@10 ~ c2", J: "bb1@10 ~ bb1", K: "eb2@2 ~ eb2@4 ~ ab2@4", L: "ab1@21 ~ ab1@2", M: "c2@10 ab1 c2",
  N: "[bb1@23 bb1]/2", O: "[eb2@45 ~ eb2@2]/2", P: "ab1@5 ~ ab1@10 c2@2 eb2@4 ab2@2",
  Q: "c2@5 ~ c2@9 ~ c2@2 eb2@4 c2@2", R: "bb1@11 c2", S: "eb2@2 ~ eb2@5 ab2@4", T: "c2@3 c2@4 ~ c2 eb2@2 c2",
  U: "bb1@8 ab2 bb1@3", V: "eb2@5 ~ eb2@10 f2@6 bb1@2", W: "ab1@3 ab1@5 c2 eb2@2 ab2", X: "c2@4 ~@2 c2@9 ~ c2@5 ~ c2@2",
  Y: "bb1@6 bb1@15 ~ bb1@2", Z: "eb2@2 ~ eb2@5 bb1 eb2@2 bb1", AA: "[gb2@18 f2@18 eb2@3 eb2@8 ~]/2",
  AB: "[ab1@18 f2 eb2 c2 bb1 ab1 f1]/2", AC: "eb2@2 ~ eb2@5 ab2@3 eb2", AD: "c2@5 ~ c2@13 ~@3 c2@2",
  AE: "[eb2@2 ~ eb2@3 eb2@3 eb2@3 eb2@4 ~@2 ab2@12 ab1@15 ~ ab1@2]/2", AF: "eb2@4 ~@2 eb2@8 ~@2 ab2@7 ~",
  AG: "c2@5 ~ c2@8 ~@2 c2@2 eb2@4 c2@2", AH: "c2@5 ~ c2@9 ~ c2@5 ~ c2@2", AI: "bb1@5 ~ bb1@15 ~ bb1@2",
  AJ: "[ab1@23 ~]/2", AK: "gb1@11 db2", AL: "gb1@5 ~ gb1@8 ~@2 f1@8", AM: "eb1@21 ~ eb1@2", AN: "ab1@2 ~ ab1@4 ~ ab1@4",
  AO: "gb1@5 ~ gb1@9 ~ f1@8", AP: "ab1@5 ~ ab1@9 ~ ab1@8", AQ: "ab1@5 ~ ab1@8 ~@2 ab1@8",
  AR: "[gb2@3 f2@3 eb2@3 f2@3 eb2@3 f2@3 db2@24 eb3@18 db3@54 ~@4 eb2@2]/5", AS: "eb2@3 eb2@5 ab2@3 eb2",
  AT: "[bb1@23 eb2]/2", AU: "bb1@16 ab2@2 bb1@5 ~", AV: "eb2@5 ~ eb2@10 f2@4 eb2@2 bb1@2",
  AW: "ab1@3 ab1@4 ~ c2 eb2@2 ab2", AX: "c2@3 c2@4 ~ c2 eb2@3",
  AY: "bb1 ~@2 bb1@2 ~ bb1 ~@2 bb1@2 ~ bb1@3 ~@3 b1@2 ~ b1@2 ~", AZ: "b1 ~@2 b1@2 ~ b1@2 ~@10 e2@6",
  BA: "a1@5 ~ a1@10 db2@2 e2@4 a2@2", BB: "db2@5 ~ db2@9 ~ db2@2 e2@4 db2@2", BC: "b1@11 db2",
  BD: "e2@4 ~@2 e2@8 ~@2 a2@7 ~", BE: "a1@6 a1@9 ~ db2@2 e2@4 a2@2", BF: "db2@3 db2@4 ~ db2 e2@2 db2",
  BG: "b1@16 a2@2 b1@5 ~", BH: "e2@5 ~ e2@10 gb2@6 b1@2", BI: "a1/2",
})).s("gm_electric_bass_finger").gain(0.51)

// chords · piano
const piano = note(`<
  A B C D E F G@2 H I J K L M N O@2 P Q R S T U@2 V W H I J X Y I J X Y I J Z AA@4 H I J K L M N O@2 AB Q R S T U@2 V W
  Y I J X Y I J X H I J Z AC@2 AD@2 AE@2 AF AG AH@2 AI AJ AH@2 AK AL AM@5 H I J X L M N AN@2 AB Q AO S T U@2 H I J X Y I
  J X Y I J X H I AP AQ AR AS AT AU AV AS AT AU AW@2
>`.pickRestart({
  A: "ab3@4 ~ ab3 ab3@2 ab3@4, [ab1,ab2]@23 ~, [c4,eb4]@12 [c4,eb4]@11 ~", // Ab Cm
  B: "g3@10 g3@2 g3 ~@9 f2@2, [c2,c3], bb3 [bb3,c4,eb4], ~@2 g3", // C Cm7
  C: "~@10 f3@2 f3 ~@3 f3@7 ~, bb2@23 ~, db4@12 [ab3,bb3,db4]@11 ~", // Bbm7
  D: "eb3@5 eb3 ~@4 f2 eb2, eb2@11 ~, [ab3,bb3,db4]@12 [ab3,bb3,db4]@11 ~, ~@16 f3@7 ~, ~@18 ab2@5 ~", // Bbm7
  E: "ab3@5 ~@3 ab3@2 ~ g2, [ab2,c4,eb4], ~@5 ab3@3 ~@2 ab3@2, ~ ab4", // Ab
  F: "g3@5 ~@6 f2, c3, [c2,bb3,eb4] [bb3,c4,eb4], ~@5 g3@3 [c2,g3]@4", G: "[[bb2,f3,ab3,bb3,db4]@47 ~]/2",
  H: "[ab3,c4,eb4]@10 ab3 ~@5 ab3@7 ~, [ab1,ab2]@23 ~, ~@12 [c4,eb4]@11 ~", // Ab Cm
  I: "[c2,bb3,c4,eb4]@10 ~@6 [c2,g3]@7 ~, c3@23 ~, g3@4 ~ g3@3 ~@4, ~@12 [bb3,c4,eb4]@11 ~", // Cm7 C5 Cm7
  J: "[ab3,db4]@10 ~@6 [bb1,f3]@7 ~, bb2@23 ~, bb1@7 ~@5, bb3@12 [ab3,bb3,db4]@11 ~, f3@8 ~@2 f3@5 ~@9", // Db5 Bb5 Bbm7
  K: "[f3,ab3,bb3,db4]@5 f3 ~@2 f3@2 f3@2, eb3, ~ [ab3,bb3,db4]", // Bbm7
  L: "[c4,eb4]@5 ~@3 ab1@4, ab2, ab1@2 ~, ab3@4 ~ ab3@7, ~ [c4,eb4]", // Cm
  M: "[c2,c4,eb4]@5 ~@3 [c2,g3]@4, c3, [g3,bb3]@9 ~ g3@6 ~@8, ~ [bb3,c4,eb4]", // Cm C5 Gm Cm7
  N: "[f3,ab3,bb3,db4]@5 ~@3 f3@4, [bb1,bb2], ~@5 f3@3 ~@4, ~ [ab3,bb3,db4]", // Bbm7 Bb Bbm7
  O: "[[eb2,f3,ab3,db4] ~@2 [eb2,f3,ab3,bb3,db4]@3 [eb2,f3,ab3,bb3,db4]@3 [eb2,f3,ab3,bb3,db4]@3 [eb2,f3,ab3,bb3,db4]@2 ~@4 [ab1,ab2,ab3,c4,eb4]@18 ~@4 [ab1,ab2]@6 ab3 ~, ~@36 [ab3,c4,eb4]@11 ~]/2", // Db Bbm7 Ab
  P: "g3@2 ~ g3@3 ~@2 g3@4, [c2,c3], [bb3,c4,eb4]!2", Q: "f3@3 f3@3 ~@2 f3@4, [bb1,bb2], [ab3,bb3,db4]!2",
  R: "[eb3,bb3,db4]@6 [ab3,bb3,db4]@6 [ab3,bb3,db4]@4 [ab3,bb3] ~@3 ab3@4, [eb1,eb2]@2 [eb1,eb2,f3,db4], ab3 ~@2 eb3@5 ~@4", // Eb7 Bbm7 Absus2 Eb Db
  S: "ab3@3 ab3@3 ~@2 ab3@4, [ab1,ab2], [c4,eb4]!2", T: "g3@3 ~@13 g3@8, [c2,c3], [bb3,c4,eb4]!2, ~@3 g3@5 ~@4",
  U: "[f3@6 f3@6 [bb3,db4]@12 [ab3,bb3]@12 ~@6 f3@5 ~, [bb1,bb2], ab3@24 ~@12 [ab3,bb3,db4]@11 ~, [bb3,db4]@2 f3 ~@5]/2", // Bbm Absus2 Bb Bbm7 Bbm
  V: "[ab3,bb3,db4]@2 ~ eb3, eb2, eb3 ~ [ab3,db4]@2", W: "[ab3,bb3,db4] ~, eb2",
  X: "[f3,ab3,bb3,db4]@5 f3 ~@2 f3@4, eb3, ~ [ab3,bb3,db4]", // Bbm7
  Y: "[ab3,c4,eb4]@10 ab3 ~@5 ab3@4 ab3@3 ~, [ab1,ab2]@23 ~, ~@12 [c4,eb4]@11 ~", // Ab Cm
  Z: "[f3,ab3,bb3,db4]@10 f3@2 ab3@4 f3@7 ~, eb3@23 ~, ~@12 [bb3,db4]@11 ~", // Bbm7 Bbm
  AA: "[[gb2,db3,gb3,bb3]@3 [f2,db3,f3]@3 eb2@2 [ab1,c3,ab3]@8, ~@18 ab3@29 ~@49, ~@3 eb3@5]/4", // Gb Db Ab
  AB: "g3@2 ~ g3@3 ~@2 g3@2 g3@2, [c2,c3], [bb3,c4,eb4]!2", // C Cm7
  AC: "[[gb2,db3,gb3,bb3]@17 ~ [f2,db3,f3]@18 [eb2,eb3]@12, ~@18 ab3@29 ~]/2", // Gb Db Eb
  AD: "[[ab3,c4,eb4]@12 [ab3,bb3,eb4]@10 ~@14 ab2@2 ~ [f1,f2]@8 ~, [ab1,ab2]@11 ab1@6 ab1@2 ~@5, ~@22 [ab3,db4,eb4]@8 [ab3,c4,eb4]@6 [ab3,c4,eb4]@11 ~, ~@2 ab2 ~]/2", // Ab Absus2 F Ab Absus4 Ab
  AE: "[[ab3,bb3,db4,f4]@12 [db4,f4,ab4,bb4]@10 [db4,f4,ab4,bb4]@6 db4 ~ [db4,f4,ab4,bb4]@10 [f2,c4,eb4,f4,ab4]@8, gb2@11 gb2@9 ~@4]/2", // Bbm7 Fm7
  AF: "[bb3,db4,eb4,gb4]@6 ~@5 bb3, eb3, eb2@2 eb2, ~ [db4,eb4,gb4], ~@6 bb3@5 ~", // Ebm7
  AG: "[ab3,db4,eb4,gb4]@5 ~ [ab3,db4,eb4,gb4]@9 ~ [eb2,bb3,db4,eb4,ab4]@8, [ab1,ab2]", // Absus4 Ebsus4 Ab
  AH: "[[ab3,bb3,db4,f4]@6 [db4,f4,ab4,bb4]@5 [db4,f4]@3 db4 [db4,f4,ab4,bb4]@5 [f2,c4,eb4,f4,ab4]@4, gb2@11 gb2@9 ~@4, ~@11 [ab4,bb4]@4 ~@9]/2", // Bbm7 Db Bbm7 Fm7 Absus2
  AI: "[bb3,db4,eb4,gb4]@6 ~@5 bb3, eb3@23 ~, eb2@2 eb2, ~@12 [bb3,db4,eb4,gb4]@11 ~", // Ebm7
  AJ: "[ab3,db4,eb4,gb4]@3 [ab3,db4,eb4,gb4]@5 [eb2,bb3,db4,eb4,ab4]@4, [ab1,ab2]", // Absus4 Ebsus4 Ab
  AK: "[bb3,db4,eb4,gb4]@6 ~@5 bb3, eb3, eb2@7 ~ eb2@4, ~ [db4,eb4,gb4], ~@6 bb3@5 ~", // Ebm7
  AL: "[ab3,db4,eb4,gb4]@5 ~ [ab3,db4,eb4,gb4]@10 [eb2,bb3,db4,eb4,ab4]@8, [ab1,ab2]", // Absus4 Ebsus4 Ab
  AM: "[gb3@5 ~ [db4,eb4]@3 gb3@6 ~@2 bb3@4 [gb3,eb4]@5 [gb3,eb4]@4 [db2,f3,ab3,db4]@30, [b2,b3]@18 [bb2,db4]@25 ~@77, eb4@2 ~@3 gb3@2 [eb2,bb3]@3 ~@10, ~@5 gb3@4 bb3@8 ~@43]/5", // Dbsus2 Ebm Db B Bbm Eb5
  AN: "[[eb2,f3,ab3,db4] ~@2 [eb2,f3,ab3,bb3,db4]@3 [eb2,f3,ab3,bb3,db4]@3 [eb2,f3,ab3,bb3,db4]@3 [eb2,f3,ab3,bb3,db4]@2 ~@4 [ab1,ab2,ab3,c4,eb4]@18 ~@10 ab3@2, ~@3 [c4,eb4], ~@18 ab3@5 ~, ~@5 [ab1,ab2]]/2", // Db Bbm7 Ab Cm Ab
  AO: "[eb3,bb3,db4]@6 [ab3,bb3,db4]@6 [ab3,bb3,db4]@4 [ab3,bb3] ~@3 ab3 ~@3, [eb1,eb2]@16 [eb1,eb2,f3]@7 ~, ab3 ~@2 eb3@5 db4@2 ~@2", // Eb7 Bbm7 Absus2 Eb Ebsus2
  AP: "~@3 ab3@2 ~ [f3,db4] ~@2 [f3,ab3,bb3,db4]@2 ~ [f3,ab3,bb3,db4]@3 ~@3 [a3,b3,d4]@2 ~ [a3,b3,d4]@2 ~, ~@3 ab3 ~@8", // Db Bbm7 Bm7
  AQ: "[gb3,a3,b3,d4]@2 ~ [gb3,a3,b3,d4]@2 ~ [gb3,a3,b3,d4]@4 ~@8 [e2,a3,b3,d4,e4]@6", // Bm7 Esus4
  AR: "[a3,db4,e4]@10 a3 ~@5 a3@7 ~, [a1,a2]@23 ~, ~@12 [db4,e4]@11 ~", // A Dbm
  AS: "[db2,b3,db4,e4]@10 ~@6 [db2,ab3]@7 ~, db3@23 ~, ab3@4 ~ ab3@3 ~@4, ~@12 [b3,db4,e4]@11 ~", // Dbm7 Db5 Dbm7
  AT: "[a3,d4]@10 ~@6 [b1,gb3]@7 ~, b2@23 ~, b1@7 ~@5, b3@12 [a3,b3,d4]@11 ~, gb3@8 ~@2 gb3@5 ~@9", // D5 B5 Bm7
  AU: "[gb3,a3,b3,d4]@5 gb3 ~@2 gb3@4, e3, ~ [a3,b3,d4]", // Bm7
  AV: "[a3,db4,e4]@10 a3 ~@5 a3@4 a3@3 ~, [a1,a2]@23 ~, ~@12 [db4,e4]@11 ~", AW: "[[a1,a2,a3,db4,e4]@47 ~]/2",
})).s("gm_piano").gain(0.35).pan(0.4)

// chords · piano · soft notes
const piano_soft = note(`<
  ~ A B ~@2 C ~@2 D ~@2 E ~@3 F ~@3 G ~@2 H I J K D ~@2 E D ~@2 E D ~@2 L ~@4 D ~@2 E ~@3 F ~@3 G ~@2 M@2 J K D ~@2 E D
  ~@2 E D ~@2 L ~@5 N ~@3 O ~@3 O ~@7 D ~@2 E ~@3 F ~@3 G ~@2 M@2 D ~@2 E D ~@2 E D ~@2 E D ~ P ~ Q ~@2 R Q ~@2 R ~@2
>`.pickRestart({
  A: "[c4,eb4] ~", B: "[ab3,bb3] ~, f3@5 ~@7", C: "c4 ~", D: "~@12 ab3 ~@11", E: "eb2", F: "bb3 ~@23", G: "~@2 ab3 ~@9",
  H: "~@3 f3", I: "~ f3@2 ~, db4 ~", J: "~ eb3 bb3@2", K: "~@3 eb3, ~ eb3@2 ~, ~ [ab3,bb3,db4]", L: "eb2@23 ~",
  M: "[~@5 f3@2 ~, ~@3 f3@2 ~@3, ~@2 db4 ~]/2", N: "~@4 f4 ~@19", O: "~@2 f4 ~@9",
  P: "[ab3,bb3,db4] ~@2 [bb3,db4]@2 ~ bb3@2 ~@10 gb3@2 ~ gb3 ~@2, f3@2 ~ f3 ~@20", Q: "~@12 a3 ~@11", R: "e2",
})).s("gm_piano").gain(0.17).pan(0.4)

// chords · french horn · "Fr.horns"
const french_horn = note("<~@6 A@2 B ~@67 C@2 D@2 C@2 D@2 C@2 E@2 ~@4 F G ~@6 H I ~@5 J@2 ~@14 K@2 ~@10>".pickRestart({
  A: "[[bb3,db4,ab4]@45 ~ [bb3,db4]@2]/2", B: "[ab3,c4] ~@7", C: "[[db4,bb4]@5 [c4,ab4]]/2", D: "[[bb3,gb4]@11 ~]/2",
  E: "[[bb3,gb4]@23 ~]/2", F: "~@11 bb2", G: "[ab2,c3] ~@11",
  H: "[f4,ab4,bb4,f5]@2 ~ [f4,ab4,f5]@2 ~ [f4,ab4,bb4,f5]@2 ~ [f4,ab4,bb4,f5]@2 ~ [f4,ab4,bb4,f5]@3 ~@9, ~@3 bb4 ~@20", // Bb7 Fm Bb7
  I: "~@2 [ab3,c4] ~ [ab3,c4]@2 ~@18", J: "[[ab3,bb3,db4,f4]@23 ~]/2", K: "[[bb3,db4,f4]@7 ~@2 [b3,d4,gb4]@7 ~@8]/2",
})).s("gm_french_horn").gain(0.31).pan(0.4)

// chords · brass section · "Brass"
const brass_section = note("<~@80 A@2 B C D@2 E F ~@4 G H ~@29 I J ~@10>".pickRestart({
  A: "[gb3@5 f3]/2", B: "eb3", C: "ab3@23 ~",
  D: "[[gb4,db5]@2 ~@2 [gb4,db5]@4 ~@2 [gb4,db5] ~ [gb4,db5]@4 ~@2 [gb4,db5]@3 ~ [gb4,db5]@4 ~@2 [gb4,db5] ~ [gb4,db5]@4 ~@2 [gb4,db5]@3 ~ [f4,db5]@4 ~@2 f4@2, gb3@5 f3, ~@46 db5 ~]/2", // Gb5 Db
  E: "[ab4,eb5]@3 ~ [ab4,eb5]@3 ~@3 [ab4,eb5] ~ [ab4,eb5]@4 ~@2 [ab4,eb5]@3 ~ [ab4,eb5]@2, eb3", // Ab5
  F: "~@4 [ab4,eb5] ~ [ab4,eb5]@4 ~@2 [ab4,eb5]@3 ~ [ab4,eb5]@6 ~@2, ab3@23 ~", G: "~@11 bb2", H: "ab2 ~@5",
  I: "[f3,bb4,db5,f5]@2 ~ [f3,db5]@2 ~ [bb4,db5,f5] ~@2 [f3,db5,f5]@2 ~ [f3,bb4,db5,f5]@3 ~@3 [gb3,b4,d5,gb5]@2 ~ [gb3,b4,d5,gb5]@2 ~, ~@3 [bb4,f5] ~@2 f3@2 ~ bb4 ~@14", // Bbm Db Bbm Db Bbm Bm Bb5
  J: "[gb3,b4,d5,gb5]@2 ~ [gb3,b4,d5,gb5]@2 ~ [gb3,b4,d5,gb5]@3 ~@15", // Bm
})).s("gm_brass_section").gain(0.22).pan(0.6)

// chords · string ensemble 2 · "Slow str"
const string_ensemble_2 = note(`<
  ~@8 A@3 ~@65 B@2 C D E@2 C D B@2 C F G@5 H I J@2 H I K@4 L@2 H I M@2 N@2 O P Q@3 R S T R U V@4 W@3 X Y@2 Z AA AB@2
>`.pickRestart({
  A: "[[eb5,eb6]@17 ~]/3", B: "[ab3,bb3,db4,f4]/2", C: "[bb3,db4,eb4,gb4]", D: "[ab3,db4,eb4,gb4]@2 [bb3,db4,eb4,ab4]",
  E: "[[ab3,bb3,db4,f4]@5 [c4,eb4,f4,ab4]]/2", F: "[ab3,db4,eb4,gb4]@2 ~", G: "[[db5,db6]@14 ~]/5", H: "[ab3,c4,eb4]",
  I: "[g3,bb3,c4,eb4]", J: "[[f3,bb3]@2 ~ bb3, db4, ~ ab3]/2",
  K: "[bb3@24 [ab3,bb3]@17 ~ [ab3,c4,eb4]@29 [g3,bb3,c4,eb4]@24 ~, db4@41 ~@55, f3@13 ~@35]/4", // Absus2 Ab Cm7
  L: "[f3@23 ab3@25, [bb3,db4]]/2", M: "[db4@43 ~@5, bb3@5 ~, f3@3 ~]/2", N: "eb5/2", O: "f5@6 db5 eb5", P: "ab5 g5",
  Q: "[eb5@47 db5@25]/3", R: "f5", S: "~ ab5@17 bb5@3 c6@3", T: "g5@6 ab5 bb5", U: "ab5 bb5",
  V: "[eb5@47 f5@19 [b4,gb5]@17 ~@13]/4", W: "[~@2 e5@45 gb5@19 d5@2 e5@3 ~]/3", X: "a5@11 ab5@13", Y: "e5/2", Z: "gb5",
  AA: "e5", AB: "[[a4,db5]@15 ~]/2",
})).s("gm_string_ensemble_2").gain(0.27).pan(0.4)

// other · overdriven guitar · "Overd.gt"
const overdriven_guitar = note("<~@93 A@2 B@2 C D E@2 F@2 G@2 H I J@2 K@2 ~@24>".pickRestart({
  A: "[c4@6 ab3@4 ab4@20 ab5 ~@17]/2", B: "[c4@6 ab3@3 ~ ab3@20 eb3@4 ~@14]/2",
  C: "c4@6 ab3@3 ~ f5@2 ~@3 c5@2 ~@4 ab4@3", D: "~@3 gb4@3 ~@4 eb4@3 ~@3 db4@3 ~@3 b3@2",
  E: "[db4@6 b3@4 ab3@19 ~@13 c4@6]/2", F: "[ab3@4 ab4@26 ab5 ~@17]/2", G: "[c4@2 ab3 ab3@7 ~@6]/2",
  H: "c4@6 ab3@3 ~ f5 ~@5 eb5@2 ~@3 f5 ~@2", I: "~@3 bb4@8 ~ eb5@2 ~@4 c5@2 ~@4", J: "[c5 bb4 ab4 f4@20 ~]/2",
  K: "[eb4@5 ~@3]/2",
})).s("gm_overdriven_guitar").gain(0.38).pan(0.4)

// drums · kick
const kick = s("bd").struct(`<
  ~@7 A B@3 C D B@2 E A B@2 C D B F A F A B@3 C B@3 C B@3 C E G F A B@3 C D B@2 E A B@2 C D B F A F A B@3 C B@3 C B@3 C
  E G F A B H B C B H B C B H B C F ~@3 A B@3 C D B@2 E A B@2 C D B F A B@3 C B@3 C B@3 C B@2 F ~ B@3 C B@3 C F ~
>`.pickRestart({
  A: "~@11 x", B: "x ~@10 x", C: "x ~@2 x ~@4 x ~@2 x", D: "x ~@2 x ~@7 x", E: "x ~@2 x", F: "x", G: "~@4 x!2 ~@2",
  H: "x ~@7 x ~@2 x",
})).gain(0.4)

// drums · snare
const snare = s("sd").struct(`<
  ~@8 A@7 B A@6 ~@4 A@12 ~@4 A@7 B A@6 ~@4 A@12 ~@4 A@12 ~@5 A@7 B A@6 ~@2 A@14 C D A@8 ~@2
>`.pickRestart({
  A: "~ x", B: "~ x!4 ~@3", C: "~ x!4 ~ x!2", D: "x!3 ~@3 x ~",
})).gain(0.4)

// drums · low tom
const low_tom = s("lt").struct("<~@7 A ~@17 B ~@15 C ~@17 B ~@15 B ~@16 D ~@15 B ~@15 D ~@7 E ~@2>".pickRestart({
  A: "~@3 x ~@4 x ~@3", B: "~@2 x", C: "~@5 x ~@2", D: "~@3 x", E: "~@11 x",
})).gain(0.45)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@22 A B A C ~@12 D E A ~@8 F ~@6 A B C G ~@12 D H A ~@13 D B I@2 J ~@15 K ~@26
>`.pickRestart({
  A: "~ x!3", B: "x!3 ~", C: "~@2 x!2", D: "~ x!2 ~", E: "~ x ~ x", F: "~ x ~@6", G: "~@3 x", H: "x!2 ~ x", I: "x!4",
  J: "x!2 ~@2", K: "x ~@2 x",
})).gain(0.15)

// drums · mid tom
const mid_tom = s("mt").struct("<~@25 A ~@15 A ~@17 A ~@15 A ~@16 B ~@15 A ~@23 C ~@2>".pickRestart({
  A: "~ x ~@2", B: "~@2 x", C: "~@8 x!3 ~",
})).gain(0.4)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@11 A ~@7 A ~@9 A ~@3 A ~@3 A ~@3 B ~@3 A ~@7 A ~@9 A ~@3 A ~@3 A ~@3 B ~@3 A ~@3 A ~@3 A ~@8 A ~@7 A ~@7 A ~@3 A ~@3
  A ~@7 A ~@3 A ~@2
>`.pickRestart({
  A: "~@2 x", B: "x",
})).gain(0.3)

// drums · open hat · soft notes
const open_hat_soft = s("oh").struct("<~@14 A ~@6 A ~ A ~ B ~@22 A ~@6 A ~ A ~ B ~@39 A ~@6 A ~ C ~@26>".pickRestart({
  A: "~@11 x", B: "x", C: "x ~@10 x",
})).gain(0.15)

// drums · crash
// … 28 more lines

More by Lionel Richie