Strudelify

Deep River Woman

Lionel Richie

KeyA♭ majorTempo68 bpm
0:00/0:00
// Deep River Woman — RICHIE LIONEL
// 68 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 73 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(68/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 · acoustic bass · "ACOU BASS"
const bass = note(`<
  ~@14 A B C B D B E F@3 G@4 H I@2 J K L A B C B D B E M@3 G@4 N I@2 O K P Q R S T@2 U V@2 W X W Y W X Z@4 ~
>`.pickRestart({
  A: "~ ab1@14 bb1 ~ c2@15", B: "~ bb1@13 ~ bb1 ~ eb1@15", C: "~ ab1@16 c2@10 g1@5", D: "~ ab1@13 ~ ab1 ~ c2@13 ~ c2",
  E: "~ bb1@13 ~ bb1 ~ gb1@13 ~@2", F: "[~ gb1@15 ~ eb1@5 ~ eb1@12 eb1@6 f1@4 g1@4 ab1@14 bb1@2 c2@16 db2@15]/3",
  G: "[~ eb2@6 f2@6 g2@4 ab1@14 bb1@2 c2@16 bb1@13 ~ bb1@2 eb1@16 ab1@14 bb1@2 c2@16 db2@15]/4",
  H: "~ eb2@6 f2@6 g2@3 ~ bb1@15", I: "[~ db2@14 ab1@2 bb1@13 ~ bb1@2 eb2@10 eb1@6 ab1@15]/2", J: "~ gb1@27 ~ gb1@3",
  K: "~ ab1@30 ~", L: "~ ab1@16 c3@4 eb3@4 eb1@7",
  M: "[~ gb1@16 eb1@5 ~ eb1@12 eb1@6 f1@4 g1@4 ab1@14 bb1@2 c2@16 db2@15]/3", N: "~ eb2@6 f2@6 g2@4 bb1@15",
  O: "~ gb1@31", P: "~ ab1@31", Q: "~ gb1@15 ~ gb1@5 ~ gb1 ~ gb1@2 f1@5", R: "~ ab1@20 bb1@2 ~@2 bb1@2 ab1@5",
  S: "~ gb1@14 ~@2 gb1@3 ~ gb1 ~ gb1@4 f1@5", T: "[~ ab1@28 bb1@2 c2@2 db2@13 ~ db2@2 eb2@15]/2",
  U: "~ ab1@13 ~ ab1 ~ ab1@15", V: "[~ db2@15 ~ db2@12 ab1@2 db2@2 eb2@24 eb1@7]/2", W: "~ ab1@14 bb1@2 c2@15",
  X: "~ db2@16 eb2@6 f2@6 g2@3", Y: "~ bb1@13 ~ bb1@2 eb1@15",
  Z: "[~ bb1@16 db2@14 ab1@2 bb1@13 ~ bb1@2 eb2@10 eb1@16 ~@6 ab1@40 ~@7]/4",
})).s("gm_acoustic_bass").gain(0.78)

