Strudelify

Up Where We Belong

Cocker

KeyD majorTempo70 bpm
0:00/0:00
// Up Where We Belong — Cocker
// 70 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 71 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(70/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 I J K L M N O@2 P Q R S T U V W X Y Z AA AB@2 AC AD AE AF AG AH AI AJ AK AL P AM R AN T AO R AP@2
  AQ AR AS@2 AT AU AV AW AX AU AY AZ AT AU BA BB BC AU BD@2
>`.pickRestart({
  A: "d3@3 [d3,b3,g4] ~@3 [d3,c#4,a4], [a3,f#4]@4 [d3,c#4,a4]@3 ~, ~@11 [d4,b4]@5", // G Dmaj7 D Dmaj7 G
  B: "~@7 d5 [d3,a#3,g4]@3 [d3,a3,f#4] [d3,g3,e4]@3 [f#4,g4], [d3,b3,g4] ~, ~@5 d5@2 ~@9, ~@3 c#5 ~@4", // Gm D Em7 Gmaj7 G
  C: "d3@6 [d3,b3,g4]@2 ~@3 [b3,g4]@3 [d3,a3,f#4]@2, [a3,f#4]@4 [d3,c#4,a4]@3 ~", // G Em D Dmaj7
  D: "~@7 d5 [d3,d4,g4,a#4]@3 [d3,a4] [d3,a#3,d4,g4]@4, [d3,b3,g4] ~, ~@5 d5@2 ~@9, ~@3 c#5 ~@4", // Gm D5 Gm G
  E: "d3@3 [d3,b3,g4] [d3,c#4,a4]@4, [a3,f#4] ~", F: "~@7 g4 ~@7 e4, [d3,b3,g4] [d3,g3,a#3,e4], ~@3 f#4 ~@3 f#4",
  G: "[d3,a3,f#4]@6 [d3,b3,g4]@2 ~@7 d5, ~ [d3,c#4,a4], ~@7 c#5", // D G Dmaj7
  H: "~@7 d6 [d3,d5,g5,a#5]@3 a5 [d3,a#4,d5,g5]@4, [d3,g4,b4,d5] ~, ~@5 d6@2 ~@9, ~@3 c#6 ~@4", // Gm G
  I: "~@11 [a#4,c#5] [f#2,f#4,a4,c5]@4, [d3,a3,f#4]@3 ~, ~@5 [b4,d5] ~@2", // A#m F#dim D Bm
  J: "d4@6 ~ d3 ~@7 f#4, [g2,g4,b4]@8 [g2,g3,b3]@3 d4@5, ~@3 d4 ~ c#4 f#2@2, ~@7 e4", // G
  K: "~@5 d5@3, [e2,b3]@5 d4@3 f#4 g4@7, g4@3 g3@13, d4 f#3@7, ~ e3@15", // E5
  L: "a3 ~@9 a5@6, [a2,e4]@5 a4@3 b4 c#5@7, c#4 b3@7, ~ a3@15, ~@3 c#4@13", // A5
  M: "~@7 a4 [f#2,d4,e4,a4]@8, [d2,a3,d4,f#4] ~, ~@3 g4 ~@4", // D
  N: "~@7 d5 [b4,d5]@4 ~@2 f#5@2, [g2,d4,g4,b4] [b2,g4], ~@3 c#5 ~@2 [b4,d5,g5]@2", // Bm G Em G
  O: "[~@7 e4 [a2,a3,c#4,e4]@4 a2@2 [a2,a3,c#4,e4]@2, [c3,c5,e5] ~, g4@11 [d4,f#4]@5 ~@16, ~ c4 ~ [g3,b3,d4], ~@4 e4@3 g4@9]/2", // A C D G
  P: "[a3,d4,f#4] [d4,f#4,a4]", Q: "[d4,g4,b4]@2 [d4,g4,b4] [d4,f#4,a4]", R: "[b3,d4,g4] [d4,f#4,a4]",
  S: "[e4,g4,c5]@6 ~ c5 [d4,g4,b4]@4 [e4,a4,c#5]@4, ~@3 [e4,g4,d5] ~@4", T: "[d4,f#4,a4]!2",
  U: "~@7 [d5,g5,b5]@5 [d5,f#5,a5]@4, [d4,g4,b4] ~, ~@5 [d5,g5,b5]@2 ~@9, ~@3 [f#5,a5] ~@4", // G D G F#m
  V: "[b4,d5,g5]@8 ~@7 e6, ~ [d5,f#5,a5], ~@7 d6", W: "[f#5,a#5,c#6]@6 [f#5,b5,d6]@5 d5 [a#3,d4,g4,d5]@3 a4",
  X: "[d3,d4,e4,f#4,a4]@6 [d3,b3,g4]@2 ~@3 [d4,b4]@3 [d3,c#4,a4]@2, ~@4 [d3,c#4,a4]@3 ~", // D G Dmaj7
  Y: "~@7 d6 ~@7 a#4, [d3,b3,d4,g4]@8 ~@2 g5@3 d5 c5@2, ~@5 d6@2 ~ [d5,e5]@4 e5@4, ~@3 c#6 a5@4, ~@11 f#5@5", // G Dsus2
  Z: "[a3,d4,f#4,a4]@6 [b3,d4,g4]@2 ~@7 f#4, ~ [c#4,f#4,a4], ~@7 g4", // D G F#m
  AA: "~@7 g4 [a#3,d4,g4]@3 f#4 ~@2 g4@2, [b3,d4,g4]@2 ~ [g3,a#3,e4], ~@3 f#4 ~@4", // Gm G Edim
  AB: "[[a3,d4,f#4]@3 [b3,d4,g4,d5] [c#4,f#4,a4]@4 ~@7 d5, ~@8 d5@17 a5@2 g5 f#5 e5@3, ~ [b3,d4,g4], ~@11 d6 d6@4, ~@23 c#6@9]/2", // D G F#m G
  AC: "[a3,d4,f#4]@6 [b3,d4,g4,d5]@2 ~@7 d5, ~ [c#4,f#4,a4,d5], ~@7 c#5", AD: "[b3,d4,g4] [a#3,d4,g4], d5",
  AE: "~@8 d6@2 ~ [f2,a#5,c#6] [f#2,f#5,a5,c6]@3 f#5, [a3,d4,f#4]@3 ~, ~@5 [e2,b5,d6] ~@2", // A#m F#dim D E7
  AF: "[d5,g5,b5]@8 ~@7 f#4, g2@11 d4@5, ~@2 [d3,g3,b3] ~, ~@5 c#4 ~ e4", // G
  AG: "~@5 d5@3, b3@5 d4@3 f#4 g4@7, g4@3 g3@13, d4 f#3@7, ~ e3@15",
  AH: "a3 ~@9 a5@5 ~, e4@5 a4@3 b4 c#5@6 ~, c#4@2 b3@13 ~, ~ a3@14 ~, ~@3 c#4@12 ~",
  AI: "[a3,d4,f#4]@7 a4 [d4,f#4,a4]@8", AJ: "~@6 c#5@2 [g4,b4,d5]@4 [b4,d5,g5]@3 f#5, [d4,g4,b4] ~",
  AK: "[g4,c5,e5]@8 [c4,e4]@3 [d4,f#4]@3 [e4,g4]@2", // C D Em
  AL: "a3@3 ~ a4 a4@3 [g3,b3,d4]@4 [a3,c#4,e4]@4, [c#4,e4] ~, ~@3 a3@5 ~@8", // G A C#m
  AM: "[d4,g4,b4]@7 [d5,g5,b5] [d5,g5,b5]@3 [d5,f#5,a5] [d5,f#5,a5]@4", AN: "[e4,g4,c5]@2 [d4,g4,b4] [e4,a4,c#5]",
  AO: "~@5 d5 [d5,a5] [d5,g5,b5]@5 [d5,f#5,a5]@4, [d4,g4,b4] ~, ~@5 [g5,b5]@2 ~@9, ~@3 f#5 ~@4", // D5 G D G
  AP: "[[g#4,b4,e5]@6 [e4,a4,c#5]@6 [a4,b4] [c#5,d5] [e5,f#5] g5 ~@5 f5 ~ c5 ~@7 [e4,f5], ~@15 g#5@9 [c5,e5] c4 g4 e4 [c4,c5] [e4,d5] [g4,e5]@2, ~@8 [f5,a5]@2 c5 [a4,f5,a5]@5, ~@16 c5@2 a4@3 f4@2 f4@9, ~@17 c4@2 f4 c4@4 g5@8]/2", // E A Asus2 Dmaj7 Esus2 Fmaj7 C E7 …
  AQ: "~@5 d#5 ~ [d#4,a#4] ~@7 [d4,d#5], [d#5,g5]@3 ~ f5@4, a#4@3 d#4@2 d#4@2 ~ a#4@2 f4@3 [d4,c5]@3, ~ a#3@3 [a#3,a#4]@4 ~ a#3@2 d4 [a#3,a#4]@4, ~ g4@2 [g4,d#5,g5] d5@3 [f4,d5]", // D#5 D#maj7 D# D7 A# Cm Dm
  AR: "~@5 c#5 ~ [c#4,g#4] ~@7 c4, [c#5,f5]@6 ~@2 d#5@3 c4@2 c4@2 ~, g#4@3 c#4@2 c#4@2 ~@3 d#4@4 d#4@2, ~ g#3@3 [g#3,g#4]@4 ~ g#3@3 [g#3,d#5]@4, ~ f4@2 [f4,c#5,f5] [g#4,c5]@4", // C#5 C# G# G#5 C# G#
  AS: "[~@7 a#3 f3 ~@2 f3 a#3 f3 d4 [g4,a#4,d#5]@9 [g4,a#4,d#5]@8, [f4,a#4,d5]@8 [f4,g#4,c5]@4 [f4,a#4,d5]@3 d#4 ~@16, ~ f3@2 a#3@2 a#3@2 ~@2 g#3@3 ~@20, ~ d4@2 d4 ~ c4 ~@10, ~ f3 ~@6]/2", // D# A# Fm A#
  AT: "[g#4,c5,d#5]@7 [d#5,g#5,c6] [d#5,g#5,c6]@3 [d#5,g5,a#5] [d#5,g5,a#5]@4", AU: "[c4,d#4,g#4] [d#4,g4,a#4]",
  AV: "[f4,g#4,c#5]@8 [d#4,g#4,c5]@4 ~@3 f5, ~@3 [f4,a#4,d5], ~@7 d#5", AW: "[a#4,d#5,g5]@2 [d#5,g5,a#5] [g5,a#5,d#6]",
  AX: "~@5 d#4 [d#4,g4,a#4] [d#4,g#4,c5]@5 [d#4,g4,a#4]@4, [d#5,g#5,c6]@7 ~@9, ~@5 [g#4,c5]@2 ~@9", // D# G# D# G#
  AY: "[g4,b4,d5]@3 [g4,c5,d#5]@3 [f4,b4,d#5]@2", AZ: "[g4,a#4,d#5]!2", BA: "[f4,g#4,c#5]@2 [d#4,g#4,c5] [f4,a#4,d5]",
  BB: "[g4,a#4,d#5]@2 a#4!2, ~ [g4,d#5]", // D# Cm
  BC: "[g#4,c5]@5 d#4 [d#4,g4,a#4] [d#4,g#4,c5]@5 [d#4,g4,a#4]@4, d#5@7 ~@9, ~@5 [g#4,c5]@2 ~@9", // G# D# G# D# G#
  BD: "[[g4,b4,d5]@3 [g4,c5,d#5]@3 [f4,b4,d#5]@3 ~@7]/2", // G Cm Fm7b5
})).s("gm_piano").gain(0.31)

// chords · epiano2
const epiano2 = note(`<
  ~@8 A B C D E F G H@2 I J K L M J N O P Q@2 R S R T R T U V E F W X Y Z J K L AA J AB L AC AD AE AF AG@2 AH AI AJ AK
  AL AI AM AN AO AP AJ AQ AR AP AM ~
