Strudelify

Say You, Say Me

Lionel Richie

KeyA♭ majorTempo64 bpm
0:00/0:00
// Say You, Say Me — RICHIE LIONEL
// 64 bpm, 4/4, key G# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: metre changes (4/4 at bar 1, 3/4 at bar 51, 4/4 at bar 52) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 9 celesta (copy of ch 15 celesta, 0.073 beats early)
// note: Full arrangement: all 65 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(64/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 B C D E F G H E F G I E J K L E J K M@2 A B C A@2 B C D A B N O A B P Q R A B C A@2 B C S ~@3 T U V W X Y Z W X Y Z
  AA@5
>`.pickRestart({
  A: "[ab3,c4,eb4]!2 [g3,bb3,eb4]!2", B: "[f3,ab3,c4]!2 [eb3,ab3,c4] [eb3,g3,c4]", C: "[ab3,db4,f4]!2 [bb3,db4,f4]!2",
  D: "[ab3,c4,eb4]!4", E: "[ab3,c4,eb4]@2 ~ ab2 [g3,bb3,eb4]@2 ~ g2, ab2@3 ~ g2@3 ~, ~ [ab3,c4,eb4] ~ [g3,bb3,eb4]",
  F: "[f3,ab3,c4]@2 ~ f2 [eb2,eb3,ab3,c4]@2 [eb2,eb3,g3,c4]@2, f2@3 ~@5, ~ [f3,ab3,c4] ~@2", // Fm Ab Cm Fm
  G: "[ab3,db4,f4]@2 ~ db3 [bb3,db4,f4]@2 [bb3,db4,f4]@2, db3@3 ~ eb3@4, ~ [ab3,db4,f4] ~@2", // Db Bbm Db
  H: "[ab3,c4,eb4]!4, ab2@15 ~", I: "[ab3,c4,eb4]!3 [eb2,ab3,c4,eb4], ab2@3 ~",
  J: "[f3,ab3,c4]!2 [eb3,ab3,c4] [c3,eb3,g3,c4], f2 ~", K: "[f3,ab3,bb3,db4]!3 [ab2,eb3,ab3,c4], bb2@3 ~",
  L: "[gb3,bb3,db4]!3 [eb2,eb3,g3,bb3,db4], gb2@3 ~", // Gb Eb7
  M: "[[gb3,bb3,db4]!4 [gb3,bb3,db4]!3 [eb2,eb3,g3,bb3,db4], gb2@7 ~]/2", // Gb Eb7
  N: "[f3,ab3,bb3,db4]@8 [f3,ab3,bb3,db4]@8 [f3,ab3,bb3,db4]@4 ~ bb3@2 db4 [eb3,ab3,c4]@8, ~@5 f3 ~@2", // Bbm7 Ab
  O: "[gb3,bb3,db4]!3 [eb3,g3,bb3,db4]", P: "[f3,ab3,bb3,db4]!3 [eb3,ab3,c4]", Q: "[gb3,bb3,db4]!4",
  R: "[eb3,g3,bb3,db4]!2 [f3,ab3,db4] [g3,bb3,eb4]", // Eb7 Db Eb
  S: "[ab3,c4,eb4]@5 [ab3,c4,eb4]@2 ~ [ab3,c4,eb4]@2 [ab3,c4,eb4]@2 ~ [ab3,c4,eb4]@2 ~ [ab3,c4,eb4]@2 [ab3,c4,eb4]@2 ~@12", // Ab
  T: "~@9 [gb3,b3,eb4]@4 [gb3,b3,eb4]@3", U: "~ [gb3,b3,eb4]@4 [gb3,b3,eb4]@4 [f3,ab3,db4]@4 [f3,ab3,db4]@3",
  V: "~ [f3,ab3,db4]@4 [g3,bb3,eb4]@4 [g3,bb3,eb4]@4 [g3,bb3,eb4]@3", // Db Eb
  W: "~ [g3,bb3,eb4]@4 [ab3,c4,eb4]@4 [ab3,c4,eb4]@4 [g3,bb3,eb4]@3", // Eb Ab Eb
  X: "~ [g3,bb3,eb4]@4 [f3,ab3,c4]@4 [f3,ab3,c4]@4 [eb3,ab3,c4]@3", // Eb Fm Ab
  Y: "~ [eb3,g3,c4]@4 [ab3,db4,f4]@4 [ab3,db4,f4]@4 [bb3,db4,f4]@3", // Cm Db Bbm
  Z: "~ [bb3,db4,f4]@4 [ab3,c4,eb4]@4 [ab3,c4,eb4]@4 [g3,bb3,eb4]@3", // Bbm Ab Eb
  AA: "[~@3 [g3,bb3,eb4]@8 [ab3,db4,f4]@9 [ab3,c4,eb4]@9 ~ [f3,bb3,db4]@10 [f3,ab3,db4]@13 ~@3 eb2@3 ~ ab2@3 bb2@4 ~@5 eb3@5 ab3@5 bb3@9 [ab3,c4,eb4]@38 ~@31, ~@53 c4@28 ~@79, ~@53 ab3@23 ~@84, ~@53 eb3@19 ~@88, ~@67 c3@19 ~@74]/5", // Eb Db Ab Bbm Db Ab
})).s("gm_piano").gain(0.16).pan(0.4)

// bass · synth bass 1
const bass = note(`<
  ~@11 A B C D E B C D F@2 G H I J G H I K G L M N G O M P Q G L I J G H R S@3 T U@5 V W@3 V X Y@5