// chords · epiano1 · "E.PIANO 1"
const epiano1 = note(`<
  ~@4 A B C D@2 E@2 F G@3 ~@5 H@3 ~@8 I J ~@7 K@6 L M@2 N@3 O@2 P@2 Q@2 R S T@2 ~@3 U@2 V W@5
>`.pickRestart({
  A: "~ [ab4,c5]@16 bb4@15, ~ eb4@28 ~@3, ~@17 g4@11 ~@4", // Ab
  B: "~ [db4,f4]@12 ~@4 [eb4,g4]@5 ~ [f4,ab4]@6 [g4,bb4]@3, ~ ab4@16 ~@15", // Db Eb Fm Gm
  C: "~ [ab4,c5]@16 [g4,bb4]@15, ~ eb4@28 ~@3", // Ab Gm
  D: "[~ [ab3,db4]@14 ~@2 db5@6 c5@4 ab4@2 f4@4 [ab4,c5]@14 ~@2 bb4@15, ~ f4@16 ~@16 eb4@29 ~@2, ~@49 g4@11 ~@4]/2", // Db5 Ab
  E: "[~ [db4,f4,ab4]@15 ~ [eb4,g4]@6 [f4,ab4]@6 [g4,bb4]@4 ~ f4@13 ~@2 [ab3,f4]@13 ~@2, ~@33 db4@28 ~@3, ~@17 ab4@15]/2", // Db Eb Fm Gm Db
  F: "~ [db4,f4,bb4]@16 [f4,ab4]@10 ~@5, ~@17 db4@5 ~@10", // Bbm Fm
  G: "[~@5 ab4@2 eb5@4 ab4@4 bb4@4 c5@4 ab4@2 bb4@2 c5@2 ab4@2 bb4@2 eb5@4 ab4@2 bb4@4 c5@4 ab4@4 eb4@2 ab4@2 bb4@2 c5@2 eb5@2 ab5@2 bb5@2 c6@16 ~@15]/3",
  H: "[~@17 ab4@2 bb4@2 db5@2 ab4@4 gb4@2 db5@2 ab4@2 bb4@4 ab4@2 db5@6 ~@4 [g3,eb4]@6 [ab3,f4]@5 ~ [bb3,g4]@10 eb4@2 [ab3,f4]@4 [bb3,g4]@4 [c4,ab4]@12 ~@3, ~@71 g3 ~@24]/3", // Cm Db Eb Db Eb Fm
  I: "~@23 gb3@2 ab3@2 bb3@2 ab3 ~ db3", J: "~ [eb3,ab3,c4]@27 ~@4",
  K: "[~@17 ab4@2 bb4@2 db5@2 ab4@4 gb4@2 db5@2 ab4@2 bb4@4 ab4@2 db5@6 ~@4 [g3,eb4]@6 [ab3,f4]@5 ~ [bb3,g4]@10 eb4@2 [ab3,f4]@4 [bb3,g4]@4 [ab4,c5]@10 [bb4,db5]@2 [ab4,c5]@4 [g4,bb4]@12 ~@4 f4@9 ~ f4@2 ~@4 [eb3,g3]@6 [f3,ab3]@6 g3@4 [ab3,c4]@16 bb3@16 [ab3,db4,f4]@12 ~@3, ~@71 g3 ~@41 [ab3,db4]@15 ~@13 bb3@3 ~@17 g3@11 ~@20, ~@125 eb4@52 ~@15]/6", // Cm Db Eb Db Eb Ab Bbm Ab …
  L: "~ [f4,db5]@6 [eb4,c5]@6 [c4,ab4]@19", // Db Cm Fm
  M: "[~@2 eb4@15 [db4,f4]@33 ~@14, ~ bb3@16 ~@47, ~ g3@13 ~@3 ab3@24 ~@23]/2", // Db
  N: "[~@15 c5@2 [f4,db5]@19 ~@13 c5@2 eb4@2 ab4@2 bb4@4 c5@4 ab4@2 bb4@2 db4@2 gb4@2 ab4@4 db4@2 ab4@2 db5@6 ~@2 gb3@2 ab3@2 bb3@2 ab3@2 gb3, ~@5 ab4@7 ~@20, ~@15 eb4 ~@80]/3", // Db
  O: "[~ [ab3,c4]@29 ~ db4@2 [eb3,c4]@15 ~ db4@2 [eb3,c4]@5 ~ [ab3,db4]@2 [eb3,ab3,c4]@5, ~ eb3@26 ~@4 ab3@16 ~@2 ab3@4 ~@11, ~@31 f3 ~@17 f3 ~@7 f3 ~@6]/2", // Ab Cm Db5 Ab
  P: "[~ [gb3,ab3,bb3,db4]@24 ~@2 [db4,f4]@6 [c4,eb4]@30 ~, ~@27 ab3@37]/2", // Gb Db Cm
  Q: "[~ [ab3,bb3,db4]@26 [db4,f4]@6 [c4,eb4]@29 ~@2, ~@27 ab3@34 ~@3]/2", // Bbm7 Db Cm
  R: "~ f4@9 ~ [f4,ab4]@5 ~ [f4,ab4]@15, ~ [ab3,db4]@16 db4@12 ~@3", S: "~ [c4,eb4,ab4]@30 ~",
  T: "[~ db4@28 ~@26 f4@9, ~ [f4,ab4]@50 db5@13, ~@49 eb5@15, ~@53 ab4@11]/2", // Fm
  U: "[~@17 [f4,db5]@6 [eb4,c5]@6 [c4,ab4]@17 ~@3 [eb4,g4]@15, ~@47 bb3@17]/2", // Db Cm Fm Eb
  V: "~ [db4,f4]@13 ~@3 [eb4,g4]@6 [f4,ab4]@5 ~ [g4,bb4]@3", // Db Eb Fm Gm
  W: "[~ [f4,ab4]@23 ~@5 f4@2 [eb4,c5] ~ db5@24 [eb4,ab4]@24 [eb4,ab4]@7 ~@72, ~@29 ab4@24 ~@28 c4@48 ~@31, ~@29 db5 ~@3 f4@20 ~@4 db4@32 ~@71]/5", // Fm Cm Ab5
})).s("gm_epiano1").gain(0.45)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note("<~@10 A@5 ~@5 B@3 ~@11 C D E@7 ~@3 F@2 G@4 H@2 ~ I ~ J@5 K L@4 M N@5>".pickRestart({
  A: "[~ ab3@16 ab4@16 bb4@16 ~@16 [c4,eb4]@67 ~@28, ~ [db4,f4]@64 ~@95, ~@49 ab4@83 ~@28]/5", // Cm Db
  B: "[~ [ab3,f4]@16 ~@6 db5@26 [eb4,g4,bb4]@29 ~@18, ~ db4@48 ~@47, ~@17 bb3@60 ~@19, ~@17 gb4@32 ~@47]/3", // Db Eb
  C: "~ [eb3,ab3,c4]@16 [g3,bb3,eb4]@15", D: "~ [f3,ab3,db4]@31",
  E: "[~ [eb3,ab3,c4]@16 ~@48 c4@16 [bb3,g4]@16 [ab3,f4]@48 gb4@32 [eb4,g4]@32 ~@15, ~@17 [bb3,eb4,g4]@16 ab3@48 bb4@127 ~@16, ~@25 bb4@16 ab4@41 ~@15 db4@80 ~@47, ~@33 [db4,f4]@32 eb4@33 ~@47 bb3@64 ~@15]/7", // Ab Eb Db Eb Db
  F: "[~@17 [ab3,c4]@16 [g3,bb3]@16 [f3,ab3,db4]@15, ~@17 eb4@32 ~@15]/2", // Ab Gm Db
  G: "[~@2 [g3,bb3,eb4]@15 [db4,f4]@64 [c4,eb4]@16 [gb3,bb3,db4]@31, ~@17 ab3@81 ~@30]/4", // Eb Db Cm Gb
  H: "[~ [ab3,c4,eb4]@50 ~@13]/2", I: "~ [eb4,ab4,c5]@31",
  J: "[~@21 db6@4 c6@4 ab5@4 db6@16 eb6@8 db6@8 eb6@8 c6@20 bb5@2 c6@2 db6@8 c6@8 bb5@8 ab5@8 eb6@29 ~@2, ~ ab4@150 ~@9, ~ [c5,eb5]@32 ~@127]/5", // Cm
  K: "~ c4@16 g3@15, ~ [bb3,eb4]@31", // Eb5
  L: "[~ [f3,ab3,db4]@16 [eb3,g3]@6 [f3,ab3]@6 [g3,bb3]@4 [ab3,c4]@16 [g3,bb3]@16 [db4,f4]@22 [eb4,g4]@6 [db4,f4]@4 eb4@31, ~@17 eb4@48 ab3@32 c4@17 ~@14]/4", // Db Eb Fm Gm Ab Gm Db Eb …
  M: "~@23 [f4,ab4]@6 [g4,bb4]@3, ~ [ab3,db4,f4]@18 bb3@13, ~@17 [eb4,g4]@7 ~@8", // Fm Gm Db Eb
  N: "[~ ab3@16 ab4@16 ~@48 c4@58 ~@21, ~ db4@82 ~@77, ~ f4@57 ~@102, ~@33 ab3@106 ~@21, ~@49 eb4@90 ~@21]/5",
})).s("gm_string_ensemble_1").gain(0.27)