>`.pickRestart({
  A: "~@3 [b3,g4] [c#4,a4]@4, [a3,f#4] ~", B: "[b3,g4] [a#3,d4,g4]", C: "[a3,f#4]@10 [b4,d5] [a#4,c#5] [f#4,a4,c5]@4",
  D: "[d4,g4,b4]", E: "~@5 d6@3, [b3,g4]@5 d4@3 f#5 g5@7, d4@3 g3@13, ~ e3@15, ~ f#3@7",
  F: "a3 ~@9 a6@6, e4@5 a4@3 b5 c#6@7, c#4 b3@7, ~ a3@15, ~@3 c#4@13",
  G: "a3 ~@2 f#4@5 d4 ~@2 d5@5, d4 e4, f#4 a4@3 a4 a4@3, ~ a3@7 ~ d4@7",
  H: "[b4@2 ~@6 d4 ~@2 g4@5 g4 ~ c5 [c5,e5,g5]@5 [c5,e5]@3 ~@3 [e5,g5]@2, d4@8 ~ d4@15 ~@8, g4@4 g4@7 ~@6 g4@7 ~@8, ~@2 b4@22 ~@3 [d5,f#5]@5, ~@3 e4@2 e4@3 [c4,e4]@4 ~@4]/2", // C Em D C
  I: "a4@3 ~@4 c#5 [g4,b4,d5]@4 [a4,c#5,e5]@4, [c#5,e5]@2 c#5 d5 ~@4, ~@3 a4@5 ~@8, ~@5 e5@3 ~@8", // G A C#m
  J: "[a3,d4,f#4] [d4,f#4,a4]", K: "[d4,g4,b4]@5 ~ d4@2 [d4,g4,b4]@4 [d4,f#4,a4]@4, ~@5 [g4,b4]@3 ~@8",
  L: "[b3,d4,g4] [d4,f#4,a4]", M: "[e4,g4,c5]@8 b4@2 ~ d4 a4@2 ~ c#4, ~@2 [d4,g4] [c#4,e4], ~@5 b4 ~ a4",
  N: "~@5 d5 [d5,f#5,a5] [d5,g5,b5]@5 [d5,f#5,a5]@4, [d4,g4,b4]@7 ~@9, ~@5 [g5,b5]@2 ~@9", O: "[b4,d5,g5] [a4,d5,f#5]",
  P: "[f#4,a#4,c#5]@3 [f#4,b4,d5]@3 [a#3,d4,g4]@2", Q: "[~@2 [g4,b4,d5] [d4,e4,g4,a4], [a3,d4,f#4,a4]@3 ~]/2",
  R: "[a3,d4,f#4]@3 [b3,d4,g4] [c#4,f#4,a4]@4", S: "[b3,d4,g4]@4 g4 ~@2 g4, ~ [a#3,d4], ~@5 g4@2 ~, ~@11 f#4@5, ~@3 e4",
  T: "[b3,d4,g4] [a#3,d4,g4]", U: "[a3,d4,f#4]@10 [b5,d6] [a#5,c#6] [f#5,a5,c6]@4", V: "[d5,g5,b5]@13 ~@3",
  W: "a3 ~@2 f#4@5 ~@3 d5@5, d4!2, f#4@2 a4@6 ~ f#4@7, ~ a3@7 ~@2 a4@6",
  X: "d4@2 ~@4 e4@2 ~@3 b4@5, b4@5 g4@3, g4@4 g4@5 e4@7, ~ d4@3 d4@4",
  Y: "g4 ~@2 g5@5 [c4,e4]@3 [d4,f#4]@3 [e4,g4]@2, c5 ~, e5 e5@3 ~@4, ~ g4@7 ~@8", // C D Em
  Z: "[c#4,e4,a4]@2 [g3,b3,d4,a4] [a3,c#4,e4,a4]", // A G A
  AA: "e4@4 ~ g4 ~ e4 [d4,g4,b4]@4 [c#4,e4,a4]@4, [g4,c5]@3 [g4,c5] ~@4, ~@4 e4@3 ~@9", // G A C5
  AB: "[d4,g4,b4]@2 [d4,g4,b4] [d4,f#4,a4]", AC: "[e4,g#4,b4]@3 [c#4,e4,a4]@3 ~@2",
  AD: "c5@4 ~ f5 ~ c5 c5@4 ~@3 f5, [f5,a5]@3 [f5,a5] g5@4, ~@4 c5@3 ~ e5@5 d5@3, ~@3 c5, ~@7 e5", // F
  AE: "a#4@4 ~ d#5 ~ a#4 a#4@4 ~@3 d#5, [d#5,g5]@3 [d#5,g5] f5@4, ~@4 a#4@3 ~ d5@5 c5@3, ~@3 a#4, ~@7 d5", // D#
  AF: "g#4@4 ~ c#5 ~ g#4 d#5@4 d#5@4, [c#5,f5]@3 [c#5,f5] ~@4, ~@4 g#4@3 ~ [g#4,c5]@8", // C# G#
  AG: "[[f4,a#4,d5]@8 [f4,g#4,c5]@4 [f4,a#4,d5]@3 [g4,a#4,d#5]@9 [d#4,g4,a#4]@8]/2", // A# Fm A# D#
  AH: "[d#4,g#4,c5]@5 ~ d#4@2 [d#4,g#4,c5]@4 [d#4,g4,a#4]@4, ~@5 [g#4,c5]@3 ~@8", AI: "[c4,d#4,g#4] [d#4,g4,a#4]",
  AJ: "f4@4 ~ g#4 ~ f4 c5@2 ~ d#4 a#4@2 ~ d4, [g#4,c#5]@3 [g#4,c#5] ~ c5 ~ a#4, ~@4 f4@3 ~ [d#4,g#4]@4 [d4,f4]@4", // C#5 G#5 Dm
  AK: "[a#3,d#4,g4] [d#4,g4,a#4]", AL: "[d#4,g#4,c5]@5 [d#4,g#4,c5] [d#4,g4,a#4] [d#4,g#4,a#4,c5]@5 [d#4,g4,a#4]@4",
  AM: "[g4,b4,d5]@3 [g4,c5,d#5]@3 [f4,b4,d#5]@2", AN: "[d#4,g4,a#4]!2", AO: "[d#4,g#4,c5]@2 [d#4,g#4,c5] [d#4,g4,a#4]",
  AP: "c4@4 ~ d#4 ~ c4 [d#4,g4,a#4]@8, [d#4,g#4]@3 [d#4,g#4] ~@4, ~@4 c4@3 ~@9", // D# G#5
  AQ: "a#3@5 ~@2 g4 [d#4,g4,a#4]@8, [d#4,g4]@3 d#4 ~@4, ~@5 a#3@3 ~@8", // D#
  AR: "[d#4,g#4,c5]@5 [d#4,g#4,c5] [d#4,g4,a#4] [d#4,g#4,c5]@5 [d#4,g4,a#4]@4", // G# D# G# D#
})).s("gm_epiano2").gain(0.36)

// bass · acoustic bass
const bass = note(`<
  ~@10 A B C D E F G H I J K L I M N O P@2 Q R Q S Q T U V W X Y Z AA X I AB K L I AC K AD AE AF AG AH@2 AI AJ AK AL AM
  AN AO AL AP AQ AK AL AM AR AO ~