>`.pickRestart({
  A: "~@3 eb1", B: "ab1@3 ab1 g1@3 g1", C: "f1@2 eb2 c2", D: "bb1@3 ab1", E: "gb1@3 eb1", F: "[gb1@7 eb1]/2",
  G: "ab1@11 ~ ab2@3 ~ g2@11 ~ g2@4", H: "f2@11 ~ f2@4 eb2@8 c2@7 ~", I: "db2@11 ~ db2@4 eb2@8 eb1@8",
  J: "ab1@11 ~ ab1@4 ab1@3 ~ ab1@4 eb1@3 ~ eb1@3 ~", K: "ab1@22 ~@2 eb2@7 ~", L: "f2@12 f2@4 eb2@8 eb2@7 ~",
  M: "bb1@11 ~ f1@4 bb1@8 ab1@7 ~", N: "gb1@12 gb1@3 ~ gb1@8 eb1@7 ~", O: "f2@11 ~ f2@4 eb2@7 ~ eb1@8",
  P: "gb1@27 ~ gb1@3 ~", Q: "eb1!4 f1!2 g1!2", R: "db2@6 db2@2 eb2@4 eb1@3 ~",
  S: "[ab1@2 ~ ab1@2 ab1@2 ~ ab1@2 ab1@2 ~ ab1@2 ~ ab1@2 ab1@2 ~ b1@2 b1@3 ~@3 gb1@2 gb1@2 ~ ab1@2 bb1@2 ~ b1@2 ~ db2@2 db2@3 ~@3 ab1@2 ab1@2 ~ eb1@2 b1@2 ~ eb1@2 ~ b1@2 b1@3 ~@2 gb1@2 ~ gb1@2 ~ ab1@2 bb1@2 ~ b1@2 ~ d2@2 d2@2 ~ eb2 bb1 eb2@2 ~ gb2@2]/3",
  T: "~ eb2@2 gb2!2 ~ eb2@2 b1@2 ~ b1@3 ~@2 gb1@2 ~ gb1@2 ab1@2 ~ bb1@2 ~ b1@2 db2@2 ~",
  U: "[db2@3 ~@2 ab1@2 ~ ab1@2 eb1@2 ~ b1@2 ~ eb1@2 b1@32 db2@24 eb2@32 ab1@11 ~ ab2@3 ~ g2@11 ~ g2@4 f2@11 ~ f2@4 eb2@6]/5",
  V: "~@2 c2@7 ~ db2@11 ~ db2@4 eb2@6",
  W: "[~@2 eb1@8 ab1@11 ~ ab1@4 ab1@3 ~ ab1@4 eb1@3 ~ eb1@3 ~ ab1@11 ~ ab2@4 g2@11 ~ g2@4 f2@11 ~ f2@4 eb2@6]/3",
  X: "~@2 eb1@8 ab1@11 ~ ab1@4 ab1@6", Y: "[~@3 eb1@7 ~ db2@9 c2@9 ~ bb1@10 eb2@13 ab1@95 ~@12]/5",
})).s("gm_synth_bass_1").gain(0.42)

// chords · string ensemble 1
const string_ensemble_1 = note(`<
  A@2 B@3 ~@15 C D E F G H E F I ~ J K L M J N O@2 ~@3 P Q R S T ~@3 U@4 V W@3 V X@7
