Strudelify

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 32-step grid, each part at one level. Source detail keeps the original performance.
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: edit a riff to change every repeat.

// bass · soprano sax · "SOPRAN SAX"
const bass = note(`<
  ~ A@2 B@2 C@2 D@2 E F G H I J K L M N O P Q R S T U V W X Y Z@4 AA@2 AB@2 AC@5 AD@6 AE AF@3 AG@7 AH@7 AI@7 AJ@3 ~
>`.pickRestart({
  A: "[c1@4 ~@2 eb1@2 ~@4 f1@38 ~@2 f1 ~@5 f1 ~@3 bb0@2]/2",
  B: "[c1@2 ~@4 eb1 ~@5 f1@37 ~@3 g1@2 ab1@2 g1@2 f1@3 ~ bb0@2]/2",
  C: "[c1@4 ~@2 eb1@2 ~@4 f1@39 ~ f1 ~@5 f1 ~@3 bb0@2]/2", D: "[c1@2 ~@4 eb1 ~@5 f1@52]/2",
  E: "bb1@5 ~ c2@3 ~@3 db2@20", F: "eb2", G: "ab1@5 ~ ab1@4 ~@4 ab2@14 ab1@3 ~", H: "db2@6 ab1@4 ~@2 db2@19 ~",
  I: "gb1@5 ~ gb1@4 ~@2 gb2@19 ~", J: "c2@5 ~ c2@4 ~@2 c1@15 ~ c2@3 ~", K: "f2@5 ~ f2@3 ~@3 f2@17 ~ eb2@2",
  L: "bb1@5 ~ bb1@5 ~ bb2@15 ~ bb1@2 c2@2", M: "eb2@5 ~ eb2@5 ~ eb2@17 ~@3",
  N: "eb2@5 ~ eb2@5 ~ eb2@9 ~ bb1@2 eb2@4 db2@2 eb2@2", O: "ab1@3 ab1!3 ab2@5 ab1 c1@3 ~", P: "db1@3 db1!3 db2@8 ~ db1",
  Q: "gb1@2 ~ gb1!3 gb2@8 bb1 b1", R: "c2@5 ~ gb1@5 ~ c1@3 ~ c1@14 e1@2", S: "f1@6 f1@3 ~ f1@2 f2@14 ~@2 eb2@2 g1@2",
  T: "bb1@3 bb1!3 bb2@5 ab2 bb1@3 ~", U: "eb1@2 ~ eb1!3 eb2@9 eb2", V: "eb2@2 ~@6 eb2@2 ~ f2@2 ~ g2@2",
  W: "ab2@3 ~ ab1@2 ab1@2 ab2@2 eb2@2 bb2@2 ~@2 ab2@10 ~@2 eb2@2 ab1@2", X: "db1@2 ~ db1!5 db2@4 ~ db2 b1 ab1",
  Y: "bb1@2 ~ bb1!3 bb2@4 ~ bb1 bb2 ~ ab2 bb2",
  Z: "[eb2@4 ~@2 eb1@2 eb2@2 eb2@2 eb2@14 ~ eb2@2 ~@2 ab1@5 ~ ab1@2 ~ ab1 ab1@2 gb2@2 ab2@2 ~ ab2@6 ~ ab1@8 a1@10 ~@2 c2@2 db2@2 ~ d2@6 ~ d1@6 ~@2 eb1@6 ~@2 eb2@25, ~@15 bb1 ~@48]/4",
  AA: "[~@3 eb2@2 ~@4 eb2@2 ~@2 eb1@2 eb2@6 eb1@2 ~ eb2@2 ~@3 eb2@2 ab1@6 ab1@2 ~ ab1 ab1@2 ab2@14 ab1@2 b0@2 c1@2 ~, ~@14 db2 ~@17]/2",
  AB: "[db1@4 ~ db1@4 db1@2 db2@8 ~@2 db1@2 ~ f1@6 ~ gb1@4 ~@2 gb1@2 ~ gb1 gb1@2 gb2@14 ~@2 bb1@2 b1@2 ~]/2",
  AC: "[c2@5 g1@4 ~@2 c1@2 ~@2 c1@6 ~@2 e1@6 ~@2 f1@4 ~@2 c2@4 ~@2 f2@14 ~@2 c2@2 ab1@2 bb1@4 ~@2 f2@4 ~@2 bb2@8 ~@2 bb1@2 ~ d1@7 eb1@4 ~@2 eb1@4 eb1@2 eb2@2 ~@3 eb2@13 eb2@2 eb2@16 eb1@4 ~@2 f1@4 ~@2 g1@4 ab1]/5",
  AD: "[~@5 ab1@2 ab1@2 ab1@2 ab2@2 eb2@2 bb2@4 ~@2 ab2@6 ab1@2 ~@2 db1@10 ab1@2 db2@2 ab1@2 eb2@4 ~@2 db2@4 ~@2 c2@2 ~@2 bb1@10 bb1@2 bb2@2 bb1@2 bb2@10 ~@2 ab2@2 bb1@2 eb1@6 eb1@4 bb1@2 db2@2 bb1@2 eb2@10 ~@2 bb1@2 gb1@2 ab1@4 ~@2 ab1@2 ab1@2 ab1@2 gb2@2 ab2@2 bb2@6 ab2@5 ~ ab1@3 ~ a1@12 c2@2 db2@2 d2@2 a1@2 d1@10 ~@3]/6",
  AE: "eb2@14 ~ eb2@4 db2@2 d2@2 eb2@2 ~@7",
  AF: "[~@3 eb1@2 ~@4 eb1@2 ~@4 eb3@6 eb2@2 eb2@2 eb2@2 db2@2 eb2@2 c1@4 ~@2 eb1@4 ~@2 f1@38 ~@2 f1@2 ~@4 f1@4 bb0@2 ~]/3",
  AG: "[c1@4 ~ eb1@4 ~@2 f1@40 eb2@2 f2@2 ~@2 f2@2 ~@2 f2@2 bb1@6 c2@4 ~@2 eb2@10 ~@2 eb1@12 eb2@2 ~@4 eb2@2 ~@4 eb2@2 ~@4 eb1@2 eb2@4 db2@2 eb2@2 ab1@4 ~@2 ab1@2 ab1@2 ab1@2 ab2@2 ~@2 ab2@12 db2@2 ~@2 db1@4 ~@2 db2@2 ~@2 db2@2 db2@2 ~@2 eb2@8 db2@6 f1@2 gb1@4 ~@2 gb2@2 ~@2 db2@2 gb2@2 ~@2 gb2@10 ~@2 bb1@2 b1@2 c2]/7",
  AH: "[~@5 c2@2 ~@2 g1@2 c1@2 ~@2 c1@4 d2@2 eb2@2 e2@8 f1@6 f2@2 ~@2 f1@2 f2@4 g2@8 f2@6 ~@2 bb1@6 bb1@2 ~@2 bb1@2 bb2@2 bb1@2 bb2@10 bb1@2 d1@2 ~@2 eb1@4 ~@2 eb1@2 ~@2 eb1@2 eb2@2 eb1@2 eb2@14 eb1@2 eb1@4 ~@2 eb1@2 ~@2 eb1@2 eb2@2 eb1@2 eb2@2 eb2@4 eb1@2 db2@2 eb2@2 g1@2 ~@2 ab1@6 ab1@2 ~@2 ab1@3 ~ ab2@2 ab2@10 ~@2 b0@2 c1@2 db1@4 ~@2 db1@2 ~@2 db1@2 db2@2 db2@2 eb2@8 db2@6 f1@2 gb1]/7",
  AI: "[~@5 gb1@2 ~@2 gb1@2 gb2@2 gb1@2 gb2@12 bb1@2 b1@2 c2@6 c2@2 ~@2 c1@2 c2@4 c1@2 c2@2 d2@2 eb2@2 e2@2 g1@2 ~@2 g1@2 f1@4 ~@2 f2@2 ~@2 f1@2 f2@2 f1@2 g2@8 f2@8 bb1@6 bb1@2 ~@2 bb1@2 bb2@2 bb1@2 bb2@6 f2@2 d2@8 eb2@4 ~@2 eb2@2 ~@2 bb2@2 eb2@2 d2@2 eb2@10 bb1@2 g1@2 ~@2 ab1@4 ~@2 ab1@2 ~@2 ab1@2 ab2@2 ab1@2 bb2@8 ab2@6 ~@2 eb2@4 ~@2 eb2@2 ~@2 bb2@2 eb2@2 d2@2 eb2@10 ~@2 g1@2 ~@2 ab1]/7",
  AJ: "[~@5 ab1@2 ~@2 ab1@2 ab2@2 ab1@2 bb2@6 ~@2 ab2@2 ~@2 ab1@2 ab1@2 eb1@58 ~@7]/3",
})).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@2 S T U V@8 W@4 X@7 Y Z AA@2 AB AC@2 AD@4 AE@3 AF@7 AG@8
>`.pickRestart({
  A: "[[bb3,eb4,g4]@5 ~ [bb3,eb4,g4]@5 ~ [c4,eb4,g4]@24 ~@28]/2", // Eb Cm
  B: "[ab3,db4,f4]@5 ~ [bb3,eb4,g4]@5 ~ [c4,f4,ab4]@18 ~@2", 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@15 ~ g4@7 ~ ab4@7 ~", J: "d4@3 ~",
  K: "[db4,f4,ab4]@18 ~@2 [f4,ab4,db5]@5 ~ [db4,f4,ab4]@5 ~", L: "g4@10 ~@2 eb5@19 ~", M: "eb4@3 ~", N: "f4@5 ~ f5@9 ~",
  O: "[bb3,d4,g4]@15 ~ ab4@7 ~ g4@7 ~, ~ [bb3,db4]", P: "[c4,eb4,bb4]@9 ~ ab4 g4 ab4 eb5@3",
  Q: "[ab3,c4,f4]@15 ~ [b3,d4,e4,g4]@7 ~ ab4@7 ~", // Fm Em7
  R: "[bb4@10 ~@2 [bb4,d5,g5]@17 ~ c5 ~ d4@12 ~@4 [bb3,d4,g4]@5 ~ [c4,eb4,ab4]@5 ~ [d4,f4,bb4]@4, ~@31 [g4,bb4]@13 ~@20]/2", // Gm Ab Bb Gm
  S: "b4@3 ~", T: "ab4@3 ~", U: "ab4@19 ~ c5@5 ~ bb4@6",
  V: "[gb4@23 db5@8 eb5@24 gb4@8 ab4@16 a4@16 bb4@18 ~@3 [ab4,db5,f5]@6 [f4,ab4,db5]@24 ~ [ab4,db5,f5]@6 ~ f4@5 [c4,eb4,g4]@24 ~@8 gb4@24 ~@8 f4@20 f4@4 gb4@4 bb4@4 f4, ~@153 [ab4,db5]@5 ~@98]/8", // Db Cm Db5
  W: "[~@16 ab4@7 db4@8 c4@16 g4@8 f4@7 ~ c5@16 eb5@8 f5@7 ~ g5@12 [bb5,d6,g6]@18 ~@2 [bb3,d4,g4]]/4", // Gm
  X: "[~@15 [bb3,d4,g4]@4 ~@2 [c4,eb4,ab4]@4 ~@2 [d4,f4,bb4]@4 [eb4,gb4,b4]@24 ~@8 ab4@24 ~@8 ab4@19 ~ c5@6 bb4@6 gb4@16 ab4@8 bb4@7 ~ b4@16 ~@12 db5@2 b4 ~ ab4@15 ~ a4@15 ~@2, ~@175 eb5@15 ~@34]/7", // Gm Ab Bb B
  Y: "bb4@19 [eb3,f4,ab4,bb4]@2 [eb3,f4,ab4,bb4]@2 [eb3,f4,ab4,bb4]@2 ~@7", // Ebsus4
  Z: "~@3 [eb3,f4,ab4,bb4]@2 ~@4 [eb3,f4,ab4,bb4]@2 ~@4 [eb3,f4,ab4,bb4]@16 ~", // Ebsus4
  AA: "[[bb3,eb4,g4]@5 [bb3,eb4,g4]@6 [c4,eb4,g4]@24 ~@29]/2", AB: "g4@5 g4@6 g4@21",
  AC: "[~@31 [ab3,db4,f4]@6 [bb3,eb4,g4]@6 [db4,f4,ab4]@21]/2", // Db Eb Db
  AD: "[~@3 [f4,ab4,db5]@6 [db4,f4,ab4]@10 [f5,ab5,db6]@6 [db5,f5,ab5]@6 [g3,c4,eb4]@24 ~@8 eb4@24 ~@8 f4@15 ~ f4@4 gb4@4 ab4@4 bb4@4 bb4]/4", // Db Cm
  AE: "[~@11 c5@4 c5@16 bb4@24 ~@8 eb4@16 e4@8 f4@7 ~ g4]/3",
  AF: "[~@11 [d5,g5,bb5]@20 [ab3,db4,f4]@16 bb4@4 c5@4 db5@4 eb5@4 [eb4,g4,c5]@24 ~@8 gb4@15 ~ bb4@15 ~ ab4@15 ~ ab4@16 c5@16 c5@15 ~ bb4@24 ~@2 bb4@6 f4]/7", // Gm Db Cm
  AG: "[~@11 d5@11 ~ f5@8 d5@19 ~ bb4@2 bb4@2 d5@2 g5@24 ~@2 bb4@2 bb4@2 c5@2 g5@24 ~@2 d4@2 g4@2 bb4@2 d5@2 g5@24 ~@4 c5@2 g5@17 ~@2 d5@2 eb5@2 f5@4 ~ d5@5 eb5@4 bb5@38 ~@28]/8",
})).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 R S T U V W@4 X@2 Y@8 Z@6 AA@6 AB@7 AC@8 AD@6 ~
>`.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@4 [eb4,bb4]@2 d4@2 ~@2 [bb3,bb4]@2 g3@2 g3@2 bb4@2 ~@2 bb4@2 ~@2 bb4@7 ~", H: "f4@3 g4 ~@2 ab4@9 ~",
  I: "~@24 [f4,bb4]@3 ~@5, ab4@15 ~", // Bb5
  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]@8 [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]@4 ~@2 [bb3,d4,g4]@2 [bb3,d4,g4]@2 ~@2 d4@4 ~@4 f4 ~@5 d4@4 ~@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 ~@31", // Db
  R: "[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
  S: "[bb3,d4,g4]@12 ~@4 [bb3,d4,g4]@5 ~ [c4,eb4,ab4]@4 ~@2 [d4,f4,bb4]@4", // Gm Ab Bb
  T: "[b3,eb4,gb4]@2 ~ [b3,eb4,gb4]!2 ~ [b3,eb4,gb4]@4 [b3,eb4,gb4]@4 ~@2", // B
  U: "[b3,eb4,ab4]@2 ~ [b3,eb4,ab4]!2 ~ [b3,eb4,ab4]@3 ~ [b3,eb4,ab4]@3 ~ [b3,eb4,ab4] ~", // Abm
  V: "[ab3,db4,f4]@2 ~ [ab3,db4,f4]!2 ~ [ab3,db4,f4]@3 ~ [ab3,db4,f4]@3 ~ [ab3,db4,f4] ~", // Db
  W: "[[bb3,db4,gb4]@4 ~@2 [bb3,db4,gb4]@2 [bb3,db4,gb4]@2 ~@2 gb4@3 gb4@2 ab4 gb4 ~@2 eb4 db4 [ab3,db4]@2 [bb3,db4]@6 [b3,eb4,gb4]@6 [b3,eb4,gb4]@2 ~ [b3,eb4,gb4]@2 ~ [b3,eb4,gb4]@6 ~@2 db5@2 b4@2 gb4@2 [b3,eb4]@2 ~@4 [a3,db4,e4]@12 [a3,db4,e4]@3 ~@2 gb4@14 ~ [db4,f4,bb4]@33, ~@12 [bb3,db4]@6 ~ [bb3,db4,gb4]@4 ~@2 gb4@2 ~@24 [b3,eb4,gb4]@4 ~@2 gb4@4 ~@2 ab4@15 ~ [c4,a4]@15 ~@34, ~@79 [a3,db4]@12 ~@4 ab3@30 ~@3]/4", // Gb Db5 Bbm B A Bbm Gb B …
  X: "[~@3 [ab3,db4,f4,bb4]@2 ~@4 [ab3,db4,f4,bb4]@2 ~@4 [ab3,db4,f4,bb4]@16 [c4,eb4,g4]@4 ~@2 [c4,eb4,g4]@2 ~ [c4,eb4,g4]@2 ~@5 bb3@2 ~@4 bb3@2 ~@2 eb4@4 ~@2 [b3,eb4], ~@43 g4@18 ~@3, ~@43 [c4,eb4]@6 c4@6 c4@6 ~@3, ~@51 eb4@6 ~@7]/2", // Bbm7 Cm B Cm
  Y: "[gb4@4 ~ [b3,eb4,gb4]@2 ~ [b3,eb4,gb4]@2 ~ [b3,eb4,gb4]@18 ~@2 [bb3,db4,f4]@4 ~@2 [bb3,db4,f4]@2 ~ [bb3,db4,f4]@2 ~@5 ab3@2 ~@4 ab3@2 ~@2 db4@4 ~@3 f4@14 ~ [db4,e4,ab4]@14 ~@2 [c4,eb4,g4]@4 ~@2 [c4,eb4,g4]@2 ~ [c4,eb4,g4]@2 ~ [c4,eb4,g4]@4 bb3@2 c4@2 ~@2 bb3@2 ~@2 eb4@4 ~@2 [c4,eb4,f4]@14 ~@2 [bb3,d4,e4]@6 ~@3 bb3@6 ~ [bb3,d4,g4]@4 ~@3 bb3@2 [bb3,d4,g4]@2 ~ d4@4 ~@4 f4@2 ~@2 d4@2 d4@4 ~@2 [bb3,d4,g4]@4 ~@12 [bb3,d4,g4]@4 ~@2 [c4,eb4,ab4]@6 [d4,f4,bb4]@3 ~ [b3,eb4,gb4]@4 ~@2 [b3,eb4,gb4]@2 ~ [b3,eb4,gb4]@2 ~ [b3,eb4,gb4]@8 [b3,eb4,gb4]@8 ~@4 [b3,eb4,ab4], ~@43 f4@18 ~@54 g4@10 ~@131, ~@43 [bb3,db4]@6 bb3@6 bb3@6 ~@2 [bb3,d4]@16 ~@40 c4@6 ~@26 [d4,f4]@6 ~@8 [d4,g4]@2 ~@8 d4@8 ~@73, ~@51 db4@6 ~@58 [c4,eb4]@6 ~@50 [bb3,g4]@18 ~@67]/8", // B Bbm Dbm Cm F7 Em7b5 Gm Ab …
  Z: "[~@5 [b3,eb4,ab4]@2 [b3,eb4,ab4]@2 ~@2 [b3,eb4,ab4]@6 ~@2 [b3,eb4,ab4]@6 ~@2 [b3,eb4,ab4]@2 ~@2 [ab3,db4,f4]@4 ~@2 [ab3,db4,f4]@2 ~ [ab3,db4,f4]@2 ~ [ab3,db4,f4]@6 ~@2 [ab3,db4,f4]@6 ~@2 [ab3,db4,f4]@2 ~@2 [bb3,db4,gb4]@4 ~@2 [bb3,db4,gb4]@2 ~ [bb3,db4,gb4]@2 ~ [bb3,db4,gb4]@6 ~@2 [bb3,db4,gb4]@4 ~@2 [bb3,db4,gb4]@2 ~@4 [b3,eb4,gb4]@6 [b3,eb4,gb4]@2 [b3,eb4,gb4]@2 ~@2 [b3,eb4,gb4]@6 ~@2 [b3,eb4,gb4]@4 ~@2 [b3,eb4,gb4]@2 ~@4 [a3,db4,e4]@10 ~@2 [a3,db4,e4]@2 ~@2 [a3,db4,gb4]@12 ~@5 ab3@19 [ab3,db4,f4]@2 [ab3,db4,f4]@2 [ab3,db4,f4]@2 ~@7, ~@159 [db4,f4]@19 ~@14]/6", // Abm Db Gb B A Gbm Db
  AA: "[~@3 [ab3,db4,f4]@2 ~@4 [ab3,db4,f4]@2 ~@4 [ab3,db4,f4]@16 g4@4 c5@2 ~@16 f3@2 g3@2 bb3@2 c4@2 ~@2 d4@2 ~@2 [d4,g4]@2 bb3@2 ~@2 [bb3,g4]@2 g3@2 g3@2 g4@6 ~@2 g4@2 g4@2 g4@2 ~@2 c5@2 [f4,bb4]@2 [f4,bb4]@2 [f4,bb4,c5]@2 [d4,g4]@2 [d4,g4]@2 ~@2 [d4,g4]@6 ~@2 f3@2 g3@2 bb3@2 c4@2 ~@2 d4@4 [eb4,bb4]@2 d4@2 ~@2 bb3@2 g3@2 g3@2 bb4@16 [ab3,db4,f4]@4 ~@2 [bb3,eb4,g4]@4 ~@2 [db4,f4,ab4]@21, ~@43 g4@22 ~@30 g4@4 ~@8 bb4@22 ~@63]/6", // Db G5 Eb Bb5 Fsus4 G5 Eb5 Db …
  AB: "[~@3 [db4,f4,ab4]@2 ~@4 [db4,f4,ab4]@2 ~@4 [db4,f4,ab4]@2 ~@14 [c4,eb4,g4]@4 ~@2 [c4,eb4,g4]@2 [c4,eb4,g4]@2 ~@6 bb3@2 ~@4 bb3@2 ~@2 eb4@4 ~@2 [b3,eb4,gb4]@4 ~@2 [b3,eb4,gb4]@2 [b3,eb4,gb4]@2 ~@2 [b3,eb4,gb4]@18 ~@2 [bb3,db4,f4]@4 ~@2 [bb3,db4,f4]@2 [bb3,db4,f4]@2 ~@6 ab3@2 ~@4 ab3@2 ~@2 db4@4 ~@2 [bb3,d4,f4]@16 [db4,e4,ab4]@14 ~@2 [c4,eb4,g4]@4 ~@2 [c4,eb4,g4]@2 [c4,eb4,g4]@2 ~@2 [c4,eb4,g4]@4 bb3@2 c4@2 ~@2 bb3@2 ~@2 eb4@4 ~@2 [c4,eb4,f4]@14 ~@2 [bb3,d4,e4]@6 ~@2 [bb3,d4,f4]@6 ~@2 [bb3,d4,g4], ~@43 g4@18 ~@46 f4@18 ~@54 g4@10 ~@35, ~@43 [c4,eb4]@6 c4@6 c4@6 ~@46 [bb3,db4]@8 db4@6 ~@58 [c4,eb4]@6 ~@39, ~@51 eb4@6 ~@56 bb3@6 bb3@6 ~@58 c4@6 ~@35]/7", // Db Cm B Bbm Bb Dbm Cm F7 …
  AC: "[~@5 [bb3,d4,g4]@2 [bb3,d4,g4]@2 ~@4 eb4@2 f4 ~@3 f4 ~@3 f4@2 d4@4 ~@2 [bb3,db4,f4]@5 ~ [bb3,db4,f4]@2 [bb3,db4,f4]@4 [bb3,db4,f4]@19 ~ [c4,eb4,g4]@4 ~@2 [c4,eb4,g4]@2 [c4,eb4,g4]@2 ~@6 bb3@2 ~@4 bb3@2 ~@2 eb4@4 ~@2 [b3,eb4,gb4]@4 ~@2 [b3,eb4,gb4]@2 [b3,eb4,gb4]@2 ~@2 [b3,eb4,gb4]@18 ~@2 [bb3,db4,f4]@4 ~@2 [bb3,db4,f4]@2 [bb3,db4,f4]@2 ~@6 ab3@2 ~@4 ab3@2 ~@2 db4@4 ~@2 [bb3,d4,f4]@16 [db4,e4,ab4]@14 ~@2 [c4,eb4,g4]@4 ~@2 [c4,eb4,g4]@2 [c4,eb4,g4]@2 ~@2 [c4,eb4,g4]@4 bb3@2 c4@2 ~@2 bb3@2 ~@2 eb4@4 ~@2 [c4,eb4,f4]@14 ~@2 [bb3,d4,e4]@6 ~@2 [bb3,d4,f4]@6 ~@2 [bb3,d4,g4], ~@11 bb3@18 ~@46 [c4,eb4]@8 eb4@6 ~@50 f4@18 ~@54 g4@10 ~@35, ~@11 d4@14 ~@56 c4@6 c4@6 ~@46 [bb3,db4]@8 db4@6 ~@58 [c4,eb4]@6 ~@39, ~@11 g4@6 g4@4 g4@8 ~@46 g4@18 ~@52 bb3@6 bb3@6 ~@58 c4@6 ~@35]/8", // Gm Bbm Cm B Bbm Bb Dbm Cm …
  AD: "[~@3 d4 ~ [bb3,d4,g4]@2 ~ bb3 bb3@2 [bb3,d4,g4]@4 g3 ~ ab3 ~ [bb3,d4,g4]@2 ~@2 [g3,bb3,d4,g4]@2 g3 ~ eb3 ~@3 [c4,eb4,g4]@4 c4 ~ [c4,eb4,g4]@2 [bb3,c4,eb4,g4]@2 ab3 ~ [c4,eb4,g4]@4 f3 ~ g3 ~ [ab3,c4,eb4,g4]@2 ~@2 [c4,eb4,g4]@2 [c4,eb4,g4]@2 eb4 ~@3 [bb3,d4,g4]@4 d4 ~ [bb3,d4,g4]@2 [bb3,d4,g4]@2 bb3 ~ [bb3,d4,g4]@4 g3 ~ g3 ~ [eb3,bb3,d4,g4]@2 ~@2 [g3,bb3,d4,g4]@2 ~@2 bb3@2 ~@2 [c4,eb4,g4]@4 c4 ~ [c4,eb4,g4]@2 [bb3,c4,eb4,g4]@2 ab3 ~ [c4,eb4,g4]@4 f3 ~ g3 ~ [bb3,c4,eb4,g4]@2 ~@2 [c4,eb4,g4]@2 ~ eb4 eb4@2 ~@2 [g3,bb3,d4,g4]@57 ~@8, ~@7 [bb3,d4,g4]@2 ~@16 [bb3,d4]@4 ~@60 d4@4 ~@29 c4@4 ~@66, ~@26 g4@4 ~@59 bb3@2 ~@101, ~@90 g4@4 ~@27 g4@4 ~@67]/6", // Gm Cm Cm7 Cm Abmaj7 Cm Gm Ebmaj7 …
})).s("gm_acoustic_guitar_steel").gain(0.34)

