Strudelify
Good Morning Starshine cover art

1969 · Oliver

Good Morning Starshine

Oliver

KeyB♭ majorTempo160 bpm
0:00/0:00
// Good Morning Starshine — Oliver
// 160 bpm, 4/4, key Bb major. Source: mcgill + midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 3 "Piano   (BB)" named as a piano, played on piano (its acoustic guitar steel patch is not one)
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 83 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(160/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 · "Bass    (BB)"
const bass = note(`<
  ~@2 A@2 B@7 C D E@3 F G H I@2 J@2 K@4 L@4 C M@2 C N@2 I@2 D C O@3 P@2 H Q@6 R@3 S@3 H T@2 G U V@2 W@5 X@2 Y Z@2 AA@3
  AB AC H AD
>`.pickRestart({
  A: "[g2@6 g2@2 d2@5 ~ c2@7 ~ d2@8 d2@2]/2",
  B: "[c2@6 c2@2 d2@5 ~ c2@7 ~ d2@7 ~ c2@8 c2@2 d2@5 ~ c2@8 c2@2 d2@5 ~ c2@8 c2@2 d2@5 ~ g2@7 ~ d2@7 ~ g2@8 g2@2 d2@6 d2@2]/7",
  C: "c2@3 c2 d2@3 d2", D: "c2@5 ~ d2@8 d2@2", E: "[c2@5 ~ d2@7 ~ c2@7 ~ b1@7 ~ e2@7 ~ g2@8 g2@2]/3",
  F: "g2@5 ~ g2 ~@5 bb1@4", G: "a1@3 a1 d2@3 d2", H: "g2@3 g2 d2@3 d2", I: "[g2@6 g2@2 d2@5 ~ g2@8 g2@2 d2@6 d2@2]/2",
  J: "[a1@5 ~ d2@7 ~ a1@7 ~ d2@8 d2@2]/2",
  K: "[a1@6 a1@2 d2@5 ~ a1@8 a1@2 d2@5 ~ g2@8 g2@2 d2@5 ~ g2@8 g2@2 d2@6 d2@2]/4",
  L: "[c2@6 c2@2 b1@5 ~ e2@7 ~ b1@7 ~ e2@6 b1@2 a1@6 e2@2 g2@8 g2@2 d2@6 d2@2]/4",
  M: "[c2@6 c2@2 d2@5 ~ c2@7 ~ d2@8 d2@2]/2", N: "[c2@5 ~ d2@7 ~ c2@7 ~ d2@8 d2@2]/2",
  O: "[c2@5 ~ d2@7 ~ c2@8 c2@2 b1@5 ~ e2@8 e2@2 g2@5 ~ g2 ~]/3", P: "[~@3 g2 g2@2 bb1 a1@4 a1 d2@3 d2]/2",
  Q: "[g2@6 g2@2 d2@5 ~ g2@8 g2@2 d2@5 ~ a1@7 ~ d2@7 ~ a1@7 ~ d2@7 ~ a1@7 ~ d2@7 ~ a1@7 ~ d2@8 d2@2]/6",
  R: "[g2@6 g2@2 d2@5 ~ g2@8 g2@2 d2@5 ~ c2@7 ~ b1@8 b1@2]/3", S: "[e2@5 ~ b1@7 ~ e2@7 ~ a1@7 ~ g2@8 g2@2 d2@6 d2@2]/3",
  T: "[g2@6 g2@2 d2@5 ~ a1@7 ~ d2@8 d2@2]/2", U: "a1@5 ~ d2@8 d2@2", V: "[a1@5 ~ a1 ~@3 d2@4 g2@8 g2@2 d2@6 d2@2]/2",
  W: "[g2@6 g2@2 d2@5 ~ c2@8 c2@2 b1@5 ~ e2@8 e2@2 b1@5 ~ e2@8 e2@2 b1@5 ~ a1@8 a1@2 d2@6 d2@2]/5",
  X: "[g2@5 ~ c2@7 ~ g2@8 g2@2 d2@6 d2@2]/2", Y: "e2@3 e2 b1@3 b1", Z: "[a1@5 ~ d2@7 ~ g2@8 g2@2 c2@6 c2@2]/2",
  AA: "[g2@6 g2@2 d2@5 ~ e2@6 b1@4 e2@4 e2@2 a1@8 a1@2 d2@6 d2@2]/3", AB: "g2@3 g2 c2@3 c2", AC: "g2 d2 g2!2",
  AD: "g2 d2 g2 ~",
})).s("gm_acoustic_bass").gain(0.52)

// chords · piano · "Piano   (BB)"
const piano = note(`<
  ~@2 A@3 B@2 C D@4 E F@2 G H@4 I J@4 K@6 C L M N@5 O@2 L P Q@2 R@6 S T@7 U@6 V@3 W X Y@2 I Z@2 AA AB@4 I AC@2
>`.pickRestart({
  A: "[~@2 g3 ~@2 d3 g3 ~@8 a2 ~@2 e3 d4@2 e4 gb4 a4, [g2,b3]@3 d4@4 g4@4 g4 d2 a2 gb3@2 [c2,g3,c4,e4]@3 ~@5, ~ d3@3 g2@3 c3@5 [a3,d4,gb4]@7 a3@5, ~@7 c4@3 c4@6 ~@6 d4@2, ~@9 g3@7 ~ g2@2 ~@5]/3", // G C D
  B: "[~@2 c4 d4@2 e4 gb4 ~@4 g2 d4 e4 gb4 a4, [c3,g4]@3 ~@4 a4@5 ~@2 d4@2, c4 ~@2 d4@3 a3@2, ~ g3@2 a3@5 [c2,g3,c4,e4]@4 ~@4, ~@9 g2 e3@2 ~@4]/2", // C5 C
  C: "~@3 g4 d4 e4 gb4 a4, c3 ~, g4@3 ~@5, c4!2 ~ d4, ~ g3@3 a3@4",
  D: "[~@6 gb3 ~@4 d2 ~@2 a3 ~@3 g3 ~@2 d3 g3 ~@3 c4 ~@4 a2, c3@4 [d2,a3,d4,gb4] a2@2 [g2,b3,d4,g4]@5 ~@3 [g2,b3]@4 ~ g2@3 ~@2 g3@2 ~@3 gb3@2, g4@3 g4@4 ~@6 c5@2 ~@4 d4@4 c4@3 ~@6, c4@4 c4@10 ~@6 g3@4 d3@5 ~@5 d3@6 ~@6 [c3,g4]@8 ~@4 a2@4 ~@2, ~ g3@6 ~@2 d2@2 ~@16 [d2,a3,d4,gb4]@5]/4", // D G C5 D
  E: "~@3 g2 ~@3 a4, [c2,g3,c4,e4]@2 d4!2, ~ g2@2 ~ a4@3 ~, ~ e3 d3@2, ~@5 a3@3", // C
  F: "[~@3 g4 d4 e4 gb4 ~@3 e3 b3@2 db4 eb4 gb4, c3@4 ~@4 [c2,g3,c4,e4] g2@2 ~@5, g4@3 ~@4 a4@4 ~@5, c4@2 c4@2 ~@2 d4@5 ~@3 a3@2, ~ g3@3 a3@7 gb3@5]/2", // C
  G: "~@3 b4 ~@3 d4, e3@8 g2@5 ~@3, b4@3 ~@5, e4@2 e4@2 ~ f4@2 ~, ~ b3@3 ~@2 d3@2",
  H: "[~@3 d4 ~ d3 [bb2,f4] ~@3 db4 d4@2 e4 [c4,g4] ~@16 g3, g2@2 d3@2 [g2,d4]@2 ~ [a2,g4,a4]@4 ~@4 g2@6 ~@3 [g2,d4]@5 ~@3, ~ f4@2 ~@4 db4@3 ~@5 d4@7 b3@2 ~@3 b3@3 b3@2, ~@9 a3@2 a3@4 ~@2 d3@2 b3@2 g3@2 ~@3 g3@2 ~ g3@2 ~, ~@18 g3@2 d3@3 d3@2 d3@2 ~ d3@3 ~]/4", // Bb5 C5 G5 A7 G5
  I: "~@2 g3 ~@4 d3, [g2,b3]@3 d4@4 ~, ~ d3@3 g2@3 ~, ~@5 d3@2 ~, ~@3 g3", // G
  J: "[~@3 g4 ~@2 a3 ~@4 e2 ~@2 a3 ~@4 c5 d4 e4 [c4,gb4] ~@4 e2 d4 e4 gb4 a4, [a2,a4]@8 d3@5 ~ [a2,a3,c4,e4,g4]@10 d3@5 ~ a2@10 ~@6 [a2,c4,e4,a4]@10 ~@8, g4@3 ~@2 c5@2 ~@6 c5@2 c5@4 ~@11 c4@2, c4@2 c4@2 ~@6 g3@2 ~@3 e4@3 e4@2 ~@6 a3@2 a3@4, ~ a3@3 ~@5 e2@2 ~@6 c4@3 a3@3 ~@2 e2@2 ~@5]/4", // Cdim A Am7 Am
  K: "[~ d3 ~ d3 ~ d3 g3 ~@3 g3 ~@2 d3 g3 ~@3 e3 ~@3 eb4 ~@8 gb2 ~@2 g3 a3@2 b3 [a3,c4] ~@3 g3 ~@4 d3, g2@2 g3@2 b3@2 ~ [g2,b3]@4 d4@4 ~@2 g2@2 [b2,a4,db5]@4 [e3,b4]@5 [b1,b3] gb2 a3@2 [e2,b3,e4,g4]@3 ~@4 [g2,b3]@4 ~ g2@3 ~, ~@9 d3@3 g2@3 [c2,g3,c4,e4]@4 eb4@3 ~ g4@4 g4@5 ~@14 g3@2, ~@21 db4@2 d4@3 d4@6 ~ b2@2 e3@4 ~@2 d3@3 ~ d3@2 ~, ~@25 b3@3 [eb4,gb4,a4]@7 ~@8 d4@4 ~]/6", // Am G Gbm E5 B Em G C …
  L: "~@2 c4 ~@4 a2, [c3,g4]@3 [d2,a3,d4,gb4]@5, c4 ~@2 gb3, ~ g3@2 ~@2 a2@2 ~", // C5 D
  M: "~@2 c4 d4@2 e4 gb4 a4, [c3,g4]@3 ~@5, c4 ~@2 d4, ~ g3@2 a3@5", // C5
  N: "[~@3 g4 ~@2 d4 ~@4 g2 d4 e4 [d4,gb4] ~@3 e3 d4@2 e4 gb4 ~@4 d2 d4 e4 [c4,gb4] ~@3 g3 ~@4 d3, c3@4 [d3,a4]@3 [c2,g3,c4,e4]@5 ~@3 [c2,g3,c4,e4]@4 ~@5 [g2,b3,d4,g4]@4 ~@3 [g2,b3]@4 ~ g2@3 ~, g4@3 ~@19 d4@2 ~@2 g3@2 a3@3 ~@2 d3@3 ~ d3@2 ~, c4@2 c4@2 d4@2 ~@4 e3@2 a3@3 ~@4 a3@5 ~ d2@2 ~@11 g3@2, ~ g3@3 ~ a3@2 ~@2 g2@2 ~@6 g2@2 ~@4 a4@5 ~@7 d4@4 ~]/5", // D Cdim D5 C G
  O: "[~@2 c4 d4@2 e4 [d4,gb4] ~@3 e3 d4@2 e4 gb4 a4, [c3,g4]@3 ~@4 [c2,g3,c4,e4]@4 ~@5, c4@2 ~@9 a3@5, ~ g3@2 a3@4 ~@2 g2@2 ~@3 d4@2]/2", // D C5 C
  P: "~@2 c4 b3@2 db4 eb4 gb4, [c3,g4]@3 ~@5, c4 ~@2 a3, ~ g3@2 gb3@5", // C5
  Q: "[~@2 e4 ~@3 b3 ~@3 d3 g2@2 ~@2 f3, [e3,b4]@6 [g2,f4,g4]@8 g2@7 ~@5 [bb2,f4]@6, e4@2 ~@3 g3@2 ~@9, ~@2 b3@4 b3@6 ~@6 f4@4 d4 ~@9]/2", // E5 G7 Bb5
  R: "[~@3 e4 ~@2 c4 ~@14 g3 b3 ~@3 g3 ~@2 d3 g3 ~@4 g4 ~@6 g3 ~@4 gb4, a2@4 e3@4 [d3,g4,a4]@6 g2@12 ~@6 [g2,d4]@10 ~@4 [g2,b3]@8 ~@2 g2@6 [a2,a4]@10 d3@5 ~@3 [a2,a3,c4,e4,g4]@6 [d3,a4]@10, ~ g4@2 ~ c4@2 ~ d4@7 b3@2 ~@3 b3@3 ~@5 d4@4 g4@4 ~@2 c5@2 a4@4 gb4@4 ~, ~@5 a3@2 ~@2 d3@2 b3@2 g3@2 ~@3 g3@2 ~@11 c4@3 c4@2 ~@7 c4@3 c4@2, ~@10 g3@2 d3@3 d3@2 d3@2 ~ d3@3 ~@2 d3@3 ~@5 a3@3 ~@2 a3@2 ~ e2@2 ~@2 a3@3]/6", // Dsus4 G5 G A Am7 D5
  S: "~@3 c5 ~@3 a4, a2@8 d3@5 ~@3, c5@3 ~@2 c5@2 ~, e4!2 ~@2, ~ c4@3 ~@2 a3@2",
  T: "[~@2 e4 ~@3 gb3 ~@2 d3 ~ d3 ~ d3 g3 ~@3 g3 ~@2 d3 g3 ~@4 g2 ~@2 eb4 ~@3 g3 b3@2 db4 [a3,eb4] ~@3 e4 ~@3 e4 ~@8 d3, [a2,c5]@3 [d2,a3,c4,d4,gb4]@4 ~@13 g2@3 [c2,g3,c4,e4]@5 ~ db4@2 ~@2 b2@2 gb3@4 [e3,b4]@4 [a2,c5]@4 g2@6 ~@3, e4@2 ~@8 g3@2 b3@2 ~@3 d3@3 ~@5 g2@2 ~ [b2,a4,db5]@3 [e2,b3,d4,e4,g4]@4 ~@6 b3@2 ~@2 c4@2 d4@7 b3@2, ~ c4@2 ~@2 a2@2 g2@3 ~@5 [g2,b3]@4 d4@4 ~@3 e3@2 eb4@2 ~@9 e4@3 ~ e4@3 ~@3 d3@2 b3@2 g3@2 ~, ~@50 g3@2 d3@3 ~]/7", // Adim Am D7 C E5 Am Gbm Em7 …
  U: "[~@5 g3 b3 ~@3 g3 ~@2 d3 g3 ~@7 gb3 ~@4 e2 ~@3 a2 ~@3 e2 d4 e4 gb4 a4 ~@3 e2 [a2,e4] [d3,a4]@2 g2, [g2,d4]@5 ~@2 [g2,b3]@4 ~ g2@3 [a2,a4]@5 [d2,a3,c4,d4,gb4]@3 ~@2 e2@2 ~ [d2,a3,c4]@4 ~ e2@2 ~@6 e2@2 ~@5, ~ d3@2 b3@3 ~@5 d4@4 g4@4 g4@4 ~@5 [d4,gb4]@8 ~@2 c4@2 ~@8, ~@2 g3@2 d3@3 ~@2 d3@3 ~@3 c4@3 c4@2 ~@6 g3@2 ~@2 gb3@2 ~@2 g3@2 a3@6 a3@2 ~@4, ~@17 a3@3 ~ a2@2 [a2,a3,c4,e4,g4]@5 ~ a2@2 ~ [a2,a3,c4,e4,g4]@4 ~@4 [a2,c4,e4,a4]@4 ~@4]/6", // A5 D5 G5 G A D7 D Am7 …
  V: "[~ d3 ~ d3 ~ d3 g3 ~@3 g3 ~@2 d3 g3 ~@4 g2 ~@3 gb2, ~@2 g3@2 b3@2 ~ [g2,b3]@4 d4@4 ~@2 g2@2 ~@2 gb2@2 ~, ~@9 d3@3 g2@3 [c2,g3,c4,e4]@5 [b1,b3,eb4,gb4,a4]@4, ~@9 e3 ~ a3]/3", // G C B7
  W: "~@3 g4 ~@3 gb4, [e3,b4]@8 b2@5 ~@3, g4@3 ~@2 a4@2 ~, d4!2 ~@2, ~ b3@3 ~@2 gb3@2", // E5
  X: "g4@3 ~@3 e5!2, [e2,e3,b3,e4], ~@3 g4@5, ~@2 e5 ~, ~@5 g5@3", // E5
  Y: "[~@2 c4 ~@8 d2 c4 d4 e4 g4, [a2,g4,a4]@3 [d3,a4]@5 [g2,b3,d4,g4] d2 g3@2 g3@4, c4@2 ~ gb4@4 gb4@5 ~@4, ~ a3@2 c4@3 c4@6 ~@2 c4@2, ~@5 a3@7 ~@4]/2", // A7 D5 G
  Z: "[g4@3 ~@3 e5 ~@3 g3 ~@4 gb4, [e2,e3,b3,e4]@7 [a2,a3,c4,e4,g4]@4 [d3,a4]@5, ~@3 g4@4 ~@2 e2@2 ~@2 a3@3, ~@4 e5@2 ~@5 gb4@4 ~, ~@5 g5@2 ~@4 c4@3 c4@2]/2", // E5 Am7 D5
  AA: "~@3 b4 c4 d4 e4 g4, g2 ~, b4@3 ~@5, d4!2 ~ c4, ~ b3@3 g3@4",
  AB: "[~@2 g3 ~@2 d3 g3 g4@4 ~@3 e5 ~@3 g3 d4@2 e4 [c4,gb4] ~@3 d4 ~@4 g4, [g2,b3]@3 d4@4 ~@4 g4@4 ~@2 e2@2 ~@4 [g2,b4]@4 c3@5, ~ d3@3 g2@3 [e2,e3,b3,e4]@8 [a2,a3,c4,e4,g4]@4 a3@4 d4@3 ~ g4@4 ~, ~@12 e5@2 ~@11 b3@2 c4@3 c4@2, ~@13 g5@2 ~@14 g3@3]/4", // Cdim G E5 Am7
  AC: "[~@4 b3@2 ~@10 g4@15 ~, g2@31 ~, ~ g3@2 g3@2 d3@10 ~, ~@8 d4@4 b3@19 ~, ~@14 d4@17 ~]/2",
})).s("gm_piano").gain(0.16)

// chords · acoustic guitar steel · "Guitar  (BB)"
const acoustic_guitar_steel = note(`<
  ~@2 A@3 B C@6 D E F@4 G@3 H@3 I J K L M N@2 O@3 P@3 Q@3 R@2 S@5 T@7 J U V W@2 X Y@5 Z@2 AA@2 AB@6 AC AD AE AF@5
>`.pickRestart({
  A: "[~@6 b3 ~@4 e4 d4 e4 [d4,gb4] ~@4 c4 ~@3 d4, d4@12 ~@8 c4@4 ~@10 e4@5 ~@3 gb4@6, g2@5 ~@19, ~ d3@2 b3@2 g3@2 ~@2 g3@3 a3@3 ~@3 g3@2 ~@2 a3@2, ~@4 g3@4 d3@5 ~ [c3,g4]@10 ~@6 c3@10 d3@8]/3", // D C5
  B: "~@2 g3 ~@4 d4, c3@3 d3@5, ~@2 e4@4 ~@4 gb4@5 ~, ~@3 a3",
  C: "[~@3 e4 ~@2 gb4 ~@4 e4 d4 e4 [d4,gb4] ~@3 e4 ~@2 gb4 d4 ~@3 g3 ~@2 gb4 c4 ~@7 d3 ~@3 e4 ~@4 d4, [c3,g4]@8 [d3,d5]@5 ~ [c3,g4]@10 ~@6 [c3,c5]@7 ~@9 [g2,d4]@8 ~@8 g2@16 ~@18, ~@2 g3@6 ~@10 g3@6 a3@6 ~@8 a3@8 ~@4 d3@4 ~@14 d3@4 b2@6 [c3,c5]@7 ~ d3@10, ~@4 c4@4 ~@2 d4@4 ~@6 c4@4 ~@10 c4@4 ~@16 a3@8 ~@4 b3@8 b3@4 ~@4 c4@4 ~@4 gb4@5 ~, ~@35 g3@3 ~@8 a3@2]/6", // D C5 D C5 C G5 C
  D: "~@2 c4 ~@4 d4, [c3,e4]@3 d3@5, ~@2 g3@4 ~@4 gb4@5 ~, ~@3 a3", // C
  E: "~@2 g3 ~@4 d4, c3@3 d3@5, ~ e4@2 ~@2 gb4@3, ~@3 a3",
  F: "[~@3 g4 ~@2 b3 ~@2 g4 e4 ~@2 b3 f3 ~@4 b3 [g3,b3]@2 [bb3,d4] ~@4 e4 ~@3 g4, c3@4 [b2,gb4]@3 ~@8 [g2,d4]@5 ~@3 a2@5 ~@4, e4@3 ~@20 db4@4 ~@3 e4@2, ~ g3@3 ~ gb3@2 e3@4 d3@4 ~@2 d3@3 ~@5 e3@3 [d3,a4]@4, ~@2 c4@2 ~@14 g3@2 ~@6 g3@2 ~ a3@3]/4", // G Bb B5 G5 D5
  G: "[~@13 g3 b3 ~@8 d3, [g2,d4]@3 ~@2 g3@2 g3@2 d3@2 ~ d3@3 g2@3 g3@2 ~ d3@2 ~, ~ d3@2 b3@3 b3@2 d4@3 b3@3 ~ b3@4 b3@3 g3@2, ~@2 g3@2 d3@3 ~ g2@2 g3@2 ~@5 d3@2 ~ g2@2 ~@2]/3", // G5
  H: "[~@3 c4 ~@2 c4 ~@4 g3 ~@2 a3 ~@3 a3 d4@2 e4 gb4 a4, [a2,e4]@4 ~@3 a2@5 ~@3 [a2,e4]@4 ~@5, ~ e3@3 [d3,gb4]@3 ~@3 e3@2 d3@3 ~@2 e3@2 a3@5, ~@4 a3@4 ~@2 a3@4 ~@4 c4@5 ~@3 gb4@4 ~@14 c4@4]/3", // A5 D
  I: "~@3 e3 ~@3 a4, [a2,a4]@2 c4@2 ~ c5@2 ~, ~@2 a3@5 ~ d3@4 a3@4", // A
  J: "~@7 g3, g2, ~ b3@4 b3@3, ~ d3 b2@2, ~@3 g3@3 d3@2",
  K: "~@7 d3, d4@3 b3, g2@5 ~@3, ~ d3@2 b3@2 g3@2 ~, ~@2 g3@2 d3@3 ~",
  L: "~@2 c4 ~@4 gb4, [c3,g4]@3 b2@5, ~ g3@2 eb4@4 ~, ~@5 gb3@3, ~@3 a3", // C5
  M: "~@2 b3 ~@4 eb4, e3@3 [b2,gb4]@5, ~ g4@2 ~@2 gb3@3, ~@3 b3", // B5
  N: "[~@2 b3 ~@3 e3 ~@8 d3, e3@3 a2@4 g2@6 ~@3, ~ g4@2 ~@2 c4@2 d4@7 b3@2, ~@9 d3@2 b3@2 g3@2 ~, ~@10 g3@2 d3@3 ~]/2",
  O: "[~@3 e4 ~ gb4 d4 ~@3 g3 ~@3 gb4 ~@2 e4 c4 ~@4 a4, [c3,g4]@8 ~@6 c3@8 [d3,d5]@7 ~ c3@8 d3@10, ~ g3@3 a3@3 ~@14 a3@3, ~@2 c4@2 ~@5 e4@2 ~@2 d4@2 ~@4 gb4@4 ~, ~@11 d4]/3", // C5 D
  P: "[~@3 e4 ~@2 a3 ~@4 e4 ~@2 a3 ~@3 c4 ~@4 a3, [c3,g4]@8 d3@6 [c3,g4]@10 d3@6 [c3,g4]@8 [d3,d5]@7 ~@3, ~ g3@3 ~@5 g3@3 ~@5 g3@2 ~@3 gb4@2, ~@4 c4@4 ~@2 gb4@4 ~@6 c4@4 ~@2 gb4@4 ~@12 d4@5 ~]/3", // C5 D
  Q: "[~@2 g3 d4@2 e4 [c4,gb4] ~@6 d3 g3 ~@4 e4 ~@3 a4, [g2,d4]@3 ~@4 g2@3 g3@2 ~@5 g3@3 ~ a3@3, ~ d3@2 a3@4 b3@4 b3@3 ~@4 c4@2 gb4@3 ~, ~@9 d3@2 ~ g2@2 ~ [c3,g4]@5 d3@4, ~@11 d4]/3", // Cdim G5 C5
  R: "[~@3 c4 ~@2 a3 ~@4 c4 ~@3 d4, c3@4 d3@3 c3@5 d3@4, ~@2 e4@5 ~@3 gb4@4 ~@4 e4@5 ~@3 gb4@6, ~ g3 ~@3 g3 ~ a3]/2",
  S: "[~@2 g3 ~@3 a3 ~@2 g4 e4 g4 ~@2 g3 ~@3 d3 [g3,b3]@2 [bb3,d4]@2 ~@3 e3 ~@3 a3 ~@8 d3, c3@6 [b2,eb4]@8 ~@10 [g2,d4]@6 g2@8 ~@8 a2@7 ~ d3@8 g2@6 g3@4 ~@2 d3@4 ~@2, ~ e4@2 ~@2 gb3@2 e3@5 ~ d3@2 ~@2 b3@2 ~@6 g4@2 ~@2 g4@2 b3@4 b3@3 g3@2, ~@33 d3@2 ~ g2@2 ~@2]/5", // G Bb B G5
  T: "[~@10 d3@2 g3@2 ~@12 g3@2 b3@2 ~@8 c4@2 ~@4 a3@2 ~@8 g3@2 d4@2 e4@2 [c4,gb4]@2 ~@6 e3@2 a3 ~@3 gb4@2 c4@2 ~@6 a3@2 d4@4 e4@2 [c4,gb4]@2 ~@16 d3@2, [g2,b3]@2 g3@2 g2@2 ~ [g2,d4]@4 ~@4 [a2,e4]@5 ~@3 a2@5 ~@3 a2@4 ~@4 [a2,e4]@4 ~@4 g2@3 g3@2 ~ d3@2 ~, ~@2 d3@4 b3@6 ~@6 d3@4 b3@6 ~@8 a3@4 ~@2 gb4@4 ~@4 c4@5 ~ a3@6 ~@4 c4@4 ~@16 a3@8 b3@8 b3@6 g3@4, ~@10 g3@2 d3@3 ~@2 e3@3 d3@3 ~@3 e3@2 ~@13 e3@2 ~@6 d3@2 ~ g2@2 ~@2]/7", // Cdim G G5 A5
  U: "~@3 g3 b3 db4 eb4 gb4, [c3,c5] e4 ~ a3, ~@2 c4@5 ~ gb3@8", // C
  V: "~@4 g4@2 b3 ~@3 db4@2 eb4@2 gb4@2, [e3,d5]@5 ~ gb3@10, ~ e4@2 ~@3 a3@2", // E7
  W: "[~@2 b3 a3@2 b3 [a3,c4] ~@3 g3 ~@4 d3, e3@3 e3@4 [g2,b3]@4 d4@4 ~, ~ g4@2 ~@6 d3@3 g2@3 ~, ~@13 d3@2 ~, ~@7 g3]/2", // Am G
  X: "~@7 d3, [g2,b3]@3 d4@4 ~, ~ d3@3 g2@3 ~, ~@2 g3@2 ~ d3@2 ~, ~@3 g3", // G
  Y: "[~@6 d3 ~@4 c4 ~@2 a3 ~@2 c4 a3 ~@3 a3 ~@3 g3 ~@3 gb4 ~@3 e3 c4@3 [d4,gb4]@2, g2@7 [a2,e4]@5 ~@3 a2@4 ~@4 [a2,c4]@4 ~@4 a2@4 ~@5, ~@2 b3@8 b3@4 ~@6 a3@4 ~@2 gb4@4 ~@12 gb4@4 ~@12 d4@4 ~@4 c4@4 a3 ~@9, ~@2 d3@2 b2@3 ~@33, ~@6 g3@6 ~@6 e3@6 d3@6 ~@8 d3@8 ~@4 e3@4 [d3,c5]@7 ~@19]/5", // D A5 Am D7
  Z: "[~ b3 g3 ~@2 b3 g3 ~@8 g3, g2@4 d3@3 [g2,d4]@4 ~@2 g3@2 ~, ~@3 b3@2 ~@4 d3@2 b3@3 b3@2, ~@10 g3@2 d3@3 ~]/2", // G5
  AA: "[~@2 c4 b3@2 db4 [a3,eb4] ~@4 g4 ~@3 gb4, [c3,g4]@3 ~@6 b3@3 ~@2 gb3@2, ~@2 g3@4 gb3@8 [e3,b4]@10 b2@5 ~@3, ~@10 e4@2 ~ a4@2 ~]/2", // Adim C5 E5
  AB: "[~@5 b3 e4 ~@4 c4 d4 e4 [c4,gb4] ~@3 g3 c4@2 d4 [c4,e4] ~@3 g3 ~@2 d3 g3 ~@3 e4 b4 e4 gb4 [b3,g4] ~@4 e3 ~@3 c4, g4@6 g4@6 ~@8 a3@4 a3@6 ~@8 g3@8 ~@8 d4@8 ~@4 b3@6 ~@10 a3@5 ~@5 a3@4, e3@4 e4@4 ~@10 e3@6 ~@10 d3@4 ~@12 d3@6 ~@6 [e3,g4]@9 ~ e3@5 ~@7 c4@4 ~@2 gb4@5 ~, ~@2 b3@4 ~@2 e3@4 ~@2 [a2,e4]@10 ~@6 [g2,d4]@8 ~@8 [g2,b3]@8 ~@2 g2@6 ~@16 [a2,g4]@7 ~@3 d3@8]/6", // Cdim C Em A5 G5 G A7
  AC: "~@2 d3 ~@4 e4, g2@3 [c3,g4]@5, ~ b3@2 ~@2 g3@3, ~@3 c4", // C5
  AD: "~@5 b3 ~ b3, g2, ~ g3@4 ~@3, ~ b3 d3@2, ~@3 d4@3 d4@2",
  AE: "~@2 e4 b4 e4 gb4 ~ b4, [e3,g4]@7 ~ e3@7 ~, ~ b3@3 ~@2 [b3,g4]@2", // Em
  AF: "[~@6 a3@2 ~@2 gb4@2 c4@2 ~@4 b3@2 g3@2 ~@6 g3@2 ~@12 d3@2 g3@2 ~@6 b3@2 ~@10 g4@15 ~, a2@4 ~@3 g2@4 ~@4 g2@3 g3@2 ~@5 g3@2 g3@2 d3@10 ~, ~@2 c4@6 a3@6 ~@12 e4@4 b3@8 b3@6 ~@12 d4@4 b3@19 ~, ~@2 e3@2 ~@7 c3@4 ~@2 d3@2 ~ g2@2 ~ g2@16 ~, ~@62 d4@17 ~]/5",
})).s("gm_acoustic_guitar_steel").gain(0.16)

// chords · string ensemble 1 · "Strings (BB)"
const string_ensemble_1 = note("<~@81 A@2>".pickRestart({
  A: "[~@16 b6@9 ~@7, [b5,g6]@13 ~@3]/2", // Em
})).s("gm_string_ensemble_1").gain(0.12)

// drums · kick
const kick = s("bd").struct(`<
  ~@2 A@3 B A B A B A B A B A@3 B A@2 B@2 A@3 B A@4 B A@2 B@3 A B@3 A B A B A@5 B A B@3 A@3 B A@2 B@2 A@7 B@3 A B@2 A@2
  B@2 A B A C
>`.pickRestart({
  A: "x ~@2 x!2 ~@3", B: "x ~@2 x!2 ~@2 x", C: "x!3 ~",
})).gain(0.6)

// drums · kick · soft notes
const kick_soft = s("bd").struct(`<
  ~@2 A ~@5 A ~@5 A ~@3 A ~ A ~@3 A ~ A ~@3 A ~@7 A ~ A ~@9 A ~@3 A ~@5 A ~ A ~ A ~@3 A ~ A ~@12
>`.pickRestart({
  A: "~@5 x ~@2",
})).gain(0.36)

// drums · rim
const rim = s("rim").struct("<[x!2] [x!4] ~@81>").gain(0.42)

// drums · snare
const snare = s("sd").struct("<~@2 A@7 B A@11 B A@3 B A@3 C A@19 B A@11 B A@18 C A D>".pickRestart({
  A: "~ x ~ x", B: "~@2 x ~@3 x!2", C: "~@4 x ~@5 x!3 ~@3", D: "~@2 x!3 ~ x ~ x ~@7",
})).gain(0.54)

// drums · low tom
const low_tom = s("lt").struct("<~@77 [~@7 x] ~@5>").gain(0.6)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@2 A@6 B A@16 B A@6 B@2 A B A C A B@2 C A B A C A B@2 A@2 B A@3 B A C@2 A@2 D A@6 C B A@5 B A@3 C A B E
>`.pickRestart({
  A: "x ~ x!3 ~ x ~ x ~ x ~ x ~ x ~", B: "x!8", C: "x ~ x!3 ~ x ~ x ~ x ~ x ~@3", D: "x!7 ~", E: "x ~ x!3 ~ x ~ x ~@7",
})).gain(0.42)

// drums · mid tom
const mid_tom = s("mt").struct("<~@77 [~@3 x] ~@5>").gain(0.54)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@8 A ~@16 A ~@6 A@2 ~ A ~ B ~ A@2 B ~ A ~ B ~ A@2 ~@2 A ~@3 A ~ B@2 ~@2 C ~@6 B A ~@5 A ~@3 B D A ~
>`.pickRestart({
  A: "~@3 x ~@12", B: "~@7 x", C: "~@3 x ~@10 x ~", D: "~@11 x ~@4",
})).gain(0.36)

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@5 A ~@7 A ~@3 A ~@11 A ~@3 A ~@3 A ~@3 A ~@3 A ~@7 A ~@3 A ~@11 A ~@3 A ~@3 B ~@2 A ~@2
>`.pickRestart({
  A: "~@7 x", B: "~@10 x!2 ~@2 x ~",
})).gain(0.18)

// drums · crash
const crash = s("cr").struct("<~@30 x ~@52>").gain(0.36)

// drums · ride
const ride = s("rd").struct("<~@2 x ~@78 [x!4] [x!3 ~]>").gain(0.36)

// drums · ride · soft notes
const ride_soft = s("rd").struct("<~@81 [~ x ~ x ~ x ~ x] [~ x ~ x ~@4]>").gain(0.24)

// drums · congas
const congas = s("conga:13").struct(`<
  ~@2 A B@12 A C B@4 D B@4 A D E B@2 D C B@4 D B@6 D B@7 F B@5 A B@11 C D B A B A D G B@2 H I J
>`.pickRestart({
  A: "~@2 x!2 ~@4", B: "~ x ~@2", C: "~ x!2 ~@5", D: "~ x ~ x", E: "~ x!2 ~@3 x ~", F: "~@2 x!2 ~@2 x ~",
  G: "~@4 x!2 ~ x!2 ~@7", H: "x!5 ~@7 x ~@3", I: "x ~ x!3 ~ x ~@3 x ~@5", J: "x ~ x!3 ~ x ~@9",
})).gain(1.73)

// drums · congas
const congas_2 = s("conga:18").struct("<~@2 [~@5 x ~ x]!75 [~@3 x ~ x ~ x] [~@5 x ~ x]!3 [~@4 x ~ x!2] [~ x]>")
  .gain(1.73)

stack(
  bass, piano, acoustic_guitar_steel, string_ensemble_1, kick, kick_soft, rim, snare, low_tom, hihat, mid_tom, open_hat,
  high_tom, crash, ride, ride_soft, congas, congas_2
)