>`.pickRestart({
  A: "eb6/2", B: "[db6@2 eb6@3 ~, ab6@5 ~]/3", C: "[gb3,bb3,db4]@3 [g3,bb3,eb4]", D: "[ab3,c4] g3", E: "f3 eb3",
  F: "db3 eb3", G: "ab3@2 g3 eb3", H: "ab3 g3", I: "ab3", J: "~@5 ab4 g4 eb4, ~ c4", K: "[db4,f4]@3 [c4,eb4]",
  L: "[bb3,db4]@12 bb5 c6 db6 f6", M: "eb6 ~", N: "~@10 db6@2 c6@2 bb5 ab5, [db4,f4]@3 [c4,eb4]",
  O: "[bb5@5 ab5 gb5 f5 eb5@4 [db4,f5]@2 [eb4,g5]@2, [bb3,db4]@3 ~]/2", P: "~ [eb4,g4]", Q: "[eb4,ab4] [eb4,g4]",
  R: "[c4,f4] [c4,eb4]", S: "[db4,f4]", T: "[c4,eb4]@21 ~@11",
  U: "[~@9 eb5@3 eb5@2 f5 gb5@9 ~ f5@3 f5@2 gb5 ab5@6 [eb4,bb5,eb6]@16 ~@11, ~@9 [gb3,b3,eb4]@16 [ab3,db4,f4]@12 ~@27]/4", // Eb5 B Db
  V: "~@13 [eb4,ab4]@3", W: "[~ [eb4,g4]@4 [db4,f4]@8 [db4,eb4]@8 c4@8 bb3@8 ~@11, ~@21 eb4@16 ~@11]/3",
  X: "[~@2 [eb4,g4]@8 [db4,f4,f5]@16 ab5@8 bb5@8 ~@8 ab6@8 g6@9 eb6@8 [db4,f4,f5,f6]@9 [c4,eb4,eb5,eb6]@9 ~ [db4,f4,f5,f6]@10 [db4,f4]@13 [c4,eb4]@85 ~@22, ~@26 [db4,eb4]@16 [eb4,ab5]@33 ~@29 [ab5,ab6]@99 ~@21, ~@42 c4@16 bb3@17 ~@149]/7", // Eb Db Cm Db Cm Dbsus2 Ab5 Ab
})).s("gm_string_ensemble_1").gain(0.16).pan(0.4)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  ~@21 A B C D A E C F A B G H A B G I J A K C L A K C ~@7 M@7 N@2 ~@4
>`.pickRestart({
  A: "~ eb4 ~ eb4 ~ eb4 ~ eb4, [ab4,c5]@7 ~ [ab4,c5]@7 ~ [g4,bb4]@7 ~ [g4,bb4]@7 ~", // Ab Gm
  B: "~@4 c4@4 ~@4 c4@4 ~@4 c4@4 ~@4 c4@3 ~, [f4,ab4]@7 ~ [f4,ab4]@7 ~ [eb4,ab4]@7 ~ [eb4,ab4]@7 ~", // Fm Ab5
  C: "~@4 ab3@4 ~@4 ab3@4 ~@4 ab3@3 ~@5 ab3@3 ~, [db4,f4]@7 ~ [db4,f4]@7 ~ [db4,f4]@7 ~ [db4,f4]@7 ~", // Db
  D: "~@4 ab3@4 ~@4 ab3@3 ~@5 bb3@3 ~@5 bb3@3 ~, [eb4,ab4]@7 ~ [eb4,ab4]@7 ~ [eb4,g4]@7 ~ [eb4,g4]@7 ~", // Ab5 Eb
  E: "~@4 c4@3 ~@5 c4@3 ~@5 c4@3 ~@5 c4@3 ~, [f4,ab4]@7 ~ [f4,ab4]@7 ~ [eb4,ab4]@7 ~ [eb4,g4]@7 ~", // Fm Ab5 Eb
  F: "~@4 ab3@3 ~@5 ab3@3 ~@5 ab3@3 ~@5 bb3@3 ~, [eb4,ab4]@7 ~ [eb4,ab4]@7 ~ [eb4,ab4]@7 ~ [eb4,g4]@7 ~", // Ab5 Eb
  G: "~@4 bb3@4 ~@4 bb3@3 ~@5 bb3@4 ~@4 ab3@4, [db4,f4]@7 ~ [db4,f4]@7 ~ [db4,f4]@7 ~ [c4,eb4]@7 ~", // Db Cm
  H: "~@4 gb3@4 ~@4 gb3@4 ~@4 gb3@3 ~@5 g3@3 ~, [bb3,db4]@7 ~ [bb3,db4]@7 ~ [bb3,db4]@7 ~ [bb3,eb4]@7 ~", // Bbm Eb5
  I: "~@4 gb3@4 ~@4 gb3@4 ~@4 gb3@3 ~@5 gb3@3 ~, [bb3,db4]@7 ~ [bb3,db4]@7 ~ [bb3,db4]@7 ~ [bb3,db4]@7 ~", // Bbm
  J: "~@4 g3@4 ~@4 g3@4 [db4,f4]@7 ~ [eb4,g4]@7 ~, [bb3,eb4]@7 ~ [bb3,eb4]@7 ~@17", // Db Eb Eb5
  K: "~ c4 ~ c4 ~ c4 ~ c4, [f4,ab4]@7 ~ [f4,ab4]@7 ~ [eb4,ab4]@7 ~ [eb4,g4]@7 ~", // Fm Ab5 Eb
  L: "~@4 ab3@4 ~@4 ab3@4 ~@4 bb3@4 ~@4 bb3@3 ~, [eb4,ab4]@7 ~ [eb4,ab4]@7 ~ [eb4,g4]@7 ~ [eb4,g4]@7 ~", // Ab5 Eb
  M: "[~@14 eb4@4 ~@4 eb4@4 ~@4 eb4@4 ~@4 eb4@4 ~@4 c4@4 ~@4 c4@4 ~@4 c4@4 ~@4 c4@4 ~@4 ab3@4 ~@4 ab3@4 ~@4 ab3@4 ~@4 ab3@4 ~@4 ab3@4 ~@4 ab3@4 ~@4 bb3@4 ~@4 bb3@3 ~@5 eb4@4 ~@4 eb4@4 ~@4 eb4@4 ~@4 eb4@4 ~@4 c4@4 ~@4 c4@4 ~@4 c4@4 ~@4 c4@4 ~@4 ab3@4 ~@4 ab3@4 [db4,f4]@4 ab3@2, ~@10 [ab4,c5]@7 ~ [ab4,c5]@7 ~ [g4,bb4]@7 ~ [g4,bb4]@7 ~ [f4,ab4]@7 ~ [f4,ab4]@7 ~ [eb4,ab4]@7 ~ [eb4,ab4]@7 ~ [db4,f4]@7 ~ [db4,f4]@7 ~ [db4,f4]@7 ~ [db4,f4]@7 ~ [eb4,ab4]@7 ~ [eb4,ab4]@7 ~ [eb4,g4]@7 ~ [eb4,g4]@7 ~ [ab4,c5]@7 ~ [ab4,c5]@7 ~ [g4,bb4]@7 ~ [g4,bb4]@7 ~ [f4,ab4]@7 ~ [f4,ab4]@7 ~ [eb4,ab4]@7 ~ [eb4,g4]@7 ~ [db4,f4]@7 ~ [db4,f4]@7 ~@7]/7", // Db Ab Gm Fm Ab5 Db Ab5 Eb …
  N: "[~@6 ab3@4 ~@4 ab3@4 ~@4 ab3@4 ~@5 bb3@4 ~@4 bb3@4 ~@21, ~@2 [db4,f4]@7 ~ [eb4,ab4]@7 ~ [eb4,ab4]@7 ~ [eb4,g4]@8 ~ [eb4,g4]@8 ~@21]/2", // Db Ab5 Eb
})).s("gm_acoustic_guitar_steel").gain(0.17).pan(0.3)