// other · lead 1 square · "SQUAREWAVE"
const lead_1_square = note("<~@42 A B C@5 D E F@2 G ~@3 H ~@2 I@2 ~@2 J K@2 L@3 M@2 ~@2 N@3 ~>".pickRestart({
  A: "~@15 g4@6 ab4@6 bb4@4 b4", B: "~ db5 b4 bb4@4 b4@15 ~ eb4@8 ~",
  C: "[f4@13 [bb4,b4] db5 eb5@5 ~ db5@6 b4@4 db5@5 ~ db5@18 f4@4 ab4@4 gb4@15 ~ f5@5 ~ eb5@6 db5@4 eb5@24 gb4@8 ab4@15 ~ e5@5 ~ d5@5 ~ db5@4 ~]/5", // Bmaj7
  D: "eb5@18 ~ eb5 ~ eb5 ~ eb5 ~@8", E: "~@3 eb5@2 ~@4 eb5@2 ~@4 eb5@6 db5@2 c5@2 bb4@2 ab4@2 bb4@2 ~",
  F: "[g4@5 g4@32 ~@9 bb4 c5@4 eb5@2 c5@8 bb4 ab4 ~, gb4 ~@63]/2", G: "~ ab4@2 g4@4 f4@2 db4@2 bb3@2 c4@19, g4 ~@15",
  H: "~@3 bb4@2 ~@2 ab4@2 bb4 ~@3 g4@4 ~@2 eb4@2 c4@2 eb4@2 c4@4 ~@3", I: "[~@25 g4@4 ab4@2 g4@11 ~ eb4@4 eb4@16 ~]/2",
  J: "~@5 db4@2 c4 db4 c4 bb3 a3@2 bb3@2 g4@2 ab4@2 f4@12 ~",
  K: "[~@17 eb3@2 f3@2 g3@2 ab3@2 bb3@2 c4@2 ab3@2 db4@6 b3@2 bb3@2 b3@12 ~@11]/2",
  L: "[~@7 bb4@3 ~ bb4@3 ~ bb4@16 bb4@2 c5@3 ~@3 db5@2 c5@3 ~@3 eb5@6 db5@2 c5@3 ~ bb4@2 ~@2 c5@6 ~ bb4 g4@2 f4@2 e4@2 eb4@3 ~@16, ~@71 ab4 ~@24]/3",
  M: "[~@3 bb4@2 ~@2 bb4@2 b4@2 bb4@2 ab4@2 bb4@12 f4@4 g4@2 ab4@2 ~@2 a4@2 bb4@24 ~]/2",
  N: "[~@15 f3@2 g3@2 ab3@2 bb3@2 c4@2 db4@2 eb4@2 f4@2 g4@57 ~@8]/3",
})).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@3 Q@3 R@6 S@2 T@4 U@7 ~@2 V@2 W@3 X@2 Y@5 Z@7 AA@7 ~
>`.pickRestart({
  A: "[~@3 c4@13, g4, bb3@11 ~@53, ~@3 eb4@29]/2", B: "[bb3@11 ~ c4@52, [eb4,g4]]/2",
  C: "[[ab3,db4,f4]@5 ~ [bb3,eb4,g4]@6 c4@20 db5@32, ~@3 [f4,ab4]@13]/2", D: "[[g3,c4]@32 [gb3,b3]@31 ~, eb4@63 ~]/2",
  E: "[bb3,db4,f4]@31 ~", F: "[d4,f4,bb4]@15 ~ [bb3,db4,ab4]@16", G: "[c4,eb4,g4]@20 [ab4,c5,eb5]@11 ~",
  H: "[ab3,c4,f4]@2 [e4,g4] [f4,ab4], ~ [b3,d4]", I: "[d4,g4,bb4]@31 ~", J: "db4@10 db5@3 db4@3, [f4,ab4]",
  K: "[c4,eb4]@11 ~ [c5,eb5]@20, g4@31 ~", 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]@16 [e4,g4]@8 [f4,ab4]@8 [g4,bb4]@12 [bb4,d5,g5]@18 ~@2 d4@11 ~@5 [bb3,d4,g4]@6 [c4,eb4,ab4]@6 [d4,f4,bb4]@4, ~@16 d4@28 ~@19 [g4,bb4]@13 ~@20, ~ b3 ~@4]/3", // Fm Em Fm Gm Ab Bb Gm
  Q: "[[gb4,b4]@32 b3@31 ~ [db4,f4]@19 ~ [eb4,c5]@5 ~ [db4,bb4]@6, eb4@21 ~@11, ~@32 ab4@51 ~@13]/3", // B5 Db Cm Gb
  R: "[[bb3,db4,gb4]@23 [gb4,bb4,db5]@8 [gb4,b4,eb5]@24 [b3,eb4,gb4]@8 [db4,e4,ab4]@16 ~ gb4@15 [db4,f4,bb4]@20 ~@7 f4@25 f5@6 ~ [f4,db5]@5 [c4,eb4,g4]@31 ~@2, ~@79 [db4,a4]@16 ~@20 f5@6 ~@71, ~@116 ab4@43 ~@33, ~@58 db5@19 ~@19]/6", // Gb B Dbm Bbm Db Cm Gbm
  S: "[[b3,eb4,gb4]@31 [bb3,db4,f4]@20 f4@4 ~ gb4@3 bb4@4 ~]/2", // B Bbm
  T: "[[bb3,d4,f4]@15 [db4,e4]@8 db4@8 c4@16 g4@8 ~ f4@7 [eb4,ab4,c5]@16 [ab4,b4,eb5]@8 ~ [b4,d5,f5]@7 [bb4,d5,g5]@12 ~@20 [bb3,d4,g4], ~@15 ab3@16 ~@97]/4", // Bb Dbm Ab Abm Bdim Gm
  U: "[~@15 [bb3,d4,g4]@5 ~ [c4,eb4,ab4]@5 ~ [d4,f4,bb4]@4 [eb4,gb4,b4]@32 ~ [eb4,ab4]@31 [db4,f4,ab4]@19 ~ [eb4,c5]@6 [db4,bb4]@6 gb4@16 ab4@8 [db4,gb4,bb4]@7 ~ [eb4,gb4,b4]@16 ~@12 db5@2 b4@2 [db4,e4,ab4]@16 [d4,gb4,a4]@15 ~@2, ~@63 b3@31 ~@33 [bb3,db4]@24 ~@24 [gb4,b4,eb5]@15 ~@34]/7", // Gm Ab Bb B Ab5 Db Cm Gb …
  V: "[[bb3,eb4,g4]@5 [bb3,eb4,g4]@6 [c4,eb4,g4]@49 ~@3 [bb3,eb4]]/2", // Eb Cm Eb5
  W: "[g4@5 [bb3,eb4,g4]@6 [c4,eb4,g4]@48 ~@4 [ab3,db4,f4]@6 [bb3,eb4,g4]@6 [db4,f4,ab4]@21]/3", // Eb Cm Db Eb Db
  X: "[~@3 [f4,ab4,db5]@6 [db4,f4,ab4]@10 [f5,ab5,db6]@6 [db5,f5,ab5]@6 [g3,c4,eb4]@31 ~ gb3]/2", // Db Cm
  Y: "[[b3,eb4]@31 [bb3,db4,f4]@15 ~ f4@4 gb4@4 ab4@4 bb4@4 bb4@11 ~ c5@4 [e4,g4,c5]@16 [c4,eb4,bb4]@32 [ab3,c4,eb4]@16 [ab3,b3,e4]@8 [b3,d4,f4]@7 ~ [bb3,d4,g4], ~@63 [d4,f4]@16 ~@81]/5", // B Bbm C Cm7 Ab E Bdim Gm …
  Z: "[~@11 [d5,g5,bb5]@20 [ab3,db4,f4]@15 ~ bb4@4 c5@4 db5@4 eb5@4 [eb4,g4,c5]@31 ~ [b3,eb4,gb4]@15 ~ [eb4,gb4,bb4]@16 [db4,f4,ab4]@16 [db4,f4,ab4]@16 [d4,f4,c5]@16 [e4,ab4,c5]@15 ~ [c4,eb4,g4,bb4]@25 ~ bb4@6 f4]/7", // Gm Db Cm B Ebm Db Dm7 Eaug …
  AA: "[~@11 [bb4,d5]@11 ~ [d5,f5]@7 ~ [g4,bb4,d5]@19 ~ bb4@2 bb4@2 d5@2 g5@25 ~ bb4@2 bb4@2 c5@2 g5@24 ~@2 d4@2 g4@2 bb4@2 d5@2 g5@28 c5@2 g5@17 ~@2 d5@2 eb5@2 f5@4 ~ d5@4 ~ eb5@4 bb5@24 ~@10]/7", // Bb Dm Gm
})).s("gm_trumpet").gain(0.23).pan(0.7)

// other · piano · "A.PIANO 2"
const piano = note("<~@5 A B C ~@45 D@2 ~@23>".pickRestart({
  A: "~@14 eb5 g4", B: "ab4 eb5 g4 ab4 eb5 g4 ab4 eb5 g4 ab4 eb5 g4 ab4 eb5 g4 ab4", C: "eb5@15 ~",
  D: "[~@26 g5 c5@4 ~@4 c5@28 ~, ~@27 eb5 ~@3 g5@32 ~, ~@33 eb5@30 ~]/2",
})).s("gm_piano").gain(0.34)

// chords · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2 = note("<~@5 A ~@34 B@2 ~@11 C@2 ~@23>".pickRestart({
  A: "[g5,c6,eb6]", B: "[~@31 [bb5,d6,g6]@32 ~]/2", C: "[~@11 [c5,eb5]@40 ~@13, ~@11 g4@4 ~@49]/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@3 G H@2 I J K@7 L H@6 M N O@3 P Q R K@6 S T K@10 ~@3>".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 ~@14 x ~@15 x", H: "~@15 x ~@15 x", I: "~@7 x ~@15 x ~@8", J: "~@3 x ~@5 x ~@5 x ~@11 x ~@3 x",
  K: "~@5 x ~@5 x ~@3 x ~@15 x", L: "~@15 x ~@5 x ~@5 x ~@3 x", M: "~@7 x ~@11 x ~ x ~ x ~@8",
  N: "~@3 x ~@5 x ~@5 x ~@11 x ~@4", O: "~@7 x ~@13 x ~ x ~@8", P: "~@7 x ~@13 x ~ x ~@7 x",
  Q: "~@5 x ~@5 x ~@11 x ~@8", R: "~@3 x ~@5 x ~@5 x ~@15 x", S: "~@5 x ~@5 x ~@3 x ~@16", T: "~@31 x",
})).gain(0.48)

// drums · snare
const snare = s("sd").struct(`<
  ~@10 A B@7 C B@7 D B@3 E F@2 G H F@3 I F@2 J K F@5 J L M ~@3 N O P F@3 Q F@3 ~ F@3 Q F@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: "~@8 x ~@14 x ~@8",
  F: "~@7 x ~@15 x ~@8", G: "~@19 x ~ x ~ x ~@3 x ~ x ~ x", H: "~@21 x ~ x ~@8", I: "~@7 x ~@13 x ~ x ~@3 x ~@4",
  J: "~@7 x ~@15 x ~@7 x", K: "~@15 x ~@5 x ~@5 x ~@4", L: "~@19 x ~ x ~ x ~@8",
  M: "~@3 x ~@5 x ~@5 x ~@3 x ~@3 x ~ x ~ x ~@4", N: "~@19 x ~ x ~@3 x ~ x ~ x ~@2", O: "~@23 x ~@8",
  P: "~@3 x ~@5 x ~@5 x ~ x ~ x ~@3 x ~ x ~ x ~@4", Q: "~@7 x ~@13 x ~ x ~@8",
})).gain(0.41)