>`.pickRestart({
  A: "~@3 f#2", B: "g2@3 f#2", C: "e2", D: "a2", E: "d2 f#2", F: "g2 b2", G: "c3@6 c3 b2", H: "a2@2 a2!2",
  I: "d2@6 e2 f2 f#2@7 f#2", J: "g2@7 g2 g2@4 f#2@4", K: "e2@7 f2 f#2@8", L: "c3@7 d3 g2@4 a2@4",
  M: "g2@6 ~ d3 g3@4 f#3@4", N: "e3@7 f3 f#3@8", O: "a#2@3 b2@3 a#2@2", P: "[d2@5 ~@3]/2", Q: "d2@7 a2 d3@8",
  R: "d2@7 a2 e3@2 f#3 d3@4 a2", S: "d2@7 a2 e3@4 d3@4", T: "d2@7 a2 e3@2 f#3 d3@3 a2@2", U: "d2@7 a2 d3@4 f#2@4",
  V: "g2@7 d2 g2@4 f#2@4", W: "e2@6 ~ b2 e3@6 b2@2", X: "a2@2 a3 a2", Y: "d3 f#2", Z: "g2@6 a2 a#2 b2@6 ~ b2",
  AA: "c3@2 c4 c3", AB: "g2@6 ~ g2 g2@4 b2@4", AC: "g2@6 ~ d3 g3@4 b2@4", AD: "g#2@3 a2@3 g2@2",
  AE: "f3@6 g3 f3 e3@6 c3 d3", AF: "d#3@6 f3 d#3 d3@6 a#2 c3", AG: "c#3@6 d#3 c#3 c3@4 g#2@4",
  AH: "[a#2@7 a#2 a#2@4 a#2@3 d#2@6 ~ f2 f#2 g2@7 g2]/2", AI: "g#2@7 d#2 g#2@4 c3@4", AJ: "f2@6 f2 f#2 g2@8",
  AK: "c#3@7 d#3 g#2@4 a#2@4", AL: "d#2@6 f2 f#2 g2@7 g2", AM: "g#2@7 d#3 g#3@4 c3@4", AN: "f2@6 f2 f#2 g2@7 g2",
  AO: "b2@3 c3@3 b2@2", AP: "g#2@6 ~ g#2 g#2@4 c3@4", AQ: "f2@7 f#2 g2@8", AR: "f2@6 f2 f#2 g2@6 ~ g2",
})).s("gm_acoustic_bass").gain(0.35)

// chords · string ensemble 2
const string_ensemble_2 = note(`<
  ~@18 A B C D E F G H@4 ~@13 I@4 J@2 K L ~@3 M@2 N O P Q N O R Q N O P Q N O R ~