// chords · piano · "A.PIANO 1"
const piano = note(`<
  A B C D@3 E F G H I J K@2 L M N O P Q R@3 S T U V W X Y Z@4 AA AB AC AD@2 AE AF@3 AG@2 AH@2 AI AJ AK AL AM@3 AN AO
  AP@2 AQ AR@2 AS AT AU AV AW AX AY AZ BA@4
>`.pickRestart({
  A: "~ [ab2,bb3,eb4]@6 ~@6 c4@3 ~ bb3@4 ~@8 g4@3, ~ c4@10 eb3@5 ~ [c3,eb4]@6 [bb3,eb4,ab4]@9, ~@7 [ab3,bb3,eb4]@9 ~ g4@10 g3@5, ~@9 ab2@7 ~@5 g3@4 c3@7", // Absus2 Cm Ebsus4 Absus2
  B: "~ [db2,ab3,db4]@6 ~@6 eb4@4 [eb3,bb3,eb4,g4]@6 [bb3,eb4]@6 [g3,bb3,eb4,bb4]@3, ~ f4@16 ~@15, ~ eb4@10 db3@6 ~@15, ~@7 [ab3,db4,ab4]@10 ~@6 [f3,ab4]@9, ~@9 db2@8 ~@15", // Db5 Eb Eb5 Eb Db5 Fm
  C: "~@13 c4@3 ~ [c3,bb3,eb4,g4]@4 ~@8 g4@3, ~ [eb4,c5]@15 ~@7 [bb3,eb4,ab4]@9, ~ [ab3,c4]@10 ab3@5 ~@5 g3@4 ~@2 g3@5, ~@7 ab4@9 ~@16, ~@9 ab2@7 ~@9 c3@7", // Cm7 Cm Ebsus4 Ab
  D: "[~ [db2,ab3,db4,eb4]@4 db3@2 ~@6 eb4@3 ~ [eb3,bb3,eb4,g4]@6 bb3@6 [g3,bb3,bb4]@4 [ab3,c4,ab4]@6 ~@6 ab4@3 ~ [bb3,eb4]@4 ~@8 g4@4 ~@4 db3@2 ~@6 eb4@3 ~ [eb3,bb3,eb4,g4]@6 [bb3,eb4]@6 [g3,bb3,eb4,bb4]@3, ~ f4@64 ~@31, ~@7 [ab3,db4,ab4]@9 ~@7 [f3,eb4,ab4]@10 eb4@10 ab3@5 ~@5 g3@6 g3@6 ~@6 [ab3,db4,ab4]@9 ~@7 [f3,ab4]@9, ~@9 db2@7 ~@25 ab2@7 ~ [c3,g4]@8 c3@8 [db2,ab3,db4,eb4,f4]@7 ~ db2@7 ~@16, ~@11 db3@5 ~@23 [c4,c5]@9 ~@7 [bb3,eb4,ab4]@10 ~@10 db3@5 ~@16]/3", // Dbsus2 Eb Gm Ab Eb5 Eb Eb5 Eb …
  E: "~ c4@5 ~@7 c4@3 ~@13 bb3@3, ~ [eb4,c5]@15 ~@7 [eb4,g4]@9, ~ ab3@8 ab2@7 ~ [c3,bb3,eb4,g4]@7 ~ c3@7, ~@7 ab4@9 ~@7 bb3@6 ~@3, ~@11 ab3@5 ~@5 g3@6 g3@5", // Cm Eb Cm7
  F: "~ [bb3,db4,f4]@5 ~@7 f4@4 [db4,f4,ab4,db5]@4 ~@8 db4@3, ~ bb2@6 [bb3,db4,ab4]@10 ~@6 [f4,c5]@9, ~@9 bb2@8 eb2@6 db4@4 [eb3,ab4]@5, ~@11 f3@6 ~@4 eb3@4 eb2@7", // Bbm Db Bbm7 F5 Ab5
  G: "~ [c4,eb4,ab4]@4 ~@8 c4@3 ~@13 eb4@3, ~ ab2@6 [eb4,ab4]@9 ~ g4@15, ~@5 eb3@11 ~ [c3,bb3]@6 bb3@9, ~@7 c4@4 ab3@5 ~ eb4@10 g3@5, ~@9 ab2@7 ~@5 g3@4 c3@7", // Ab Ab5 C7
  H: "~ [ab3,db4]@4 ~@8 eb4@4 [eb3,bb3,eb4,g4]@6 bb3@6 [g3,bb3,bb4]@3, ~ f4@16 ~@15, ~ eb4@10 db3@6 ~@15, ~ db2@6 [ab3,db4,ab4]@10 ~@6 [f3,eb4,ab4]@9, ~@5 db3@4 db2@8 ~@15", // Db5 Eb Gm Db5 Fm7
  I: "~ [bb2,bb3,db4]@6 ~@6 f4@3 ~@13 eb4@3, ~ f4@10 f3@5 ~ eb4@10 db3@5, ~@7 [bb3,db4,ab4]@9 ~ f4@15, ~@9 bb2@7 ~ [db2,ab3,db4]@6 [ab3,db4,ab4]@9, ~@21 db3@4 db2@7", // Bbm Bbm7 Db5
  J: "~ [bb2,db4,f4]@6 ~@6 eb4@3 ~@13 eb4@3, ~ eb4@10 f3@5 ~@5 bb2@11, ~@7 [bb3,db4,f4]@9 ~@7 [ab3,db4,f4]@9, ~@9 bb2@7 ~ [eb2,ab3,db4,f4]@8 eb2@7, ~@27 eb3@5", // Bbm Db
  K: "[~@29 ab3@2 bb3@2 ~@24 [eb2,eb3,bb3]@7, ~ ab2@31 ~ ab2@14 ab3@17, ~@3 eb3@30 ~@6 bb3@18 ~@7, ~@5 ab3@6 ab3@4 bb3@4 c4@4 ab3@2 bb3@2 c4@5 ~@5 ab3@6 c4@14 ~@7, ~@7 eb4@25 ~ eb4@31]/2", // Eb5
  L: "~ [eb3,ab3]@10 ~@2 ab3@4 [bb3,eb4]@5 ~@7 g3@3, ~ [ab2,c4]@16 c2@6 [bb3,eb4]@9, ~@11 eb3@6 g3@10 c3@5, ~@25 c2@7", // Ab5 Eb5 Ab Eb5
  M: "~ [db4,f4]@6 ~@6 ab3@4 ~@12 db4@3, ~ bb2@15 ~ [eb2,f4]@8 eb2@7, ~@7 [db4,f4]@10 db4@10 eb3@5, ~@7 ab3@6 ~@10 [ab3,f4]@9, ~@9 f3@7 ~@5 bb2@11", // Db Ebsus2 Db
  N: "~@13 bb3@4 [ab3,c4,eb4]@5 ~@7 c4@3, ~ c4@16 ~@6 [bb3,eb4]@9, ~ bb3@10 eb3@6 c3@6 ~@2 c3@7, ~ [ab2,eb4]@6 [ab3,eb4]@10 ~@10 g3@5, ~@5 eb3@4 ab2@8 ~@15", // Ab Eb5 Ab5
  O: "~ f4@6 ~@6 db4@3 ~ db4@4 ~@8 db4@3, ~ bb2@15 ~ [eb2,f4]@6 db4@4 [eb3,eb4]@5, ~ db4@10 f3@5 ~@5 bb2@11, ~@7 [ab3,f4]@9 ~@7 [ab3,f4]@9, ~@25 eb2@7", // Ebsus2 Eb Db
  P: "~@13 eb4@4 [bb3,eb4,g4]@4 ~@8 [bb3,eb4,g4]@3, ~ eb4@10 eb3@6 c3@6 [bb3,eb4]@4 g3@5, ~ [ab2,bb3,c4]@6 [bb3,c4,ab4]@10 ~@4 g3@4 c3@7, ~@5 eb3@4 ab2@8 ~@6 ab4@9", // Eb Eb5 Ab Fm
  Q: "~ [bb2,db4]@6 ~@6 f4@4 [ab3,db4,f4]@4 ~@8 [db4,f4]@3, ~ f4@10 f3@6 ~@4 bb2@11, ~@7 [bb3,db4,ab4]@10 ~@6 [ab3,ab4]@9, ~@9 bb2@8 eb2@6 db4@4 eb3@5, ~@25 eb2@7", // Bbm Db Bbm7 Ab
  R: "[~ [bb2,bb3,db4]@6 ~@6 f4@3 ~ [bb3,db4]@4 ~@4 gb3@2 ~@4 db4@2 [bb3,db4,gb4]@4 ~@8 gb4@3 ~ [eb3,bb3,eb4,g4]@6 [f3,bb3,eb4,ab4]@6 [g3,bb3,eb4,bb4]@10 [bb3,g4] ~ [f3,ab4]@4 [g3,bb4]@4 ~@12 c4@3, ~ f4@10 f3@5 ~@5 db3@8 gb4@4 ~@10 gb3@5 ~@25 bb3@3 ~ bb3@2 ~@2 [ab3,c4]@10 ab3@5, ~@7 [bb3,db4,ab4]@9 ~ gb4@10 gb3@6 ~@4 db3@11 ~@23 eb3@2 ~@14 ab4@9, ~@9 bb2@7 ~ gb2@16 gb2@8 gb2@7 ~@41 ab2@7, ~@23 [bb3,db4,ab4]@10 ~@6 [bb3,db4,ab4]@9 ~@23 eb4@9 ~ [eb4,c5]@15]/3", // Bbm Gb Eb Fm7 Eb Fm Gm Ab …
  S: "~ g4@4 ~@8 bb3@3 ~ db4@4 ~@8 eb4@3, ~ bb3@10 g3@6 eb4@8 db2@2 db3@5, ~ [c3,eb4]@6 [eb4,g4]@10 f4@15, ~@5 g3@4 c3@8 db2@6 [ab3,db4,ab4]@9, ~@21 ab2@11", // Cm Eb Db5
  T: "~ [eb3,bb3,eb4,g4]@6 [bb3,eb4]@6 [g3,bb3,eb4,bb4]@4 ~@12 c4@3, ~@7 [f3,ab4]@9 ~ [eb4,c5]@15, ~@17 ab3@8 ab2@7, ~@21 c4@6 ab3@5, ~@23 ab4@9", // Eb Eb5 Eb Fm Cm
  U: "~ [bb3,eb4]@4 ~@8 g4@4 [bb3,db4,f4]@5 ~@7 f4@3, ~ g4@10 g3@6 ~@10 f3@5, ~ c3@6 [bb3,eb4,bb4]@10 ~@6 [bb3,db4,ab4]@9, ~@5 g3@4 c3@8 bb2@6 ~@2 bb2@7", // Eb5 Bbm Eb5 Bbm7
  V: "~ [db4,f4,ab4,db5]@4 ~@8 db4@3 ~@13 ab4@3, ~ eb2@10 ab4@5 ~ ab4@10 ab3@5, ~@5 bb2@11 ~ [ab2,c4,eb4]@8 ab2@7, ~@7 [f4,c5]@9 ~@7 [c4,eb4,bb4]@9, ~@7 db4@2 eb3@8 ~@4 eb3@11", // Db Ab F5 Cm7
  W: "~ [bb3,eb4,g4]@4 ~@8 g4@2 bb3 ~ [db4,f4]@5 ~@7 db4@2 ab3, ~ c3@6 [bb3,eb4,ab4]@9 ~@7 f4@9, ~@5 g3@4 c3@7 ~ db3@6 ~@2 db3@7, ~@11 g3@6 ~@6 db4@4 ab3@4 ~", // Eb Db Ebsus4
  X: "~ [eb2,ab3,db4,eb4]@4 eb3@2 ~@6 eb4@2 db4 ~ [bb2,db4]@6 ~@6 f4@3, ~@7 [ab3,db4,f4]@9 ~ f4@10 f3@5, ~@9 eb2@7 ~@9 bb2@7, ~@11 eb3@5 ~ bb3@5 ~ [bb3,db4,ab4]@9", // Dbsus2 Bbm Db Bbm7
  Y: "~ [ab3,db4,f4]@4 ~@8 eb4@4 [db4,f4]@4 ~@8 [db4,f4,db5]@3, ~ eb4@10 db3@6 [bb2,bb4]@15, ~ db2@6 [ab3,db4,ab4]@10 ~@4 f3@4 bb3@7, ~@5 db3@4 db2@8 ~@6 c5@9, ~@23 [db4,f4]@4 f3@5", // Db Bb Db5 Db
  Z: "[~@11 db4@4 ~@48 gb3@2 ~@56 eb2@7, ~ f4@22 eb4@2 f4@2 eb4@28 gb3@2 ab3@2 bb3@2 ab3@4 ~@6 ab3@14 eb3@6 bb3@9 ~@3 ab3@24 ~, ~ eb2@14 ab3@5 ~ ab3@11 ~ gb3@6 ab3@4 bb3@4 db4@17 ~@11 bb3@12 ab3@13 ~ eb3@27, ~ db4@6 ab3@2 eb3@8 ~@2 eb3@13 ~@5 db3@27 ~@5 eb3@10 eb4@22 ~@6 bb3@21, ~@5 bb2@11 ~ ab2@16 gb2@31 ~ [ab2,c4]@30 eb3@2 ab2@14 eb4@17]/4", // Ab
  AA: "~@9 eb4@7 ~ [bb3,eb4,g4]@5 ~@7 g4@3, ~ [ab2,eb3,ab3,c4]@15 ~ c3@15, ~@23 [bb3,eb4,ab4]@9, ~@25 g3@7", // Eb Ab Ebsus4
  AB: "~ [db4,f4]@5 ~@7 f4@3 ~@13 eb4@3, ~ bb2@6 db4@16 ab3@4 db4@5, ~@7 ab4@9 ~@5 eb3@11, ~@9 bb2@7 ~ [eb2,f4]@15, ~@11 f3@5 ~@3 bb2@13", // Db Ebsus2
  AC: "~ [ab2,c4]@6 ~@6 c4@3 ~ [c3,bb3,eb4]@6 ~@6 [db4,eb4]@3, ~ eb4@15 ~@7 eb4@6 ~@3, ~ bb3 ~@5 bb3@9 ~@7 [bb3,g4]@9, ~@9 ab2@7 ~@11 g3@5, ~@11 eb3@5 ~@9 c3@7", // Ab Cm7 Dbsus2 Eb
  AD: "[~ [db4,f4]@4 ~@8 c4@2 ~@14 [eb3,db4,f4]@4 [ab2,c4]@4 ~@8 c4@3 ~ [c3,bb3,eb4,g4]@4 ~@8 [bb3,g4]@3, ~ bb2@14 db4@6 eb3@2 [eb4,g4]@9 ~ eb4@10 ab3@5 ~@5 g3@4 ~@2 g3@5, ~@5 f3@11 ~ eb2@15 ~@9 ab2@7 ~@9 c3@7, ~@7 f4@22 ~@10 ab4@9 ~@7 [eb4,ab4]@9, ~@7 db4@4 bb3@5 ~@3 bb2@13 ~@5 eb3@11 ~@7 bb3@6 ~@3]/2", // Db Ab Cm7 Eb Ab5
  AE: "~ bb2@6 ~@6 f4@3 ~ [ab3,db4,f4]@4 ~@8 f4@3, ~ f4@10 f3@5 ~@5 bb2@11, ~ db4@5 ~ [db4,ab4]@9 ~@7 [ab3,db4,ab4]@9, ~@9 bb2@7 ~ eb2@8 eb2@7, ~@27 eb3@5", // Db Db5
  AF: "[~ [db4,f4]@4 ~@8 [db4,f4,bb4]@3 ~ [db4,ab4]@4 ~@12 [db4,gb4]@4 ~@8 ab4@3 ~ [eb3,bb3,eb4,g4]@6 [f3,bb3,eb4,ab4]@6 [g3,bb3,eb4,bb4]@10 [eb3,g4]@2 [f3,bb3,ab4]@4 [g3,eb4,bb4]@4 ~@12 c4@3, ~ bb2@15 ~ gb2@10 db3@2 gb2@10 [db4,gb4,bb4]@9 ~@23 eb4@5 ~@5 [eb4,c5]@15, ~@5 f3@4 bb3@7 ~@7 [db4,gb4]@8 db3@10 gb2@7 ~@41 ab2@7, ~@7 ab4@9 ~ bb4@20 gb3@6 [db3,gb3]@5 ~@23 bb3 ~@5 bb3@2 ~@2 [ab3,c4]@10 ab3@5, ~@7 [db4,f4]@4 f3@5 ~@5 db3@4 gb3@8 db5@15 ~@39 ab4@9]/3", // Db Bbm Db5 Gb5 Eb Fm7 Eb Bb7 …
  AG: "[~@13 [eb4,g4]@3 ~@15 bb3@2 [eb3,bb3,eb4,g4]@6 [f3,bb3,eb4,ab4]@6 [g3,bb3,eb4,bb4]@4 c4@6 ~@6 bb3@3, ~ [c3,bb3,eb4,g4]@6 [bb3,ab4]@9 ~@7 [ab3,db4,ab4]@6 eb4@4 ~@16 [ab3,eb4]@15, ~@5 g3@4 c3@7 ~ [db2,db4,eb4,f4]@7 ~ db2@8 ~@26 eb3@5, ~@7 eb4@4 g3@5 ~@5 ab2@12 ~@24 ab2@7, ~@27 db3@6 ~@22 c4@9]/2", // Eb Fm7 Eb Cm7 Bb7 Db5 Ab5 Db
  AH: "[~ [bb3,eb4]@5 ~ bb3@4 ~@2 bb3@4 bb2@6 ~@6 db4@2 ~@14 eb4@3 ~ bb2 ~@11 bb3@3, ~ c3@15 ~@9 bb2@6 eb4@6 eb3@6 eb3@5 ~@7 c4@9, ~@7 eb4@10 db4@10 f3@5 ~ eb2@8 eb2@7 ~@11 eb3@5, ~@11 g3@5 ~@7 ab3@9 ~ db4@5 ~ [ab3,db4,ab4]@9 ~ eb4@15, ~@35 bb2@13 ~@5 ab2@11]/2", // Eb5 Db5
  AI: "~ [bb3,eb4]@4 ~@8 [bb3,g4]@4 [db4,f4]@6 db4@4 ~@2 db4@3, ~ [c3,g4]@6 [eb4,ab4]@9 ~@7 f4@9, ~@5 g3@4 c3@7 ~ db3@15, ~@7 bb3@4 g3@6 ~@10 ab3@5", // Eb5 Eb Db C5 Ab5
  AJ: "~ [eb3,bb3,eb4,g4]@6 [f3,bb3,eb4,ab4]@6 [g3,bb3,bb4]@4 [bb2,db4,f4]@6 ~@6 bb3@3, ~@13 eb4@2 ~@8 [db4,f4]@9, ~@25 bb2@7, ~@27 f3@5", // Eb Fm7 Gm Bbm Db
  AK: "~@13 eb4@3 ~ [bb2,ab3,db4]@6 ~@6 f4@3, ~ f4@10 db3@5 ~@7 [ab3,db4,ab4]@9, ~ eb4@8 db2@7 ~@11 f3@5, ~ [db2,db4]@6 [ab3,db4,ab4]@9 ~ f4@12 ~@3, ~@5 ab2@11 ~@9 bb2@7", // Bbm7 Db5 Db Db5
  AL: "~ [ab3,f4]@4 ~@8 ab3@4 ~@10 eb3@4 ab3, ~ [eb2,db4]@16 ~@6 c4@9, ~@5 bb2@12 [ab2,eb4]@15, ~@7 f4@10 ~@4 bb3@11, ~@7 ab3@2 eb3@8 ~@2 ab3@12 ~", // Db Eb7 Ab5
  AM: "[~@29 ab3@2 gb3@2 ~@26 eb4@4 db4@2 [ab2,eb3,c4]@15 ~ [db3,ab3,db4]@2 [ab2,ab3,c4,eb4]@13, ~ gb2@31 ~ ab2@22 ab3@8 ab3@17 ~@16, ~ db4@12 ab3@10 gb3@8 ~@6 eb3@10 c4@16 ~@18 f4 ~@14, ~@3 gb3@4 bb3@18 ab3@2 bb3@5 ~@7 ab3@14 eb3@10 f3 ~@32, ~@5 ab3@6 gb3@4 db4@17 ~ c4@10 bb3@20 ~@33]/3", // Ab Db5 Ab
  AN: "~@13 ab3@2 ~@6 ab3@2 [ab3,bb3,db4]@4 [f2,ab3,db4,f4]@5, ~ [gb2,bb3,db4]@16 gb2@10 ~@5, ~ ab3@12 ~@2 [ab3,bb3,db4]@8 ~@9, ~@9 db3@10 db3@8 ~@5", // Bbm7 Db Gb Bbm7
  AO: "~ c4@8 [c4,ab4]@6 ~@2 ab2@2 eb3@2 [ab2,ab3,db4,f4] ~@3 [db4,f4]@2 [c4,eb4]@5, ~ [ab2,ab3,eb4]@14 [ab3,c4,eb4,ab4]@5 ~@12, ~@9 eb3@10 ~@6 [ab2,ab3]@7", // Fm Db Cm Ab5 Ab
  AP: "[~ [gb2,ab3,bb3,db4]@18 ~@2 gb2@6 f2@4 f3@2 [c4,eb4]@5 ~@7 ab3@2 ~@14 [eb4,gb4]@3, ~@19 [ab3,db4]@16 ~@4 [ab3,c4,eb4]@8 [ab3,c4,eb4]@5 ~ [ab3,c4]@11, ~@19 bb3@9 ~@5 ab2@6 ~@2 ab2@8 ab2@15, ~@43 eb3@8 eb3@13, ~@53 eb4@4 [db4,f4]@7]/2", // Gb Cm Ebm Db5 Ab Db
  AQ: "~ [db2,ab3,db4,f4]@6 ~@6 [ab3,db4,f4]@3 ~@13 ab3@3, ~@7 [ab3,db4,f4]@4 db3@6 ab4@10 eb3@5, ~@9 db2@7 ~ [eb2,ab3,db4]@6 [db4,f4]@9, ~@21 bb2@11, ~@23 ab3@2 eb2@7", // Db Dbsus2 Db
  AR: "[~@13 [bb3,c4,ab4]@2 ~@16 c4@2 ~@4 ab3@2 ~@6 ab3@4 db4@6 ~@6 ab3@3, ~ c4@10 eb3@6 ab2@4 ab3@2 [c4,eb4,c5]@4 ab3@2 ab4@4 f4@22 [db4,f4]@9, ~ [ab2,bb3,eb4]@6 [bb3,eb4]@8 bb3@18 ~@6 ab3@2 db2@16 db2@7, ~@5 eb3@4 ab2@6 ab4@10 ab2@8 ~@8 eb4@23, ~@15 [c4,eb4]@4 eb3@14 [db3,db4]@16 [db3,ab3]@10 db3@5]/2", // Fm Cm Db Absus2 Eb5 Cm Db Db5
  AS: "~ [ab3,db4,f4]@6 [eb2,ab3,db4,f4,ab4]@25, ~ eb3@31", // Db
  AT: "~@13 eb4@2 bb3 ~ eb4@4 ~@8 [bb3,eb4]@3, ~ [bb3,c4]@10 ab3@5 ~@5 g3@4 c3@7, ~ eb4@8 ab2@7 ~@7 ab4@9, ~ ab2@6 ab4@9 ~ g4@15, ~@5 eb3@11 ~ [c3,bb3]@6 [bb3,eb4]@4 g3@5", // Eb5 Bbsus2 C7 Eb5
  AU: "~ [db2,db4,eb4,f4]@4 ~@10 bb3@2 [eb3,bb3,eb4,g4]@6 [f3,bb3,eb4,ab4]@6 [g3,bb3,eb4,bb4]@3, ~@5 ab2@8 eb4@4 ~@15, ~@7 [ab3,db4,ab4]@10 ~@15, ~@9 db2@8 ~@15, ~@11 db3@6 ~@15", // Db Eb Fm7 Eb Db5
  AV: "~ eb4@4 ~@24 [c4,eb4,g4]@3, ~ c5@12 c4@8 g3@4 c3@7, ~ ab3@8 ab2@7 ~ c3@6 [c4,eb4]@4 g3@5, ~@5 c4@6 [ab3,bb4]@6 g4@12 ~@3, ~@7 eb4@16 ab4@9", // Cm Absus2
  AW: "~@11 f4@4 db4 ~@5 db4 ~@7 [f4,ab4]@2 db4, ~ [db3,eb4]@15 ~ eb2@6 [db4,db5]@9, ~ f4@10 ~@6 eb4@4 eb3@4 eb2@7, ~@7 [db4,ab4]@9 ~@3 bb2@13, ~@23 [f4,ab4]@4 eb3@5", // Fm Dbsus2 Db Db5 Fm
  AX: "~ [c4,eb4,ab4]@4 ~@8 ab4@3 ~@5 g3@2 ~@6 [eb4,g4]@3, ~ ab2@6 [c4,eb4,bb4]@9 ~@7 [bb3,f4,ab4]@9, ~@5 eb3@11 ~ [c3,bb3,eb4,g4]@7 ~ c3@7, ~@9 ab2@7 ~@16, ~@11 ab3@5 ~@11 g3@5", // Ab Eb Cm7 Bb7 Cm7
  AY: "~@15 bb3@2 [eb3,bb3,eb4,g4]@6 [f3,bb3,eb4,ab4]@6 [g3,bb3,bb4]@3, ~ [db2,ab3,db4,eb4,f4]@6 [ab3,db4,ab4]@6 eb4@4 ~@15, ~@5 ab2@12 ~@15, ~@9 db2@8 ~@15, ~@11 db3@6 ~@15", // Eb Fm7 Gm Db Db5
  AZ: "~ [bb2,db4,eb4]@6 ~@6 eb4@4 [ab3,db4,eb4,f4]@5 ~@7 eb4@2 ab3, ~ ab3@5 ~ [ab3,db4,ab4]@10 ~@6 [ab3,db4,ab4]@9, ~ f4 ~@7 bb2@8 db3@8 db2@7, ~@27 db3@5", // Eb7 Db Db5
  BA: "[~ [ab3,db4,eb4,f4]@5 ~@7 eb4@4 ~@8 [eb3,ab3]@23 ~ c4@17 ~@17 [ab1,ab3]@40 ~@5, ~ bb2@6 [ab3,db4,ab4]@10 ~@32 eb4@72 ~@7, ~@9 bb2@8 [eb2,eb4,ab4]@31 ~ ab2@33 ~@46, ~@11 eb3@6 ~@32 bb3@26 bb3@47 ~@6, ~@67 eb3@15 ~ c4@33 ~@12]/4", // Db Ab5 Ab Db5 Ab5
})).s("gm_piano").gain(0.61)

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