// chords · electric guitar clean · Fm Ab Fm
const electric_guitar_clean = note(`<
  ~@28
  [~@12 eb3 f3 ab3 bb3]
  [bb3 c4@11 ~@20, ~ b3 ~@30]
  [~@8 [f3,ab3]@2 [f3,ab3]@2 [f3,ab3] ~ [f3,ab3] ~@17]
  ~@2
  [[ab3,c4]@3 [ab3,c4]@13 ~@16]
  [~@8 [f3,ab3]@2 [f3,ab3]@2 [f3,ab3] ~ [f3,ab3] ~@17]
  ~@30
>`).s("gm_electric_guitar_clean").gain(0.15).pan(0.6)

// chords · overdriven guitar
const overdriven_guitar = note("<~@37 A B ~@6 C@2 D E F@4 ~@12>".pickRestart({
  A: "~@16 bb4@3 ~ bb4@3 ~ bb4@4 ab4@3 ~", B: "bb4@31 ~",
  C: "[[eb3,ab3]@2 ~@8 ab3@2 ~ [eb3,ab3]@2 ~ [eb3,ab3]@2 [eb3,ab3]@2 ~@3 [b2,gb3,b3]@3 ~@5 [db3,gb3,bb3]@6 ~@7 [db3,ab3,db4]@3 ~@5 [eb3,ab3,c4]@6 ~@6]/2", // Ab5 B5 Gb Db5 Ab
  D: "~ [b2,gb3,b3]@3 ~@5 [db3,gb3,bb3]@6 ~@5 [d3,a3,d4]@5 ~@5 e4@2", // B5 Gb D5
  E: "~ eb4@2 ab3@3 gb3@2 ~ gb3@2 [b2,gb3]@2 ~ d3 eb3 gb3@2 ~ [gb2,db3]@2 ~ db3@2 a2 bb2 ~ db3@2 [db3,ab3]@2 ~, ~@8 b2@2 ~@11 gb2@2 ~@9", // B5 Gb5 Db5
  F: "[[db3,ab3]@2 ~ eb3 f3 ab3@2 ~ [ab2,eb3]@2 ~ eb3@2 b2 c3 ~ eb3@2 ~ [gb3,b3]@30 ~@2 [ab3,db4]@23 [eb3,bb3]@32 ~@22, ~@10 ab2@2 ~@6 b2@30 ~@2 db3@23 ~@55]/4", // Db5 Ab5 B5 Db5 Eb5
})).s("gm_overdriven_guitar").gain(0.1).pan(0.4)