>`.pickRestart({
  A: "[a3,d4,f#4] [d4,f#4,a4]", B: "[g4,b4]@3 [f#4,a4], d4", C: "[b3,d4,g4] [d4,f#4,a4]",
  D: "[e4,g4,c5]@2 [d4,g4,b4] [e4,a4,c#5]", E: "f#5 a5, [d4,f#4,a4]", F: "[g4,b4,b5]@3 [f#4,a4,a5], d4",
  G: "[b3,d4,g4] [d4,f#4,a4], d6", // G D
  H: "[[f#3,a#3,c#4]@3 [f#3,b3,d4]@3 [e4,g6]@2 a6@24, f#6@6 [d4,a4]@5 ~@21, ~@8 f#4@3 ~@21]/4", // F# Bm Em D5
  I: "[[a4,d5]@2 [d4,f#4,a4,a5]@2 [d4,g4,b4,b5]@3 [d4,f#4,a4,a5] [b3,d4,g4,g5]@2 [d4,f#4,a4,a5]@2 [e4,g4,c5,c6]@2 [d4,g4,b4,b5] [e4,a4,c#5,a5], f#5]/4", // D5 D G D G D C G …
  J: "[f#5@2 a5@2 [g4,b4,b5]@3 [d4,f#4,a4,a5], d4@7 ~, [f#4,a4] ~]/2", K: "[b3,d4,g4,g5] [d4,f#4,a4,a5]",
  L: "[e4,b4,b5]@3 [c#4,e4,a4,a5]@5", M: "[~@15 [a#3,d#4,g4,g5]@9 [d#4,g4,a#4,a#5]@8]/2",
  N: "[d#4,g#4,c5,c6]@3 [d#4,g4,a#4,a#5]", O: "[c4,d#4,g#4,g#5] [d#4,g4,a#4,a#5]",
  P: "[f4,g#4,c#5,c#6]@2 [d#4,g#4,c5,c6] [f4,a#4,d5,a#5]", Q: "g5 a#5, [d#4,g4,a#4]",
  R: "[g4,b4,d5,d6]@3 [g4,c5,d#5]@3 [f4,b4,d#5]@2, ~@3 d#6@5", // G Cm Fm7b5
})).s("gm_string_ensemble_2").gain(0.25)

// other · baritone sax
const baritone_sax = note(`<
  ~@18 A@2 B C D@2 E ~@7 F G H@2 ~@6 I@2 J K A@2 L ~@5 M@2 N O P@2 Q ~ R@2 S T U@2 V ~@2