// drums · hihat
const hihat = s("hh").struct(`<
  A B@3 C B@4 D E F@7 G F@7 ~ H@3 I J@2 K L M@6 N O J@5 P Q O R@3 S T O M@6 N O U M@8 N ~@3
>`.pickRestart({
  A: "~@14 x!2", B: "x ~ x!3 ~ x!3 ~ x!3 ~ x!2", C: "x ~@3 x ~ x ~ x ~@3 x ~ x ~ x ~@3 x!3 ~ x ~ x ~@5",
  D: "x ~@3 x ~ x ~ x ~@3 x ~ x ~ x ~@3 x ~ x ~ x ~@3 x ~ x!2", E: "~@2 x!3 ~ x!3 ~ x ~@5",
  F: "x ~ x!2 ~@2 x!3 ~ x ~@5", G: "x ~ x!2 ~@2 x!3 ~@7", H: "x ~ x!2 ~@2 x!3 ~ x!2 ~@2 x!2",
  I: "x ~@3 x ~ x ~@5 x ~ x ~ x ~@2 x ~ x ~@5 x ~ x ~ x", J: "~@3 x ~ x ~@5 x ~ x ~ x ~@3 x ~ x ~@5 x ~ x ~ x",
  K: "~@3 x ~ x ~ x ~@3 x ~ x ~ x ~@16", L: "~@19 x ~@11 x", M: "~@3 x ~ x ~@5 x ~ x ~ x ~@3 x ~@11 x",
  N: "~@3 x ~ x ~@5 x ~ x ~ x ~@3 x ~@12", O: "~@31 x", P: "~@3 x ~ x ~@5 x ~ x ~ x ~@3 x ~ x ~@5 x ~ x ~@2",
  Q: "~@3 x ~ x ~ x ~@3 x ~ x ~ x ~@11 x ~ x ~ x", R: "~@3 x ~ x ~ x ~@3 x ~ x ~ x ~@3 x ~ x ~ x ~@7 x",
  S: "~@3 x ~ x ~ x ~@3 x ~ x ~ x ~@7 x ~@8", T: "~@5 x ~@5 x ~ x ~ x ~@15 x",
  U: "~@3 x ~@3 x ~@3 x ~ x ~ x ~@3 x ~@11 x",
})).gain(0.34)