// chords · overdriven guitar · soft notes · Ab5
const overdriven_guitar_soft = note("<~@45 [~@3 eb3 ~ [eb3,ab3]@2 ~ [eb3,ab3] ~ eb3@2 ~@20] ~@19>")
  .s("gm_overdriven_guitar").gain(0.05).pan(0.4)

// chords · clavinet · Eb5 Cm
const clavinet = note("<~@2 [~@3 [bb3,eb4]] [[c4,eb4] ~] ~@61>").s("gm_clavinet").gain(0.14).pan(0.4)

// chords · distortion guitar
const distortion_guitar = note("<~@45 A B C D E@2 ~@14>".pickRestart({
  A: "~@24 [b2,gb3,b3]@3 ~@5", B: "[db3,gb3,bb3]@6 ~@7 [db3,ab3,db4]@3 ~@4 [eb3,ab3,c4]@6 ~@6",
  C: "~@2 [b2,gb3,b3]@3 ~@4 [db3,gb3,bb3]@6 ~@5 [d3,a3,d4]@5 ~@5 e4@2", // B5 Gb D5
  D: "~ eb4@2 ~ ab3@2 gb3@2 ~ [gb3,b3]@2 [e3,f3,a3,bb3] [db3,d3,eb3,gb3,g3,ab3] [bb2,b2,c3,eb3,e3,f3] [ab2,a2,db3,d3] ~@9 [db3,gb3]@5 ~ db4@2, ~@8 b2@3 ~@18 [db3,ab3]@3", // B5 Fmaj7 Dmaj7 Gb5 Db5
  E: "[[gb3,g3,b3,c4] [eb3,e3,f3,ab3,a3,bb3] [c3,db3,d3,f3,gb3,g3] [bb2,b2,eb3,e3] ~@9 [eb3,ab3]!2 ~ [ab2,eb3]@2 b2@30 ~@16]/2", // Cmaj7 Emaj7 Ab5
})).s("gm_distortion_guitar").gain(0.13).pan(0.8)