>`.pickRestart({
  A: "[~@2 d3@2 d3 ~ f#3@2 f#3 ~ a3@2 a3@2 d3 d3@2 c3 b2@3 ~@7 d3@2 f#3@2]/2", B: "g3@2 a3@2 ~@2 f#3@3 ~@5 f#3!2",
  C: "g3@3 g3!2 ~@3", D: "[~@2 d3@2 d3 ~ f#3@2 f#3 ~ a3@2 a3@2 d3 d3@2 c3 b2@2 ~@8 d3@2 f#3@2]/2",
  E: "g3@4 a3 ~ f#3@3 ~@7", F: "a3@2 a3 a3@4 ~@7 f#3@2", G: "e3@4 f#3 ~ d3@4 ~@2 d3 e3 f#3@2",
  H: "[f#3@4 ~@4 a3@4 g3@2 f#3 d3@7 ~@10]/2", I: "[~@2 d3@2 d3 ~ f#3@2 f#3 ~ a3@2 a3@2 d3 d3@2 c3 b2@3 ~@9 d3 f#3]/2",
  J: "g3@2 a3@3 ~ f#3@3 ~@5 f#3!2", K: "a3@2 a3 g3@2 ~@3", L: "g3@2 a3 f#3@2 ~@3",
  M: "[~@2 d#3@2 d#3 ~ g3@2 g3 ~ a#3@2 a#3@2 d#3 d#3@2 c#3 c3@3 ~@9 d#3 g3]/2", N: "g#3@4 a#3@2 g3@3 ~@5 g3!2",
  O: "a#3@3 ~ a#3@2 g#3@4 ~@6", P: "[~@2 d#3@2 d#3 ~ g3@2 g3 ~ a#3@2 a#3@2 d#3 d#3@2 c#3 c3@2 ~@8 d#3@2 g3@2]/2",
  Q: "g#3@4 a#3 ~ g3@4 ~@6", R: "[~@2 d#3@2 d#3 ~ g3@2 g3 ~ a#3 ~ a#3@2 d#3 d#3@2 c#3 c3@3 ~@9 d#3 g3]/2",
  S: "g#3@4 a#3 ~ g3@3 ~@5 g3!2", T: "a#3@4 a#3@2 g#3@3 ~@7",
  U: "[~@2 d#3@2 d#3 ~ g3@2 g3 ~ a#3@2 a#3@2 d#3 d#3@2 c#3 c3@3 ~@7 d#3@2 g3@2]/2", V: "g#3@4 a#3@2 g3@3 ~@7",
})).s("gm_baritone_sax").gain(0.35).pan(0.2)

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

// drums · rim
const rim = s("rim").struct("<~@28 [~ x ~ x]!8 ~@35>").gain(0.35)

// drums · snare
const snare = s("sd").struct("<~@18 A@7 ~@17 A@7 ~@5 A@7 B A@7 ~@2>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2",
})).gain(0.4)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@18 A B A C A@3 D ~@2 E@3 F E@3 G ~@6 A@3 C A B A H ~@4 I B A@2 I J A K A B A@2 I J L M ~
>`.pickRestart({
  A: "x!16", B: "x!14 ~ x", C: "x!12 ~ x!3", D: "x ~ x ~ x ~ x ~@2 x!3 ~@4", E: "x!8",
  F: "x ~ x ~ x ~ x ~ x ~ x ~ x!2 ~@2", G: "x ~ x ~ x ~ x ~ x ~ x!3 ~ x ~", H: "x!2 ~@2 x ~@11", I: "~ x!15",
  J: "x!13 ~ x!2", K: "x!9 ~ x!3 ~ x ~", L: "x!13 ~@3", M: "~@3 x",
})).gain(0.15)

