Strudelify
Moonlighting cover art

Moonlighting

Leo Sayer

KeyE♭ majorTempo102 bpm
0:00/0:00
// Moonlighting — Leo Sayer
// 102 bpm, 4/4, key D# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 78 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
// note: The whole transcription plays 41 ms ahead of the beat; the grid follows it, so its parts stay together.
setcpm(102/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.

// bass · soprano sax · "SOPRAN SAX"
const bass = note(`<
  ~ A@2 B@2 A@2 C@2 D E F G H I J K L M N O P Q R S T U V W X Y Z AA AB AC AD AE P AF AG AH AI AJ AK AL AM AN AO AP AQ
  AR AS@2 AT@2 AU@2 AV AW AX AY AZ BA BB BC BD BE BF BG BH BI BJ BK BL BM BN@2 ~
>`.pickRestart({
  A: "[c1@2 ~ eb1 ~@2 f1@19 ~ f1 ~@2 f1 ~ bb0]/2", B: "[c1 ~@2 eb1 ~@2 f1@19 ~ g1 ab1 g1 f1 ~ bb0]/2",
  C: "[c1 ~@2 eb1 ~@2 f1@26]/2", D: "bb1@2 ~ c2@2 ~ db2@10", E: "eb2", F: "ab1@3 ab1@2 ~@2 ab2@7 ab1@2",
  G: "db2@3 ab1@2 ~ db2@10", H: "gb1@3 gb1@2 ~ gb2@10", I: "c2@3 c2@2 ~ c1@7 ~ c2 ~", J: "f2@3 f2 ~@2 f2@9 eb2",
  K: "bb1@2 ~ bb1@2 ~ bb2@7 ~ bb1 c2", L: "eb2@2 ~ eb2@2 ~ eb2@9 ~", M: "eb2@3 eb2@3 eb2@5 bb1 eb2@2 db2 eb2",
  N: "ab1@3 ab1!3 ab2@5 ab1 c1@3 ~", O: "db1@3 db1!3 db2@8 ~ db1", P: "gb1@2 ~ gb1!3 gb2@8 bb1 b1",
  Q: "c2@3 gb1@3 c1@2 c1@7 e1", R: "f1@3 f1@2 f1 f2@7 ~ eb2 g1", S: "bb1@3 bb1!3 bb2@5 ab2 bb1@3 ~",
  T: "eb1@2 ~ eb1!3 eb2@9 eb2", U: "eb2@2 ~@6 eb2@2 ~ f2@2 ~ g2@2", V: "ab2@2 ab1!2 ab2 eb2 bb2 ~ ab2@5 ~ eb2 ab1",
  W: "db1@2 ~ db1!5 db2@4 ~ db2 b1 ab1", X: "bb1@2 ~ bb1!3 bb2@4 ~ bb1 bb2 ~ ab2 bb2",
  Y: "eb2@2 ~ eb1 eb2!2 eb2@7 ~ eb2 bb1", Z: "ab1@3 ab1!3 gb2 ab2 ab2@3 ~ ab1@4", AA: "a1@5 ~ c2 db2 d2@3 ~ d1@3 ~",
  AB: "eb1@3 ~ eb2@12", AC: "~@2 eb2 ~@2 eb2 ~ eb1 eb2@3 eb1 eb2 ~ db2 eb2", AD: "ab1@3 ab1!3 ab2@7 ab1 b0 c1",
  AE: "db1@2 ~ db1@2 db1 db2@4 ~ db1 f1@3 ~", AF: "c2@3 g1@2 ~ c1 ~ c1@3 ~ e1@3 ~", AG: "f1@2 ~ c2@2 ~ f2@7 ~ c2 ab1",
  AH: "bb1@2 ~ f2@2 ~ bb2@4 ~ bb1 d1@4", AI: "eb1@2 ~ eb1@2 eb1 eb2 ~ eb2@7 eb2", AJ: "eb2@8 eb1@2 ~ f1@2 ~ g1@2",
  AK: "ab1@2 ~ ab1!3 ab2 eb2 bb2@2 ~ ab2@3 ab1 ~", AL: "db1@5 ab1 db2 ab1 eb2@2 ~ db2@2 ~ c2 ~",
  AM: "bb1@5 bb1 bb2 bb1 bb2@5 ~ ab2 bb1", AN: "eb1@3 eb1@2 bb1 db2 bb1 eb2@5 ~ bb1 gb1",
  AO: "ab1@2 ~ ab1!3 gb2 ab2 bb2@3 ab2@2 ~ ab1@2", AP: "a1@6 c2 db2 d2 a1 d1@5 ~", AQ: "eb2@7 ~ eb2@2 db2 d2 eb2 ~@3",
  AR: "~@2 eb1 ~@2 eb1 ~@2 eb3@3 eb2!3 db2 eb2", AS: "[c1@2 ~ eb1@2 ~ f1@19 ~ f1 ~@2 f1@2 bb0]/2",
  AT: "[c1@2 ~ eb1@2 ~ f1@19 ~ eb2 f2 ~ f2 ~ f2]/2",
  AU: "[bb1@3 c2@2 ~ eb2@5 ~ eb1@6 eb2 ~@2 eb2 ~@2 eb2 ~@2 eb1 eb2@2 db2 eb2]/2", AV: "ab1@2 ~ ab1!3 ab2 ~ ab2@6 db2 ~",
  AW: "db1@2 ~ db2 ~ db2!2 ~ eb2@4 db2@3 f1", AX: "gb1@2 ~ gb2 ~ db2 gb2 ~ gb2@5 ~ bb1 b1",
  AY: "c2@2 ~ c2 ~ g1 c1 ~ c1@2 d2 eb2 e2@4", AZ: "f1@3 f2 ~ f1 f2@2 g2@4 f2@3 ~",
  BA: "bb1@3 bb1 ~ bb1 bb2 bb1 bb2@5 bb1 d1 ~", BB: "eb1@2 ~ eb1 ~ eb1 eb2 eb1 eb2@7 eb1",
  BC: "eb1@2 ~ eb1 ~ eb1 eb2 eb1 eb2 eb2@2 eb1 db2 eb2 g1 ~", BD: "ab1@3 ab1 ~ ab1@2 ab2 ab2@5 ~ b0 c1",
  BE: "db1@2 ~ db1 ~ db1 db2!2 eb2@4 db2@3 f1", BF: "gb1@2 ~ gb1 ~ gb1 gb2 gb1 gb2@6 bb1 b1",
  BG: "c2@3 c2 ~ c1 c2@2 c1 c2 d2 eb2 e2 g1 ~ g1", BH: "f1@2 ~ f2 ~ f1 f2 f1 g2@4 f2@4",
  BI: "bb1@3 bb1 ~ bb1 bb2 bb1 bb2@3 f2 d2@4", BJ: "eb2@2 ~ eb2 ~ bb2 eb2 d2 eb2@5 bb1 g1 ~",
  BK: "ab1@2 ~ ab1 ~ ab1 ab2 ab1 bb2@4 ab2@3 ~", BL: "eb2@2 ~ eb2 ~ bb2 eb2 d2 eb2@5 ~ g1 ~",
  BM: "ab1@2 ~ ab1 ~ ab1 ab2 ab1 bb2@3 ~ ab2 ~ ab1!2", BN: "[eb1@29 ~@3]/2",
})).s("gm_electric_bass_finger").gain(0.41)

// chords · epiano1 · "E.PIANO 1"
const epiano1 = note(`<
  ~ A@8 B C D E F G H I J K L M N O P Q R S T U V W X Y Z@2 AA AB AC AD AE AF AG AH AI U V AJ AK Y AL AM A@2 AN@2 AO@2
  AP M AQ AR AS AT AU AV AW AX AY AZ BA BB BC@7
>`.pickRestart({
  A: "[[bb3,eb4,g4]@2 ~ [bb3,eb4,g4]@3 [c4,eb4,g4]@12 ~@14]/2", B: "[ab3,db4,f4]@3 [bb3,eb4,g4]@2 ~ [c4,f4,ab4]@9 ~",
  C: "[f4,ab4,db5]@3 ~", D: "c4@3 ~", E: "b3@3 ~", F: "bb3@3 ~", G: "bb4@7 ~ ab4@7 ~", H: "~@10 eb5@5 ~",
  I: "f4@8 g4@3 ~ ab4@3 ~", J: "d4@3 ~", K: "[db4,f4,ab4]@9 ~ [f4,ab4,db5]@2 ~ [db4,f4,ab4]@2 ~", L: "g4@5 ~ eb5@9 ~",
  M: "eb4@3 ~", N: "f4@5 ~ f5@9 ~", O: "[bb3,d4,g4]@8 ab4@3 ~ g4@3 ~, ~ [bb3,db4]",
  P: "[c4,eb4,bb4]@9 ~ ab4 g4 ab4 eb5@3", Q: "[ab3,c4,f4]@8 [b3,d4,e4,g4]@3 ~ ab4@3 ~", R: "bb4@5 ~ [bb4,d5,g5]@9 c5",
  S: "[d4,g4,bb4]@6 ~@2 [bb3,d4,g4]@3 [c4,eb4,ab4]@2 ~ [d4,f4,bb4]@2", T: "b4@3 ~", U: "ab4@3 ~",
  V: "ab4@10 c5@3 bb4@3", W: "gb4@3 db5", X: "eb5@3 gb4", Y: "ab4 a4",
  Z: "[bb4@9 ~ [ab4,db5,f5]@3 [f4,ab4,db5]@12 ~ [ab4,db5,f5]@3 [f4,ab4,db5]@3]/2", AA: "[c4,eb4,g4]@3 ~", AB: "gb4@3 ~",
  AC: "f4@5 f4 gb4 bb4", AD: "f4@2 ab4 db4", AE: "c4@2 g4 f4", AF: "c5@2 eb5 f5", AG: "g5@6 [bb5,d6,g6]@9 ~",
  AH: "[bb3,d4,g4]@2 ~@6 [bb3,d4,g4]@2 ~ [c4,eb4,ab4]@2 ~ [d4,f4,bb4]@2", AI: "[eb4,gb4,b4]@3 ~", AJ: "gb4@2 ab4 bb4",
  AK: "b4@8 ~@6 db5 b4, ~ eb5", AL: "bb4@10 [eb3,f4,ab4,bb4]!3 ~@3",
  AM: "~@2 [eb3,f4,ab4,bb4] ~@2 [eb3,f4,ab4,bb4] ~@2 [eb3,f4,ab4,bb4]@8", AN: "[g4@3 g4@3 g4@12 ~@14]/2",
  AO: "[[ab3,db4,f4]@3 [bb3,eb4,g4]@3 [db4,f4,ab4]@12 [f4,ab4,db5]@3 [db4,f4,ab4]@5 [f5,ab5,db6]@3 [db5,f5,ab5]@3]/2", // Db Eb Db
  AP: "[g3,c4,eb4]@3 ~", AQ: "f4@4 f4 gb4 ab4 bb4", AR: "bb4@3 c5 c5@4", AS: "bb4@3 ~", AT: "eb4@2 e4 f4",
  AU: "g4@3 [d5,g5,bb5]@5", AV: "[ab3,db4,f4]@4 bb4 c5 db5 eb5", AW: "[eb4,g4,c5]@3 ~", AX: "gb4 bb4", AY: "ab4!2",
  AZ: "c5!2", BA: "bb4@12 ~ bb4@3", BB: "f4@3 d5@3 f5@2",
  BC: "[d5@10 bb4!2 d5 g5@12 ~ bb4!2 c5 g5@12 ~ d4 g4 bb4 d5 g5@12 ~@2 c5 g5@9 d5 eb5 f5@2 ~ d5@2 eb5@2 bb5@19 ~@14]/7",
})).s("gm_epiano1").gain(0.34).pan(0.3)

// chords · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note(`<
  ~ A B C D E B F G H I J K L M N O P Q J K L M N O P R S T U V W X Y Z J K L M N O AA AB S T U AC AD AE AF AG AH AI AJ
  AK AL AM J K L M N O AN AO J K L M N O AP AQ AR AS AT@2 ~
>`.pickRestart({
  A: "g4@3 c5 ~@7 f3 g3 bb3 c4 ~, ~@3 g4@5", B: "d4 ~ [d4,g4] bb3 ~ [bb3,g4] g3!2 g4 ~@3 g4!3 ~",
  C: "c5 [f4,bb4]!2 [f4,bb4,c5] [d4,g4] ~@2 [d4,g4]@3 ~ f3 g3 bb3 c4 ~, g4@3 ~@2 [d4,g4]@2 ~@9, ~@3 bb4@5", // Bb5 Fsus4 G5
  D: "d4@2 [eb4,bb4] d4 ~ [bb3,bb4] ~@2 bb4 ~@3 bb4!3 ~, ~@6 g3@7 ~@3", E: "g4@2 ~ c5 ~@7 f3 g3 bb3 c4 ~, ~@3 g4@5",
  F: "c5 [f4,bb4]!2 [f4,bb4,c5] [d4,g4]!2 ~ [d4,g4]@3 ~ f3 g3 bb3 c4 ~, g4@3 ~@3 bb4@10", // Bb5 Fsus4 G5
  G: "d4@2 [eb4,bb4] d4 ~ [bb3,bb4] g3!2 bb4 ~ bb4 ~ bb4@4", H: "f4@3 g4 ~@2 ab4@9 ~", I: "~@6 [f4,bb4] ~, ab4@15 ~",
  J: "[c4,eb4,g4]@2 ~ [c4,eb4,g4]!2 ~@3 bb3 ~@2 bb3 ~ eb4@2 ~, ~@6 g4@9 ~, ~@6 [c4,eb4]@3 c4@3 c4@3 ~, ~@10 eb4@3 ~@3", // Cm
  K: "[b3,eb4,gb4]@2 ~ [b3,eb4,gb4]!2 ~ [b3,eb4,gb4]@9 ~", // B
  L: "[bb3,db4,f4]@2 ~ [bb3,db4,f4]!2 ~@3 ab3 ~@2 ab3 ~ db4@2 ~, ~@6 f4@9 ~, ~@6 [bb3,db4]@3 bb3@3 bb3@3 ~, ~@10 db4@3 ~@3", // Bbm
  M: "[bb3,d4,f4]@7 ~ [db4,e4,ab4]@7 ~", // Bb Dbm
  N: "[c4,eb4,g4]@2 ~ [c4,eb4,g4]!2 ~ [c4,eb4,g4]@2 bb3 c4 ~ bb3 ~ eb4@2 ~, ~@10 g4@5 ~, ~@10 [c4,eb4]@2 c4@3 ~", // Cm
  O: "[c4,eb4,f4]@7 ~ [bb3,d4,e4]@3 ~ [bb3,d4,f4]@3 ~", // F7 Em7b5 Bb
  P: "[bb3,d4,g4]@2 ~ [bb3,d4,g4]!2 ~ d4@2 ~@2 f4 ~@2 d4@2 ~, ~@6 [bb3,g4]@9 ~, ~@8 d4@5 ~@3", // Gm Eb
  Q: "[ab3,db4,f4]@9 ~ [ab3,db4,f4]@2 ~ [ab3,db4,f4]@3, bb3 ~@15", // Db
  R: "[bb3,d4,g4]@6 ~@2 [bb3,d4,g4]@2 ~ [c4,eb4,ab4]@2 ~ [d4,f4,bb4]@2", // Gm Ab Bb
  S: "[b3,eb4,gb4]@2 ~ [b3,eb4,gb4]!2 ~ [b3,eb4,gb4]@4 [b3,eb4,gb4]@4 ~@2", // B
  T: "[b3,eb4,ab4]@2 ~ [b3,eb4,ab4]!2 ~ [b3,eb4,ab4]@3 ~ [b3,eb4,ab4]@3 ~ [b3,eb4,ab4] ~", // Abm
  U: "[ab3,db4,f4]@2 ~ [ab3,db4,f4]!2 ~ [ab3,db4,f4]@3 ~ [ab3,db4,f4]@3 ~ [ab3,db4,f4] ~", // Db
  V: "[bb3,db4,gb4]@2 ~ [bb3,db4,gb4]!2 ~ [bb3,db4,gb4]@2 gb4 [gb4,ab4] ~ [db4,eb4] [ab3,db4] [bb3,db4]@3, ~@10 [bb3,db4,gb4]@2 ~ gb4 ~@2", // Gb Gbsus2 Dbsus2 Db5 Bbm Gb
  W: "[b3,eb4,gb4]@3 [b3,eb4,gb4]!2 ~ [b3,eb4,gb4]@3 ~@2 b4 gb4 [b3,eb4,gb4] ~@2, ~@5 [b3,eb4,gb4,db5] ~@2", // B
  X: "[db4,e4,ab4]@6 [a3,db4,e4] ~ [a3,c4,db4,gb4,a4]@7 ~, a3@5 ~@11", Y: "[ab3,db4,f4,bb4]",
  Z: "~@2 [ab3,db4,f4,bb4] ~@2 [ab3,db4,f4,bb4] ~@2 [ab3,db4,f4,bb4]@8", // Bbm7
  AA: "[bb3,d4,g4]@2 ~ [bb3,d4,g4]!2 ~ d4@2 ~@2 f4 ~ d4 d4@2 ~, ~@6 [bb3,g4]@9 ~, ~@2 d4 ~", // Gm Eb
  AB: "[bb3,d4,g4]@2 ~@6 [bb3,d4,g4]@2 ~ [c4,eb4,ab4]@3 [d4,f4,bb4]@2", // Gm Ab Bb
  AC: "[bb3,db4,gb4]@2 ~ [bb3,db4,gb4]!2 ~ [bb3,db4,gb4]@3 ~ [bb3,db4,gb4]@2 ~ [bb3,db4,gb4] ~@2", // Gb
  AD: "[b3,eb4,gb4]@3 [b3,eb4,gb4]!2 ~ [b3,eb4,gb4]@3 ~ [b3,eb4,gb4]@2 ~ [b3,eb4,gb4] ~@2", // B
  AE: "[a3,db4,e4]@5 ~ [a3,db4,e4] ~ [a3,db4,gb4]@6 ~@2", AF: "[ab3,db4,f4]@9 ~ [ab3,db4,f4]!3 ~@3",
  AG: "~@2 [ab3,db4,f4] ~@2 [ab3,db4,f4] ~@2 [ab3,db4,f4]@8", AH: "g4@2 c5 ~@8 f3 g3 bb3 c4 ~, ~@3 g4@5",
  AI: "d4 ~ [d4,g4] bb3 ~ [bb3,g4] g3!2 g4@3 ~ g4!3 ~", // G5 Eb
  AJ: "~ [f4,bb4]!2 [f4,bb4,c5] [d4,g4]!2 ~ [d4,g4]@3 ~ f3 g3 bb3 c4 ~, [g4,c5] ~@2 bb4@5", // Bb5 Fsus4 G5 C5
  AK: "d4@2 [eb4,bb4] d4 ~ bb3 g3!2 bb4@8", AL: "[ab3,db4,f4]@2 ~ [bb3,eb4,g4]@2 ~ [db4,f4,ab4]@10",
  AM: "~@2 [db4,f4,ab4] ~@2 [db4,f4,ab4] ~@2 [db4,f4,ab4] ~@7", // Db
  AN: "[bb3,d4,g4]@2 ~ [bb3,d4,g4]!2 ~@2 eb4 f4 ~ f4 ~ f4 d4@2 ~, ~@6 bb3@9 ~, ~@6 d4@7 ~@3, ~@6 g4@3 g4@2 g4@4 ~", // Gm
  AO: "[bb3,db4,f4]@2 ~ [bb3,db4,f4] [bb3,db4,f4]@2 [bb3,db4,f4]@10", // Bbm
  AP: "[bb3,d4,g4]@2 d4 [bb3,d4,g4]!2 bb3 [bb3,d4,g4]@2 g3 ab3 [bb3,d4,g4] ~ [g3,bb3,d4,g4] ~ eb3 ~, ~@13 [g3,bb3,d4,g4]@2 ~", // Gm
  AQ: "[c4,eb4,g4]@2 c4 [c4,eb4,g4] [bb3,c4,eb4,g4] ab3 [c4,eb4,g4]@2 f3 g3 [ab3,c4,eb4,g4] ~ [c4,eb4,g4]!2 eb4 ~", // Cm Cm7 Cm Abmaj7 Cm
  AR: "[bb3,d4,g4]@2 d4 [bb3,d4,g4]!2 bb3 [bb3,d4,g4]@2 g3!2 [eb3,bb3,d4,g4] ~ [g3,bb3,d4,g4] ~ bb3 ~, ~@13 [bb3,d4,g4]@2 ~", // Gm Ebmaj7 Gm
  AS: "[c4,eb4,g4]@2 c4 [c4,eb4,g4] [bb3,c4,eb4,g4] ab3 [c4,eb4,g4]@2 f3 g3 [bb3,c4,eb4,g4] ~ [c4,eb4,g4] ~ eb4 ~, ~@13 [c4,eb4,g4]@2 ~", // Cm Cm7 Cm Cm7 Cm
  AT: "[[g3,bb3,d4,g4]@29 ~@3]/2", // Gm
})).s("gm_acoustic_guitar_steel").gain(0.34)

// other · lead 1 square · "SQUAREWAVE"
const lead_1_square = note("<~@42 A B C D E F G H I J@2 K ~@3 L ~@2 M N ~@2 O P Q R S T U V ~@2 W X@2 ~>".pickRestart({
  A: "~@8 g4@3 ab4@3 bb4@2", B: "b4 [b4,db5] bb4@2 b4@8 eb4@4", C: "f4@6 ~ [bb4,b4,db5] eb5@3 db5@3 b4@2",
  D: "db5@3 db5@9 f4@2 ab4@2", E: "gb4@8 f5@3 eb5@3 db5@2", F: "eb5@3 gb4", G: "ab4@8 e5@3 d5@2 ~ db5@2",
  H: "eb5@9 ~ eb5!3 ~@3", I: "~@2 eb5 ~@2 eb5 ~@2 eb5@3 db5 c5 bb4 ab4 bb4",
  J: "[g4@3 g4@16 ~@4 bb4 c5@2 eb5 c5@4 [ab4,bb4], gb4 ~@31]/2", K: "g4 ab4 g4@2 f4 db4 bb3 c4@9",
  L: "~@2 bb4 ~ ab4 bb4 ~ g4@2 ~ eb4 c4 eb4 c4@2 ~", M: "~@13 g4@2 ab4", N: "g4@3 eb4 eb4@4",
  O: "~@3 db4 [c4,db4] [bb3,c4] a3 bb3 g4 ab4 f4@6", P: "~@9 eb3 f3 g3 ab3 bb3 c4 ab3", Q: "db4@3 b3 bb3 b3@6 ~@5",
  R: "~@2 bb4!2 bb4@4", S: "bb4 c5@2 ~ db5 c5@2 ~ eb5@3 db5 c5 ~ bb4 ~", T: "c5@3 bb4 [g4,ab4] f4 e4 eb4 ~@8",
  U: "~@2 bb4 ~ bb4 b4 bb4 ab4 bb4@6 f4@2", V: "g4 ab4 ~ a4 bb4@12", W: "~@8 f3 g3 ab3 bb3 c4 db4 eb4 f4",
  X: "[g4@29 ~@3]/2",
})).s("gm_lead_1_square").gain(0.34).pan(0.7)

// chords · trumpet
const trumpet = note(`<
  ~ A@2 B@6 C@2 D@2 E F G H I J K L M N O P@2 Q R@3 S T U V@2 W X Y Z AA AB AC AD AE AF AG AH AI AJ ~@2 AK@4 AL@2 AM L
  AN AO AP AQ AR AS AT AU AV AW AX AY AZ@6 ~
>`.pickRestart({
  A: "[~@3 c4@13, g4, bb3@3 ~@13, ~@3 eb4@29]/2", B: "[bb3@3 c4@13, [eb4,g4]]/2",
  C: "[[ab3,db4,f4]@3 [bb3,eb4,g4]@3 c4@10 db5@16, ~@3 [f4,ab4]@13]/2", D: "[[g3,c4] [gb3,b3], eb4]/2",
  E: "[bb3,db4,f4]", F: "[d4,f4,bb4] [bb3,db4,ab4]", G: "[c4,eb4,g4]@5 [ab4,c5,eb5]@3",
  H: "[ab3,c4,f4]@2 [e4,g4] [f4,ab4], ~ [b3,d4]", I: "[d4,g4,bb4]", J: "db4@10 db5@3 db4@3, [f4,ab4]",
  K: "[c4,eb4]@3 [c5,eb5]@5, g4", L: "[gb3,b3,eb4]", M: "[bb3,db4,f4]@3 [bb4,db5,f5]@5",
  N: "[d4,g4]@2 ab4 g4, bb3, ~ db4", O: "[c4,eb4,bb4]@10 ab4 g4 ab4 eb5@3",
  P: "[[ab3,c4,f4]@8 [e4,g4]@4 [f4,ab4]@4 [g4,bb4]@6 [bb4,d5,g5]@9 ~, ~@4 d4@7 ~@5, ~ b3 ~@2]/2", // Fm Em Fm Gm
  Q: "[d4,g4,bb4]@6 ~@2 [bb3,d4,g4]@3 [c4,eb4,ab4]@3 [d4,f4,bb4]@2", // Gm Ab Bb
  R: "[[gb4,b4]@16 b3@16 [db4,f4]@10 [eb4,c5]@3 [db4,bb4]@3, eb4@2 ~, ~@8 ab4@13 ~@3]/3", // B5 Db Cm Gb
  S: "[bb3,db4,gb4]@3 [gb4,bb4,db5]", T: "[gb4,b4,eb5]@3 [b3,eb4,gb4]", U: "[db4,e4,ab4] [db4,gb4,a4]",
  V: "[[db4,f4,bb4]@10 f5@3 f4@13 f5@3 [f4,db5]@3, ~@5 ab4@11, ~@10 db5@19 ~@3]/2", W: "[c4,eb4,g4]", X: "[b3,eb4,gb4]",
  Y: "[bb3,db4,f4]@5 f4 gb4 bb4", Z: "[bb3,d4,f4]@2 [db4,e4] db4, ~ ab3", AA: "c4@2 g4 f4",
  AB: "[eb4,ab4,c5]@2 [ab4,b4,eb5] [b4,d5,f5]", AC: "[bb4,d5,g5]@3 ~@5",
  AD: "[bb3,d4,g4]@2 ~@6 [bb3,d4,g4]@3 [c4,eb4,ab4]@3 [d4,f4,bb4]@2", AE: "[eb4,gb4,b4]", AF: "[b3,eb4,ab4]",
  AG: "[db4,f4,ab4]@10 [eb4,c5]@3 [db4,bb4]@3", AH: "gb4@2 ab4 [db4,gb4,bb4], [bb3,db4]@3 ~",
  AI: "[eb4,gb4,b4]@8 gb4@6 db5 b4, ~ [b4,eb5]", AJ: "[db4,e4,ab4] [d4,gb4,a4]",
  AK: "[[bb3,eb4,g4]@3 [bb3,eb4,g4]@3 [c4,eb4,g4]@24 ~@2]/2", // Eb Cm
  AL: "[[ab3,db4,f4]@3 [bb3,eb4,g4]@3 [db4,f4,ab4]@12 [f4,ab4,db5]@3 [db4,f4,ab4]@5 [f5,ab5,db6]@3 [db5,f5,ab5]@3]/2", // Db Eb Db
  AM: "[g3,c4,eb4]", AN: "[bb3,db4,f4]@4 f4 gb4 ab4 bb4", AO: "bb4@3 c5 [e4,g4,c5]@4, [d4,f4] ~", AP: "[c4,eb4,bb4]",
  AQ: "[ab3,c4,eb4]@2 [ab3,b3,e4] [b3,d4,f4]", AR: "[bb3,d4,g4]@3 [d5,g5,bb5]@5", AS: "[ab3,db4,f4]@4 bb4 c5 db5 eb5",
  AT: "[eb4,g4,c5]", AU: "[b3,eb4,gb4] [eb4,gb4,bb4]", AV: "[db4,f4,ab4]!2", AW: "[d4,f4,c5] [e4,ab4,c5]",
  AX: "[c4,eb4,g4,bb4]@13 bb4@3", AY: "f4@3 [bb4,d5]@3 [d5,f5]@2",
  AZ: "[[g4,bb4,d5]@10 bb4!2 d5 g5@12 ~ bb4!2 c5 g5@12 ~ d4 g4 bb4 d5 g5@14 c5 g5@9 d5 eb5 f5@2 ~ d5@2 eb5@2 bb5@12 ~@5]/6", // Gm
})).s("gm_trumpet").gain(0.23).pan(0.7)

// other · piano · "A.PIANO 2"
const piano = note(`<
  ~@5
  [~@14 eb5 g4]
  [ab4 eb5 g4 ab4 eb5 g4 ab4 eb5 g4 ab4 eb5 g4 ab4 eb5 g4 ab4]
  [eb5@15 ~]
  ~@45
  [~@13 g5 c5@2, ~@14 eb5 ~]
  [~ c5@7, g5, ~ eb5@15]
  ~@23
>`).s("gm_piano").gain(0.34)

// chords · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2 = note("<~@5 A ~@35 B ~@11 C@2 ~@23>".pickRestart({
  A: "[g5,c6,eb6]", B: "[bb5,d6,g6]", C: "[~@3 [c5,eb5]@10 ~@3, ~@3 g4 ~@12]/2",
})).s("gm_string_ensemble_2").gain(0.02)

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

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

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

// drums · open hat
const open_hat = s("oh").struct("<~@4 A ~@5 A@16 ~@8 A@8 ~@8 A@4 ~ A@9 ~ A@10 ~@3>".pickRestart({
// … 53 more lines

More by Leo Sayer