Strudelify

Say You, Say Me

Lionel Richie

KeyA♭ majorTempo64 bpm
0:00/0:00
// Say You, Say Me — Lionel Richie
// 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 48-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: 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
  AA@6
>`.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@11 ~", 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]@6 [f3,ab3,bb3,db4]@6 [f3,ab3,bb3,db4]@3 ~@2 db4 [eb3,ab3,c4]@6, ~@5 f3 ~@2, ~@8 bb3 ~@3", // 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]@8 [ab3,c4,eb4]@4 [ab3,c4,eb4]@4 [ab3,c4,eb4]@4 [ab3,c4,eb4]@3 [ab3,c4,eb4]@4 [ab3,c4,eb4]@4 ~@17", // 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 [bb3,db4,f4]@12 [ab3,c4,eb4]@12 [ab3,c4,eb4]@12 [g3,bb3,eb4]@13 [g3,bb3,eb4]@13 [ab3,db4,f4]@13 ~ [ab3,c4,eb4]@14 [f3,bb3,db4]@15 [f3,ab3,db4]@20 ~@5 eb2@5 ab2@4 bb2@7 ~@7 eb3@7 ~ ab3@7 bb3@14 [ab3,c4,eb4]@57 ~@46, ~@128 c4@43 ~@117, ~@64 ab3@17 ~@63, ~@32 eb3@7 ~@33, ~@149 c3@28 ~@111]/6", // Bbm Ab 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 K L I M K N O P K Q R S T U V I J K L W X@2 Y Z AA@5 AB AC@4 AD@6
>`.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@16 ~@2 ab2@5 ~ g2@16 ~@2 g2@5 ~", H: "f2@16 ~@2 f2@5 ~ eb2@11 ~ c2@11 ~",
  I: "db2@17 ~ db2@5 ~ eb2@11 ~ eb1@11 ~", J: "ab1@17 ~ ab1@5 ~ ab1@5 ~ ab1@5 ~ eb1@5 ~ eb1@5 ~",
  K: "ab1@17 ~ ab2@5 ~ g2@17 ~ g2@5 ~", L: "f2@17 ~ f2@5 ~ eb2@11 ~ c2@11 ~", M: "ab1@33 ~@3 eb2@10 ~@2",
  N: "f2@17 ~ f2@5 ~ eb2@11 ~ eb2@10 ~@2", O: "bb1@16 ~@2 f1@6 bb1@11 ~ ab1@11 ~",
  P: "gb1@17 ~ gb1@5 ~ gb1@11 ~ eb1@10 ~@2", Q: "f2@17 ~ f2@5 ~ eb2@11 ~ eb1@11 ~",
  R: "bb1@17 ~ f1@5 ~ bb1@11 ~ ab1@11 ~", S: "gb1@41 ~ gb1@4 ~@2",
  T: "eb1@5 ~ eb1@5 ~ eb1@5 ~ eb1@5 ~ f1@5 ~ f1@5 ~ g1@5 ~ g1@5 ~", U: "ab1@17 ~ ab2@5 ~ g2@16 ~@2 g2@5 ~",
  V: "f2@17 ~ f2@5 ~ eb2@11 ~ eb2@11 ~", W: "db2@17 ~ db2@5 ~ eb2@12 eb1@9 ~@3",
  X: "[ab1@4 ab1@4 ab1@4 ab1@4 ab1@4 ab1@4 ab1@3 ab1@4 b1@3 ~ b1@4 ~@4 gb1@3 ~ gb1@3 ~ ab1@4 bb1@3 ~ b1@3 ~ db2@3 ~ db2@5 ~@2 ab1@3 ~ ab1@3 ~ eb1@3 ~ b1@3 ~ eb1@3 ~ b1@2]/2",
  Y: "~@2 b1@4 ~@4 gb1@3 ~ gb1@3 ~ ab1@3 ~ bb1@3 b1@3 ~ d2@3 ~ d2@4 eb2@2 bb1@2 eb2@4 gb2@3",
  Z: "~ eb2@4 gb2@2 gb2@2 eb2@4 b1@3 ~ b1@4 ~@3 gb1@3 ~ gb1@3 ~ ab1@3 ~ bb1@3 ~ b1@3 ~ db2@3 ~",
  AA: "[db2@5 ~@3 ab1@3 ~ ab1@3 ~ eb1@3 ~ b1@3 ~ eb1@3 ~ b1@48 db2@36 eb2@48 ab1@16 ~@2 ab2@5 ~ g2@16 ~@2 g2@5 ~ f2@16 ~@2 f2@5 ~ eb2@8]/5",
  AB: "~@4 c2@11 ~ db2@17 ~ db2@5 ~ eb2@8",
  AC: "[~@4 eb1@11 ~ ab1@17 ~ ab1@5 ~ ab1@5 ~ ab1@5 ~ eb1@5 ~ eb1@5 ~ ab1@17 ~ ab2@5 ~ g2@17 ~ g2@5 ~ f2@17 ~ f2@5 ~ eb2@12 c2@11 ~ db2@17 ~ db2@5 ~ eb2@8]/4",
  AD: "[~@4 eb1@11 ~ ab1@16 ~@2 ab1@5 ~ ab1@12 eb1@10 ~@3 db2@13 ~ c2@14 bb1@15 eb2@20 ab1@142 ~@18]/6",
})).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@4 W@8
>`.pickRestart({
  A: "[eb6@95 ~]/2", B: "[db6@47 ~ eb6@72 ~@24, 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@47 ~", 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]", // Db Cm
  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]@47 ~", T: "[c4,eb4]@31 ~@17",
  U: "[~@28 eb5@9 eb5@6 f5@3 gb5@26 ~@4 f5@9 f5@6 gb5@3 ab5@18 [eb4,bb5,eb6]@47 ~@33, ~@28 [gb3,b3,eb4]@47 ~ [ab3,db4,f4]@36 ~@80]/4", // Eb5 B Db
  V: "[~@10 [eb4,ab4]@3 [eb4,g4]@3 [db4,f4]@6 [db4,eb4]@6 c4@6 bb3@6 ~@8, ~@7 eb4@3 ~@2]/4", // Ab5 Eb Db Dbsus2
  W: "[~@40 [eb4,ab4]@12 [eb4,g4]@12 [db4,f4,f5]@24 ab5@12 bb5@12 ~@12 ab6@12 g6@12 eb6@13 [db4,f4,f5,f6]@13 ~ [c4,eb4,eb5,eb6]@14 [db4,f4,f5,f6]@15 [db4,f4]@20 [c4,eb4]@128 ~@32, ~@88 [db4,eb4]@24 [eb4,ab5]@49 ~@43 [ab5,ab6]@148 ~@32, ~@112 c4@24 bb3@25 ~@223]/8", // Ab5 Eb Db Cm Db Cm Dbsus2 Ab5 …
})).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 F G A H I J A K L M N O P Q R S T U ~@7 V@5 W@4 ~@4
>`.pickRestart({
  A: "~@6 eb4@5 ~@7 eb4@5 ~@7 eb4@5 ~@7 eb4@5 ~, [ab4,c5]@11 ~ [ab4,c5]@11 ~ [g4,bb4]@11 ~ [g4,bb4]@11 ~", // Ab Gm
  B: "~@6 c4@5 ~@7 c4@6 ~@6 c4@6 ~@6 c4@4 ~@2, [f4,ab4]@11 ~ [f4,ab4]@11 ~ [eb4,ab4]@11 ~ [eb4,ab4]@11 ~", // Fm Ab5
  C: "~@6 ab3@5 ~@7 ab3@5 ~@7 ab3@5 ~@7 ab3@4 ~@2, [db4,f4]@11 ~ [db4,f4]@11 ~ [db4,f4]@11 ~ [db4,f4]@11 ~", // Db
  D: "~@6 ab3@5 ~@7 ab3@5 ~@7 bb3@5 ~@7 bb3@4 ~@2, [eb4,ab4]@11 ~ [eb4,ab4]@11 ~ [eb4,g4]@11 ~ [eb4,g4]@11 ~", // Ab5 Eb
  E: "~@6 c4@5 ~@7 c4@5 ~@7 c4@5 ~@7 c4@4 ~@2, [f4,ab4]@11 ~ [f4,ab4]@11 ~ [eb4,ab4]@11 ~ [eb4,g4]@11 ~", // Fm Ab5 Eb
  F: "~@6 ab3@5 ~@7 ab3@5 ~@7 ab3@5 ~@7 ab3@5 ~, [db4,f4]@11 ~ [db4,f4]@11 ~ [db4,f4]@11 ~ [db4,f4]@11 ~", // Db
  G: "~@6 ab3@5 ~@7 ab3@5 ~@7 ab3@5 ~@7 bb3@4 ~@2, [eb4,ab4]@11 ~ [eb4,ab4]@11 ~ [eb4,ab4]@11 ~ [eb4,g4]@11 ~", // Ab5 Eb
  H: "~@6 c4@6 ~@6 c4@5 ~@7 c4@6 ~@6 c4@5 ~, [f4,ab4]@11 ~ [f4,ab4]@11 ~ [eb4,ab4]@11 ~ [eb4,ab4]@11 ~", // Fm Ab5
  I: "~@6 bb3@5 ~@7 bb3@5 ~@7 bb3@6 ~@6 ab3@6, [db4,f4]@11 ~ [db4,f4]@11 ~ [db4,f4]@11 ~ [c4,eb4]@11 ~", // Db Cm
  J: "~@6 gb3@6 ~@6 gb3@5 ~@7 gb3@5 ~@7 g3@4 ~@2, [bb3,db4]@11 ~ [bb3,db4]@11 ~ [bb3,db4]@11 ~ [bb3,eb4]@11 ~", // Bbm Eb5
  K: "~@6 c4@5 ~@7 c4@5 ~@7 c4@5 ~@7 c4@5 ~, f4@11 ~ [f4,ab4]@11 ~ [eb4,ab4]@11 ~ [eb4,ab4]@11 ~, ~ ab4@11 ~@36", // Fm Ab5
  L: "~@6 bb3@6 ~@6 bb3@5 ~@7 bb3@6 ~@6 ab3@5 ~, [db4,f4]@11 ~ [db4,f4]@11 ~ [db4,f4]@11 ~ [c4,eb4]@11 ~", // Db Cm
  M: "~@6 gb3@6 ~@6 gb3@5 ~@7 gb3@5 ~@7 gb3@5 ~, [bb3,db4]@11 ~ [bb3,db4]@11 ~ [bb3,db4]@11 ~ [bb3,db4]@11 ~", // Bbm
  N: "~@6 g3@6 ~@6 g3@5 ~ [db4,f4]@11 ~ [eb4,g4]@11 ~, [bb3,eb4]@11 ~ [bb3,eb4]@11 ~@25", // Db Eb Eb5
  O: "~@6 eb4@5 ~@7 eb4@6 ~@6 eb4@6 ~@6 eb4@5 ~, [ab4,c5]@11 ~ [ab4,c5]@11 ~ [g4,bb4]@11 ~ [g4,bb4]@11 ~", // Ab Gm
  P: "~@6 c4@6 ~@6 c4@6 ~@6 c4@6 ~@6 c4@5 ~, [f4,ab4]@11 ~ [f4,ab4]@11 ~ [eb4,ab4]@11 ~ [eb4,g4]@11 ~", // Fm Ab5 Eb
  Q: "~@6 ab3@5 ~@7 ab3@6 ~@6 ab3@5 ~@7 ab3@5 ~, [db4,f4]@11 ~ [db4,f4]@11 ~ [db4,f4]@11 ~ [db4,f4]@11 ~", // Db
  R: "~@3 ab3@3 ~@3 ab3@3 ~@3 bb3@3 ~@3 bb3@2 ~, [eb4,ab4]@11 ~ [eb4,ab4]@11 ~ [eb4,g4]@11 ~ [eb4,g4]@11 ~", // Ab5 Eb
  S: "~ eb4 ~ eb4 ~ eb4 ~ eb4, [ab4,c5]@11 ~ [ab4,c5]@11 ~ [g4,bb4]@11 ~ [g4,bb4]@11 ~", // Ab Gm
  T: "~ c4 ~ c4 ~ c4 ~ c4, [f4,ab4]@11 ~ [f4,ab4]@11 ~ [eb4,ab4]@11 ~ [eb4,g4]@11 ~", // Fm Ab5 Eb
  U: "~@6 ab3@5 ~@7 ab3@6 ~@6 ab3@5 ~@7 ab3@4 ~@2, [db4,f4]@11 ~ [db4,f4]@11 ~ [db4,f4]@11 ~ [db4,f4]@11 ~", // Db
  V: "[~@22 eb4@5 ~@7 eb4@6 ~@6 eb4@6 ~@6 eb4@6 ~@6 c4@6 ~@6 c4@6 ~@6 c4@6 ~@6 c4@5 ~@7 ab3@6 ~@6 ab3@6 ~@6 ab3@6 ~@6 ab3@6 ~@6 ab3@6 ~@6 ab3@6 ~@6 bb3@6 ~@6 bb3@5 ~@7 eb4@6 ~@6 eb4@5 ~ [g4,bb4]@6 eb4@2, ~@16 [ab4,c5]@11 ~ [ab4,c5]@11 ~ [g4,bb4]@11 ~ [g4,bb4]@11 ~ [f4,ab4]@11 ~ [f4,ab4]@11 ~ [eb4,ab4]@11 ~ [eb4,ab4]@11 ~ [db4,f4]@11 ~ [db4,f4]@11 ~ [db4,f4]@11 ~ [db4,f4]@11 ~ [eb4,ab4]@11 ~ [eb4,ab4]@11 ~ [eb4,g4]@11 ~ [eb4,g4]@11 ~ [ab4,c5]@11 ~ [ab4,c5]@11 ~@9]/5", // Gm Ab Gm Fm Ab5 Db Ab5 Eb …
  W: "[~@10 eb4@5 ~@7 c4@5 ~@7 c4@6 ~@6 c4@6 ~@6 c4@5 ~@7 ab3@6 ~@6 ab3@5 ~@7 ab3@6 ~@6 ab3@6 ~@6 ab3@6 ~@6 ab3@5 ~@7 bb3@6 ~@7 bb3@6 ~@31, ~@4 [g4,bb4]@11 ~ [f4,ab4]@11 ~ [f4,ab4]@11 ~ [eb4,ab4]@11 ~ [eb4,g4]@11 ~ [db4,f4]@11 ~ [db4,f4]@11 ~ [db4,f4]@11 ~ [db4,f4]@11 ~ [eb4,ab4]@11 ~ [eb4,ab4]@11 ~ [eb4,g4]@12 [eb4,g4]@12 ~@32]/4", // Gm Fm Ab5 Eb 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
  [~@36 eb3@3 f3@3 ab3@3 bb3@2 ~]
  [~ b3 c4@16 ~@30, bb3 ~@23]
  [~@12 [f3,ab3]@3 [f3,ab3]@3 [f3,ab3] ~@2 [f3,ab3] ~@26]
  ~@2
  [[ab3,c4] [ab3,c4]@5 ~@6]
  [~@12 [f3,ab3]@3 [f3,ab3]@3 [f3,ab3] ~@2 [f3,ab3] ~@26]
  ~@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: "~@24 bb4@4 ~@2 bb4@4 ~@2 bb4@6 ab4@5 ~", B: "bb4@47 ~",
  C: "[[eb3,ab3]@3 ~@13 ab3@2 ~@2 [eb3,ab3]@2 ~@2 [eb3,ab3]@2 ~ [eb3,ab3]@2 ~@6 [b2,gb3,b3]@4 ~@8 [db3,gb3,bb3]@10 ~@10 [db3,ab3]@4 ~@7 [eb3,ab3,c4]@9 ~@9, ~@33 db4@2 ~@13]/2", // Ab5 B5 Gb Db5 Ab
  D: "~@2 [b2,gb3,b3]@4 ~@8 [gb3,bb3]@10 ~@6 [d3,d4]@8 ~@7 e4@3, ~@13 db3@10 ~@6 a3@8 ~@11", // B5 Gb D
  E: "~ eb4@4 ab3@4 gb3@4 [b2,gb3]@2 ~@2 [b2,gb3]@3 ~ d3@2 ~ gb3@2 ~@3 db3@2 ~ [gb2,db3]@3 ~ a2@2 bb2@2 db3@2 ~@2 [db3,ab3]@2 ~@2, ~@23 eb3@2 ~@3 gb2@2 ~@18", // B5 Gb5 Db5
  F: "[[db3,ab3]@3 ~ eb3@2 f3@2 ab3@2 ~@2 [ab2,eb3]@2 ~@2 [ab2,eb3]@3 ~ b2@2 c3@2 eb3@3 ~ [b2,gb3,b3]@45 ~@3 [db3,ab3,db4]@34 ~@2 [eb3,bb3]@47 ~@33]/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 [~@4 eb3 ~@3 [eb3,ab3]@2 ~@2 [eb3,ab3]@2 ~@2 eb3@2 ~@30] ~@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@2 D@2 ~@14>".pickRestart({
  A: "~@9 [b2,gb3,b3] ~@2", B: "[db3,gb3,bb3]@10 ~@9 [db3,ab3,db4]@4 ~@8 [eb3,ab3,c4]@9 ~@8",
  C: "[~@2 [b2,gb3,b3]@4 ~@8 [db3,gb3,bb3]@10 ~@6 [d3,a3,d4]@8 ~@8 e4@3 eb4@4 ab3@4 gb3@4 [b2,gb3,b3]@4 [e3,f3,a3,bb3] [d3,eb3,g3,ab3] [c3,db3,f3] [bb2,b2,eb3,e3] [ab2,a2,db3,d3] ~@14 [db3,gb3]@8 [db3,ab3,db4]@4, ~@67 gb3@3 ~@26]/2", // B5 Gb D5 B5 Fmaj7 Ebmaj7 Dbmaj7 Emaj7 …
  D: "[[gb3,g3,b3,c4] [e3,f3,a3,bb3] [d3,eb3,g3,ab3] [c3,db3,f3,gb3] [bb2,b2,eb3,e3] ~@15 [eb3,ab3]@2 [eb3,ab3] ~ [ab2,eb3]@4 b2@45 ~@23]/2", // Cmaj7 Fmaj7 Ebmaj7 Dbmaj7 Emaj7 Ab5
})).s("gm_distortion_guitar").gain(0.13).pan(0.8)

// other · clarinet
const clarinet = note("<~@14 A@3 ~ B@2 C ~@44>".pickRestart({
  A: "[~@30 bb4@2 ~ ab5 ~@2 f6@2 ~ bb6@2 ~ f7@2 ~ bb7@2 ~ ab7@2 ~ db8@2 ~ ab7@2 ~ db8@2 ~@13 g5@2 ~ bb5@2 ~ eb6@2 ~ ab6@2 bb6 bb7@2 ~ eb8@2 ~ bb7@2 ~ eb8 ~@2 bb7@2 ~ eb8@2 ~ bb7@2 ~ eb8@2 ~ bb7@2 db8@2 ~ eb7@2 ~@29, ~@32 db5@2 ~ bb5@2 ~ ab6@2 ~ db7@2 ~ ab7@2 ~ db7@2 ~ bb7@2 ~ db7@2 ~ bb7@2 ~@16 ab5@2 ~ db6@2 ~ gb6@2 ~@4 db8@2 ~ eb7@2 ~ db8@2 ~ eb7@2 ~ db8@2 ~ eb7@2 ~ db8@2 ~ eb7@2 ~@35]/3",
  B: "[~@24 bb7@2 ~ f7@2 ~ bb6@2 ~ bb6@2 ~ f7@2 ~ bb7@2 db8 bb7@2 ~ f7@2 ~ db8@2 ~ ab7@2 ~ db8@2 ~ ab7@2 ~ db8@2 bb7@2 ~@8 gb6@2 ~ bb6@2 ~ eb7@2 ~ ab7@2 ~ ab7 gb7 eb7 db7 bb6 ab6 bb6 db7 eb7 gb7 ab7 db8, ~@26 ab7@2 ~ db7@2 ~ f6@2 ~ db7@2 ~ ab7@2 ~@4 ab7@2 ~ db7@2 ~ bb7@2 ~ f7@2 ~ bb7@2 ~ f7@2 ~@13 ab6@2 ~ db7@2 ~ gb7@2 ~ bb7@2 ~@11]/2",
  C: "bb7 ab7 gb7 eb7 db7 bb6 bb7 ab7 gb7 eb7 db7 bb6 bb7 ab7 gb7 eb7 db7 bb6 bb7 ab7 gb7 eb7 db7 bb6 bb7 ab7 gb7 eb7 ~@20",
})).s("gm_clarinet").gain(0.11)

// other · clarinet · soft notes
const clarinet_soft = note(`<
  ~@15
  [~@12 ab7@2 ~ db8@2 db7@2 ~@29, ~@11 db7@2 ~ bb7@2 ~@32]
  [~@15 eb8@2 ~@31]
  ~@2
  [~@15 ab7@2 ~ db8@2 ~ ab7@2 ~ db8@2 ~ ab7@2 ~@19, ~@17 f7@2 ~ bb7@2 ~ f7@2 ~ bb7@2 ~@20]
  ~@45
>`).s("gm_clarinet").gain(0.05)

// other · celesta · Db5
const celesta = note(`<
  [~@7 eb6@4 ~@2 ab5@4 ~@2 g5@5 ~@7 eb6@4 ~@2 ab5@4 ~@2 f5@4 ~]
  [~@7 eb6@4 ~@2 ab5@4 ~@2 eb5@3 ~@9 eb6@3 ~@3 bb5@3 ~@3 eb5@3 ~@2]
  [~ [ab5,db6]@4 ~@43]
  ~@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 ~@7 x ~@7 x ~@6 x ~@7 x ~@7 x ~@7 x", H: "~@7 x ~@7 x ~@6 x ~@7 x ~@7 x ~@7 x ~",
  I: "~@6 x ~@7 x ~@6 x ~@7 x ~@7 x ~@7 x ~@2", J: "~@5 x ~@7 x ~@6 x ~@7 x ~@7 x ~@7 x ~@3",
  K: "~@4 x ~@7 x ~@14 x ~@20", 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: "~@12 x ~@3 x ~@3 x ~@2 x ~@3 x ~@11 x ~@8",
  E: "~@7 x ~@14 x ~@15 x ~@9", F: "~@6 x ~@14 x ~@15 x ~@10", G: "~@5 x ~@3 x ~ x ~@8 x ~@15 x ~@11",
  H: "~@4 x ~@11 x ~@3 x ~@2 x ~@24", I: "~@9 x ~@6", J: "~ x ~@7 x ~@6", K: "~ x ~@10",
})).gain(0.35)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@37 [x!2 ~@6] ~@7 [x!3 ~@9] ~@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: "~@3 x ~@17 x ~@22 x ~ x ~", B: "~@7 x", C: "x!8", D: "~@23 x ~@24", 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@6 L M ~@4>".pickRestart({
  A: "~ x ~ x", B: "~ x!7", C: "x!8", D: "x!6 ~@2", E: "~@35 x ~@3 x ~@3 x ~@3 x",
  F: "~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@2 x ~@3 x ~@3 x ~@3 x ~@3 x ~@7 x ~",
  G: "~@2 x ~@3 x ~@3 x ~@3 x ~@3 x ~@2 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@2",
  H: "~ x ~@15 x ~@2 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3", I: "x!4 ~@8", J: "~@7 x ~ x ~ x ~ x ~ x",
  K: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x", L: "~@3 x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@6 x ~",
  M: "~@4 x ~@6 x ~@5 x ~@13 x ~@13 x ~@2",
})).gain(0.3)
// … 33 more lines

More by Lionel Richie