// drums · mid tom
const mid_tom = s("mt").struct("<~@17 A ~@23 B ~@3 C ~@7 D ~@7 B ~@9>".pickRestart({
  A: "~@7 x", B: "~@14 x!2", C: "~@15 x", D: "~@3 x",
})).gain(0.35)

// drums · open hat
const open_hat = s("oh").struct("<~@19 A ~ B ~@9 A ~@15 A ~ C ~@5 A ~@3 D ~@3 A ~@3 D ~@3>".pickRestart({
  A: "~@7 x", B: "~@3 x", C: "~@2 x!2 ~@12", D: "~@13 x ~@2",
})).gain(0.15)

// drums · high tom
const high_tom = s("ht").struct("<~@17 A ~@23 B ~@3 C ~@7 D ~@7 E ~@9>".pickRestart({
  A: "~@11 x!2 ~@3", B: "~@12 x!2 ~@2", C: "~@7 x", D: "~@4 x!2 ~@2", E: "~@3 x",
})).gain(0.4)

// drums · crash
const crash = s("cr").struct("<~@45 [~@3 x] ~@7 [~@15 x] ~@7 [~@3 x ~@4] ~@9>").gain(0.2)

// drums · ride
const ride = s("rd").struct(`<
  A ~ A ~ A ~ A ~ A ~ A ~ B@2 C@2 D B ~@7 E F G ~@8 H I J@3 K ~@7 L M N@2 A ~@4 A ~@2 A ~@4 A ~@4
>`.pickRestart({
  A: "x", B: "x ~ x!2 ~ x!3 ~@8", C: "x ~ x!2 ~ x!8 ~ x!2", D: "x ~ x!2 ~ x!4 ~ x!3 ~ x ~", E: "~@3 x",
  F: "x ~@2 x!2 ~@3 x ~@2 x ~@2 x ~", G: "x ~@2 x!2 ~@3 x ~@2 x!2 ~@3", H: "x ~ x!2 ~ x!2 ~ x!3 ~@5",
  I: "x ~ x!2 ~ x!6 ~ x ~@3", J: "x!4 ~ x!7 ~ x!3", K: "x!4 ~ x!3 ~@8", L: "~@12 x!4", M: "x ~@5 x!3 ~@5 x!2",
  N: "x ~@5 x!3 ~@2 x!2 ~@3",
})).gain(0.1)

// … 23 more lines