// other · clarinet
const clarinet = note("<~@14 A B C ~ D E F ~@44>".pickRestart({
  A: "~@20 bb4 db5 ab5 bb5 f6 ab6 bb6 db7 f7 ab7 bb7 db7",
  B: "ab7 bb7 db8 db7 ab7 bb7 db8 ~@9 g5 ab5 bb5 db6 eb6 gb6 ab6 bb6 bb7 db8 eb8 eb7 bb7 db8 eb8 eb7",
  C: "bb7 db8 eb8 eb7 bb7 db8 eb8 eb7 bb7 db8 ~ eb7 ~@20",
  D: "~@16 bb7 ab7 f7 db7 bb6 f6 bb6 db7 f7 ab7 bb7 db8 bb7 ab7 f7 db7",
  E: "db8 bb7 ab7 f7 db8 bb7 ab7 f7 db8 bb7 ~@6 gb6 ab6 bb6 db7 eb7 gb7 ab7 bb7 ab7 [eb7,gb7] db7 [ab6,bb6] bb6 [db7,eb7] gb7 [ab7,db8]", // Ebm Absus2 Dbsus2 Db5
  F: "bb7 [gb7,ab7] eb7 [bb6,db7] bb7 [gb7,ab7] eb7 [bb6,db7] bb7 [gb7,ab7] eb7 [bb6,db7] bb7 [gb7,ab7] eb7 [bb6,db7] bb7 [gb7,ab7] eb7 ~@13", // Gbsus2 Bbm Gbsus2 Bbm Gbsus2 Bbm Gbsus2 Bbm …
})).s("gm_clarinet").gain(0.11)

// other · clarinet · soft notes
const clarinet_soft = note(`<
  ~@15
  [~@7 db7 ab7 bb7 db8 db7 ~@20]
  [~@10 eb8 ~@21]
  ~@2
  [~@10 ab7 f7 db8 bb7 ab7 f7 db8 bb7 ab7 ~@13]
  ~@45
>`).s("gm_clarinet").gain(0.05)