// drums · open hat
const open_hat = s("oh").struct("<~@4 A ~@5 A@16 ~@8 B@8 ~@8 B@4 ~ B@9 ~ B@10 ~@3>".pickRestart({
  A: "~@7 x", B: "~@27 x ~@4",
})).gain(0.34)

// drums · mid tom
const mid_tom = s("mt").struct("<~@34 [x ~@20 x ~@10] ~@43>").gain(0.34)

// drums · crash
const crash = s("cr").struct(`<
  ~@9 A ~ B ~@7 B ~@6 C B ~@4 D ~ E ~@3 D ~@2 D F ~@3 D ~@2 B G ~@3 D H E ~@3 D ~@3 D ~@3 D ~@2 D ~@6
>`.pickRestart({
  A: "x ~@2 x ~@2 x ~@9", B: "x", C: "~@8 x ~@2 x ~@2 x ~", D: "~@31 x", E: "~@3 x ~@5 x ~@5 x ~@15 x",
  F: "~@15 x ~@5 x ~@5 x ~@4", G: "~@3 x ~@5 x ~@5 x ~@16", H: "~@23 x ~@8",
})).gain(0.07)

// drums · high tom
const high_tom = s("ht").struct("<~@34 [~@3 x ~@5 x ~@5 x ~@16] ~@43>").gain(0.34)

// drums · tambourine
// … 42 more lines

More by Leo Sayer