// drums · rim
const rim = s("rim").struct(`<
  ~@14 A@7 B C A C A C A C A B ~@3 A@7 B C A C A C A C A B ~@11 A B A B A B A@2 ~@3
>`.pickRestart({
  A: "~@9 x ~@15 x ~@6", B: "~@9 x ~@22", C: "~@25 x ~@6",
})).gain(0.64)

// drums · snare
const snare = s("sd").struct("<~@53 [~@5 x ~@11 x ~ x ~@5 x ~ x ~@4] [~@9 x ~@15 x ~@6]!6 ~@13>").gain(0.64)

// drums · low tom
const low_tom = s("lt").struct("<~@22 A ~@10 B ~@7 B C ~@10 D ~@3 B ~@3 E ~@11>".pickRestart({
  A: "~@7 x ~ x ~@22", B: "~@29 x ~@2", C: "~@11 x ~@20", D: "~@17 x ~ x ~@12", E: "~@17 x ~@7 x ~@6",
})).gain(0.58)

// drums · hihat
const hihat = s("hh").struct(`<
  A@13 B A@7 C D E@3 F E@2 F G H A@2 E I E I E I@2 J K E@3 F E@2 L G H A@2 M N O P ~ N Q ~ R E@2 I E S T I ~@3
>`.pickRestart({
  A: "~ x ~@7 x ~@7 x ~@7 x ~@6", B: "~ x ~@7 x ~@7 x ~@9 x ~ x ~@2", C: "~ x ~@7 x ~@7 x ~@5 x ~@5 x ~@2",
  D: "~@21 x ~@3 x ~@3 x ~@2", E: "~ x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@2",
  F: "~ x ~@3 x ~@3 x ~@7 x ~@3 x ~@3 x ~@3 x ~@2", G: "~ x ~@3 x ~@3 x ~@7 x ~@7 x ~@6", H: "~@17 x ~@14",
  I: "~ x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@6", J: "~ x ~@3 x ~@3 x ~@8 x ~@6 x ~@6",
  K: "~ x ~@19 x ~@3 x ~@3 x ~@2", L: "~ x ~@3 x ~@3 x ~@8 x ~@2 x ~@3 x ~@3 x ~@2", M: "~@5 x ~@7 x ~@18",
  N: "~@13 x ~@7 x ~@7 x ~@2", O: "~@5 x ~@7 x ~@7 x ~@7 x ~@2", P: "~@13 x ~@15 x ~@2", Q: "~@5 x ~@23 x ~@2",
  R: "~@5 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@2", S: "~@2 x ~@2 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@2",
  T: "~@2 x ~@2 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@6",
})).gain(0.32)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@13 A ~@8 B C D C@2 D@3 E F G@2 C H I H C J H E B C D C@2 D@3 E F G@2 K L ~ M N L O ~ D H C@2 H P H@2 ~@3
>`.pickRestart({
  A: "~@25 x ~@6", B: "~@19 x ~@3 x ~@3 x ~@4", C: "~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x",
  D: "~@3 x ~@3 x ~@3 x ~@7 x ~@3 x ~@3 x ~@3 x", E: "~@3 x ~@3 x ~@3 x ~@20", F: "~@7 x!2 ~@10 x ~@12",
  G: "~@15 x ~@16", H: "~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@4", I: "~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@7 x ~@3 x",
  J: "~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@7 x ~@4", K: "~@21 x ~@7 x ~@2", L: "~@5 x ~@26", M: "~@5 x ~@15 x ~@10",
  N: "~@13 x ~@7 x ~@7 x ~@2", O: "~@13 x ~@7 x ~@10", P: "~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@4 x ~@2 x ~@4",
})).gain(0.06)

// drums · mid tom
const mid_tom = s("mt").struct("<~@57 [~@27 x ~@4] ~@3 [~ x] ~@11>").gain(0.52)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@13 A ~ B ~ B ~@2 B C ~@2 D ~ E ~ D E@2 F B ~@2 B ~ B ~ B@2 E ~@2 D ~ E ~ D E@2 F B ~ G@3 H G H G ~@2 A ~ B ~ A B@2
  ~@3
>`.pickRestart({
  A: "~@31 x", B: "~@29 x ~@2", C: "~@21 x ~@5 x ~@4", D: "~@15 x ~@16", E: "~@13 x ~@18", F: "~@9 x ~@11 x ~@10",
  G: "~@9 x ~@7 x ~@7 x ~@6", H: "~ x ~@7 x ~@7 x ~@7 x ~@6",
})).gain(0.39)

// drums · high tom
const high_tom = s("ht").struct("<~@22 A ~@10 B ~@7 C A ~@10 D ~@3 E ~@3 F ~@11>".pickRestart({
  A: "~@13 x ~@18", B: "~@31 x", C: "~@15 x", D: "~@25 x ~ x ~@4", E: "~@25 x ~@6", F: "~@16 x ~@12 x ~@2",
})).gain(0.64)
// … 21 more lines

More by Lionel Richie