// other · celesta · Db5
const celesta = note(`<
  [~@5 eb6@2 ~@2 ab5@3 ~ g5@3 ~@5 eb6@2 ~@2 ab5@3 ~ f5@3]
  [~@5 eb6@3 ~ ab5@2 ~@2 eb5@2 ~@6 eb6@2 ~@2 bb5@2 ~@2 eb5@2 ~]
  [~ [ab5,db6]@3 ~@28]
  ~@62
>`).s("gm_celesta").gain(0.37).pan(0.2)

// drums · kick
const kick = s("bd").struct(`<
  ~@11 A B@2 C D B C D E ~ B C@2 D C@2 D C B@2 D@2 B C D C F B C@2 D C@2 D G H I J K L ~ M N M@2 O M@2 O ~@5
>`.pickRestart({
  A: "~@3 x", B: "x ~@2 x!2 ~@2 x", C: "x ~@2 x!2 ~@3", D: "x ~@2 x!2 ~ x ~", E: "x", F: "x!4",
  G: "x ~@4 x ~@4 x ~@5 x ~@4 x ~@4 x ~@4 x", H: "~@4 x ~@5 x ~@4 x ~@4 x ~@4 x ~@5 x",
  I: "~@4 x ~@4 x ~@4 x ~@4 x ~@5 x ~@4 x ~", J: "~@3 x ~@4 x ~@5 x ~@4 x ~@4 x ~@4 x ~@2", K: "~ x ~@2 x ~@4 x ~@6",
  L: "~@9 x ~@6", M: "~@5 x ~@5 x ~ x ~@2", N: "~@3 x ~ x ~@5 x ~ x ~@2", O: "~ x ~@3 x ~@5 x ~ x ~@2",
})).gain(0.3)

// drums · snare
const snare = s("sd").struct("<~@21 A@7 B A@8 C A@7 D E F G H ~@2 I J@7 K ~@4>".pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@7 x!2 ~@2", C: "~@2 x!6", D: "~@8 x ~ x ~@2 x ~@2 x ~ x ~@7 x ~@5",
  E: "~@4 x ~@10 x ~@9 x ~@6", F: "~@4 x ~@9 x ~@10 x ~@6", G: "~@3 x ~@2 x!2 ~@6 x ~@9 x ~@7",
  H: "~@2 x ~@7 x ~@2 x ~@2 x ~@15", I: "~@9 x ~@6", J: "~ x ~@7 x ~@6", K: "~@3 x ~@28",
})).gain(0.35)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@37 [x!2 ~@6] ~@7 [x ~ x ~@2 x ~@26] ~@19>").gain(0.2)

// drums · low tom
const low_tom = s("lt").struct("<~@20 A ~@7 B ~@8 C ~@11 D E ~@14>".pickRestart({
  A: "~@2 x ~@11 x ~@14 x ~ x", B: "~@7 x", C: "x!8", D: "~ x", E: "~@7 x ~@8",
})).gain(0.3)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@20 [x ~ x ~@9 x ~ x ~@9 x!2 ~ x!3 ~@2] ~@28 [~@13 x ~@18] [~@4 x!2 ~@10] ~@14>")
  .gain(0.3)

// drums · open hat
const open_hat = s("oh").struct("<~@46 [~@7 x] ~@18>").gain(0.35)

// drums · high tom
const high_tom = s("ht").struct("<~@20 [x ~@11 x ~@11 x!2 ~ x!2 ~@2 x] ~@28 [~@5 x ~@10] ~@15>").gain(0.25)

// drums · crash
const crash = s("cr").struct("<~@21 A ~@16 A ~@6 B ~@2 C D@2 E ~@13>".pickRestart({
// … 14 more lines

More by Lionel Richie