Strudelify
Don't Let The Sun Go Down On Me cover art

Ladies & Gentlemen

Don't Let The Sun Go Down On Me

Michael George

KeyC majorTempo70 bpm
0:00/0:00
// Don't Let The Sun Go Down On Me — Michael George
// 70 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 96 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.

// bass · fretless bass · "FRETLESS"
const bass = note(`<
  ~@19 A B C D E F G H I H J K E F G L M N O P Q R S T O U V W ~@2 X Y Z AA AB AC AD AE AF AG AH AI AJ AK AL AM AN N O P
  Q R S T O U V AO AP AQ AR N O P Q R S T O U V AS AT AU AV AW@2
>`.pickRestart({
  A: "~@10 d3 g2@3 d2@2", B: "g1@15 g1", C: "g1@2 b1 d2", D: "c2@15 c2", E: "c2@3 e1", F: "f1@13 ~ f1 ~",
  G: "f1@2 a1 c2", H: "g1@14 ~ g1", I: "g1@11 ~ f2 e2 d2@2", J: "g1@8 b1@3 ~ d2@3 ~", K: "c2@14 ~ c2",
  L: "g1@10 g1!2 g1@2 g1!2", M: "g1@5 ~ g1!3 ~ g1@2 a1@2 b1@2", N: "c2@5 ~ c2 ~ c2@5 ~@2 a1, ~@7 g1",
  O: "a#1@5 ~ a#1 ~ a#1@5 ~ c2 a#1", P: "a1@5 ~ a1 ~ a1@6 g1@2", Q: "f#1@5 ~ f#1 ~ f#1@5 ~ f#1@2",
  R: "g1@5 ~ g1 ~ g1@6 g1!2", S: "g1@5 ~ g1 ~ g1@5 ~ b1@2", T: "c2@5 ~ c2 ~ c2@5 ~ d2 c2",
  U: "~@12 g2 f2@2 e2, a1@15 ~", V: "d2@2 e2 f2 g2@2 g1@2", W: "c2@11 ~@5", X: "~@12 d2 c2 b1 a1",
  Y: "g1@6 g1 ~ g1@7 g1", Z: "g1@6 g1 ~ g1@4 d2@4", AA: "c2@5 ~ c2 ~ c2@6 ~ c2", AB: "c2@5 ~ c2 ~ c2@4 e1@4",
  AC: "f1@5 ~ f1 ~ f1@6 c2@2", AD: "f1@5 ~ f1 ~ f1@4 c2@2 f1@2", AE: "g1@6 g1 ~ g1@7 d2",
  AF: "g1@5 ~ g1 ~ g1@2 c2@2 b1@2 a1@2", AG: "g1@6 ~ g1 g1@5 g1 d2@2", AH: "g1@6 ~ g1 g1@4 ~ g1 d2@2",
  AI: "c2@5 ~ c2 ~ c2@6 g1@2", AJ: "c2@6 ~ c2 c2@4 e1@4", AK: "f1@6 f1 ~ f1@6 f1 ~",
  AL: "f1 ~ f1@3 ~ f1 ~ f1@4 f1 ~ f1@2", AM: "g1@6 ~ g1 g1@7 g1", AN: "g1@7 ~ g1@3 g1 g#1@2 b1@2", AO: "c2@13 ~ c2@2",
  AP: "a#1@6 a#1 ~ a#1@6 a#1@2", AQ: "a1@6 a1 ~ a1@5 ~ a1@2", AR: "g#1@2 a#1!2", AS: "c2@5 ~ c2!2 c2@4 c2@2 c2!2",
  AT: "a#1@3 ~ a#1@3 ~ a#1@3 a#1!5", AU: "a1@6 a1 ~ a1@2 a1 ~ a1!4", AV: "a1 g#1@4 ~ g#1@5 a#1@4 ~",
  AW: "[a#1@5 ~ c2@25 ~]/2",
})).s("gm_fretless_bass").gain(0.28)

// chords · piano · "A.PIANO 1"
const piano = note(`<
  A B C D E F G@2 H I J K L M N O P Q R S T U V@2 W X Y Z AA AB AC AD AE AF@3 AG AH AI AJ AK AL AM@2 AN AO AP AQ AR AS
  AT AU AV AW AX AY AZ@2 BA BB@2 BC BD BE BF BG AG AH AI AJ AK AL AM@2 AN AO BH BI BJ BK AG AH AI AJ AK AL AM@2 AN AO BL
  BM BN BO BP@2
>`.pickRestart({
  A: "~@14 d5 c5, c3, e5@10 g4 c5 f5 e5@2 ~, [g4,c5] c4, ~@4 e4@11 ~", // C5
  B: "~@3 a#3 a#3@2 [a#3,c5] c4, [a#2,g4,f5], a#3@3 ~@5, ~@2 e5@13 ~, ~ c5@2 ~", // A#sus2 Gm7
  C: "f4@4 f4@2 [a2,a3]@2 c4@4 c4@2 [e4,g4,c5] ~, [a2,a3,c4]@7 ~ [g2,g3,e4,g4,c5]@6 [g2,g3]@2", // A C Am C G
  D: "c4@4 c4@4 [a3,c4,f4,a4]@3 ~ [d2,d3] [c2,c3] [b1,b2] [a1,a2], [f2,f3]@5 ~@3, [a3,f4,a4]@2 ~ [a3,d4,f4,a4]", // F D C B A F Dm
  E: "[b3,d4]@4 ~@2 g2 [g2,g3], g1@7 ~, g2@3 ~, ~@8 [b3,d4,g4]@6 [c4,e4] ~", // Bm G C
  F: "g2@2 g2!2 g2@2 g2@2, [g1,g3]@7 ~, [b3,d4,f4]@4 [b3,d4,f4]@3 ~", // G Bdim
  G: "[c3@6 c3 ~@6 g3 ~@2 [c3,f3,a3]@2 [c3,e3,g3]@4 [c3,c4] ~ c4@2 ~ e4!2 d4 c4@2, [c4,f4,a4]@4 [c3,c4,e4,g4]@3 [c3,c4] ~@4 [c2,c3,c5]@2 [e2,c3,g3]@2, ~@12 f3@2 ~ g3@3 ~@5 e4@3 c4@3 ~@3]/2", // F C F C
  H: "f3@6 f3@2 f3@4 f3@3 ~, [f2,c3]@15 ~, a3 [a3,c4,f4]", I: "~@4 f3@4 [f3,a3,c4]@4 [f3,a3,c4,f4]@3 ~, f2@15 ~",
  J: "~@6 g2@2 ~@3 g3 ~ b3 [g3,c4] b3, g3@5 d3@2 ~, [b3,d4,g4]@4 [b3,d4,g4]@3 ~, ~@4 g2@2 [g2,e3,g3,c4] [g2,e3]", // C5 G C
  K: "g2@3 g2 g2@2 ~ g2, [b2,d3]@13 e3@3, g3@6 [g2,g3,c4] ~", // Bm C5
  L: "~@4 g2@4 g2@4 ~ g3 g2 g3, [d3,b3]@4 [d3,b3,d4,g4]@3 ~, g2@2 ~@4 g2 ~, ~@2 [d4,g4]@6 ~@5 [c4,e4]@2 ~", // G G5 C
  M: "~@2 g2!2, [g2,f3,b3,d4] [f3,b3,d4], ~@4 g3@11 ~", // G7 Bdim
  N: "c3@4 c3@4 ~@4 [a4,f5,a5]@2 [c3,g4,g5] ~, [c4,f4,a4]@4 [c3,g3,c4,e4]@3 e5", // Dm C5 F C
  O: "c5 [g4,c5,e5]@2 [c4,f4] ~ f4 e4 d4, [c3,a4,f5]@6 [c3,a4] ~ [c2,c3,c4,e4,g4]@4 [e2,c3,g3,a#3]@4", // C F5 F C C7
  P: "[f2,a3]@6 [f2,a3,f4] [a#3,d4], [c3,c4]@14 f2 ~", Q: "[f2,a3,c4,f4]@2 [f2,c3,a3,c4,f4]!2",
  R: "g2@3 g2 ~ g3 ~ [c4,e4], [d3,b4], [d4,g4]@8 [b3,d4,g4]@7 ~, ~@8 g2@4 [g2,c4,e4]@2 g2 ~, ~@13 g3@2 ~", // C G G5 G C
  S: "g2@4 g2@2 g2@6 ~@2 [g2,a3] ~, f3@7 c4, [b3,d4]@12 [g2,c4,e4]@3 ~, ~@13 [b3,d4]@2 ~", // Gsus2 Bm C Bm
  T: "~@12 [e3,g3,c4]@3 g3, [f3,b3,d4], g3@3 ~, ~@5 d3@3", U: "[f3,g3,b3,d4]@8 d4@4 d4@3 ~, ~@8 [f3,g3,b3]@7 ~",
  V: "[~@12 [a4,f5,a5]@2 ~ c4 c5@2 [g4,c5,e5]@4 g3 ~@3 d4@2 g3@2 a#3@2, g4@14 g5@9 ~@9, [g3,c4,e4]@8 [g3,c4,e4]@6 [g4,e5]@4 ~@7 e4@3 ~@4, ~@2 c3@5 ~ [c4,a4,f5]@4 [c3,g3,c4,f4]@2 [e3,c4]@2]/2", // Dm C F Csus4 C
  W: "~@2 f4@6 f4@4 f4@2 [d4,e4,f4,a#4] ~, [f3,c4]@15 ~, a3@8 a3@7 ~", // A# F5
  X: "[f3,c4,f4,a4]@8 [f2,f3,c4,f4,a4]@4 ~ [e4,g4]@2 ~, g4 ~@11 [c3,c4]@4", // F Em C
  Y: "b4@6 ~@2 g4@4 [c4,e4] ~@2 [g2,g3], [g2,g3]@7 ~, d4@6 ~ [c4,e4], ~@3 b4@3 ~@2", // C G C
  Z: "[g3,b3,d4]@6 g3 ~ [g3,b3,d4]@4 [f3,g3,b3] [e3,g3] [d3,a3,c4]@2, g2@3 ~", // G G7 Em D7
  AA: "d4@6 ~@6 g2@2 [e3,g3,c4] g2, b3@7 ~, g2@3 ~, ~@3 [d4,a4,c5]@4 ~, ~@4 [g4,b4,d5]@3 ~", // C D7 G
  AB: "~@6 g4@2 [b2,d4,g4,b4]@4 [d3,d4,g4,b4]@3 ~, [g2,d3,f3,b3] ~", // G G7
  AC: "[c4,f4,a4]@7 ~ [c4,e4]@4 ~@2 [c4,e4] c3, c3@15 ~, ~@8 g4@7 ~, ~@6 [c4,e4] ~, ~@13 g3@2 ~", // F C
  AD: "[f3,a3]@2 ~@6 [e4,g4,e5]@2 d5 ~@3 [g4,a#4]@2, c3@3 ~, ~@2 [e3,g3]@9 ~ [e3,c4,c5]@4, ~@6 [f4,a4,f5]@5 ~@5", // F Em Gm Em C F
  AE: "[c4,f4,a4]@8 ~@5 [a#3,g4] [f3,a3,f4] ~, f3@6 f3 ~, ~@4 [c4,f4,a4]@3 ~", // F D# F
  AF: "[a3@8 ~@6 g3@2 g3@6 g3@2 g3@4 g3@3 ~ g3@4 g3@3 g3 [g3,a3,c4,f4]@2 g3@2 a3 ~ b3@2, f3@7 e4@5 ~@10 [f4,a4,c5]@2, [c4,f4]@12 [c4,f4]@4 ~@8 [c4,e4,g4]@7 [b3,d4]@12 ~@5, ~@8 a3@7 ~@30 a3@2 ~]/3", // F F5 C Bm
  AG: "~@6 c3@2 ~@4 [e4,g4,d5]@2 g3 a3, c4@15 ~, [g4,c5,e5]@4 e5@4 g4@2 e5@5 ~, ~ e4@2 e4@3 ~ c5, ~@4 [g4,c5]@4 [c3,c5,f5]@7 ~", // Em7 C C5 F5
  AH: "~@6 a#2@2 ~@2 e4@2 [c4,e4,g4]@2 c4 a#3, [a#3,f5]@7 ~, [g4,c5] e4 g4 ~, ~ e5@6 ~, ~@2 [g4,c5]@2 [a#2,c5]@3 ~", // C A#5 C5 A#sus2
  AI: "[c4,e4]@4 [c4,e4,a4]@2 a2 ~ e4@4 [a3,c4,e4]@2 g3@2, a3@7 ~ [a2,a4,c5]@7 ~", // C Am
  AJ: "~@2 d5@2 [f#4,a4,d5]@2 [f#2,c5] ~@5 c5@2 f#3@2, [f#3,d#5]@6 ~@2 [f#2,f#4,a4,d5]@7 ~, [f#4,a4] ~@3", // D F#dim D#m D F#m
  AK: "[c4,e4]@4 [c4,e4,g4]@2 g2 ~@3 e4@2 [c4,e4]@2 g3!2, g3@7 ~ g2@7 ~, ~@2 [c4,f4] ~", // C F5
  AL: "[c4,f4,a4]@4 [c4,f4,a4]@2 g2 ~@5 a3@2 b3@2, g3@7 ~ [g2,b3,d4,f4]@7 ~, ~@10 g3@5 ~", // F G7
  AM: "[[e4,g4]@4 [e4,g4,c5]@2 c3 ~ [c4,e4]@4 [c4,e4,g4]@2 d4 ~ [e4,g4]@4 [c4,e4,g4]@2 [a#2,c4] ~ [g3,a#3,d4]@4 [g3,a#3,c4,e4]@2 c4 a#3, c4@7 ~ [c3,g3]@7 c4@5 ~@12, ~@16 a#3@7 ~ a#2@7 ~]/2", // Em C Em C A#sus2 Gm C7 C5
  AN: "[a3,c4,f4]@11 ~ [g3,g4] [f3,f4]@2 [e3,e4]", // F G F E
  AO: "[d3,d4,a4,d5,f5]@3 ~ [e3,e4,g4,c5,e5]@2 [f3,f4,a4,c5] ~ g3@4 ~@2 c5@2, ~ [e4,g4], ~@4 c5@3 ~, ~@3 [g2,g3,f4,a4,d5]", // Dm C F Em Dm
  AP: "[g4,c5]@10 ~@5 c5, [c2,c3,c4,e4]@13 e5@2 ~, ~@5 g4@2 [c3,c4,d5], ~@11 c5@4 ~, ~@12 f5@3 ~", // C5 C Csus2
  AQ: "~@13 d5 [a#2,a#3]@2, [g4,f5]@5 g4 e5 ~, [a#2,a#3]@4 [a#2,a#3]@3 ~, ~@2 e5@9 f5@3 ~@2, ~@4 c5@10 c5 ~", // A# G7 A#
  AR: "[f4,a4,c5]@2 [f4,a4,c5] [a2,a3] [e4,g4,c5]@2 [e4,g4,c5] [g2,g3], [a2,a3]@3 ~ [g2,g3]@3 ~", // F A C G A G
  AS: "[c4,f4,a4]@4 ~@2 [f2,f3] ~ [f2,f3,c4,f4,a4]@4 [d3,d4] [c3,c4,c5] [b2,b3,b4] [a2,a3,a4], [f2,f3]@3 ~@5, ~@2 [c4,f4,a4]@2 ~@2 d5 ~", // F D C B A F
  AT: "[b3,d4,g4]@4 ~@2 g3@2 g3@4 g3@2 ~ [g3,c4,e4], g3@3 ~@5, ~@4 [b3,d4,g4]@9 ~@3", // G C G
  AU: "[g3,b3,d4,f4]@6 g3 ~ d4@4 d4@4, ~@8 [g3,b3,f4]@7 ~", // G7
  AV: "e4@4 e4@2 c4 ~@5 [g4,c5,e5]@2 [g4,d5,f5] c4, [c4,g4]@7 ~ [g3,c4,e4]@7 ~", // C G7 C5 C
  AW: "c4@2 c4@4 ~ [f4,d5] [c3,e4,c5]@4 [a#3,g4,a#4] [c4,g4]@3, g5@8 ~@5 c5 ~@2, [g4,e5]@3 [c4,g4,e5] ~@2 e3@2", // Dm C D# C5 C
  AX: "f3@3 f3 [c4,f4,a4]@2 [f4,a4,c5] [c4,f4,a4], [c4,f4,a4]@8 f3@6 d5 ~", // F
  AY: "f3@6 f3 ~@5 c4@2 f3@2, [f4,a4,c5]@8 [f3,f4,a4,c5]@7 ~", // F
  AZ: "[[d4,g4,b4]@6 f3@2 e4@4 [g3,c4,e4]@2 ~@2 [f3,b3]@2 f3@2 [f3,a3,c4]@2 [f3,g3,c4] ~ [f3,g3,b3]@2 [f3,a3]@2 [f3,a3,b3]@2 [a3,c4]@2, g3@6 ~ d4@2 [b3,d4]@2 a3 ~ c4@2 ~, ~@16 g3@6 ~@8 f3 ~]/2", // G C Fdim F Fsus2 G7 F Bm7b5 …
  BA: "[b3,d4]@2 [b3,d4]@2 g3@2 ~ d3, g3@8 [b3,d4]@7 ~, ~@12 g3@3 ~, ~@13 [e4,g4,c5]@3", // Bm C
  BB: "[~@4 [g4,d#5,g5]@2 [a4,f5,a5] ~@5 d4@3 ~ c4@8 g4@4 ~ [f4,d5] [g3,e4,c5]@2, [g3,d4,f4,b4]@7 ~ [g3,f4,b4,e5]@7 [g4,c5]@9 [c4,c5]@6 ~@2, ~@4 e5 ~@5 g5@4 ~ e5@13 [g4,e5]@2 ~@2]/2", // Cm Dm C G7 Em C5 C
  BC: "[g4,c5,e5,g5]@2 [f5,a5] ~@3 c5 ~@6 d4 ~ a#3, c4@6 g4@5 f4@3 ~@2, ~@2 c5@3 [e5,f5]@2 ~ c4@6 c4@2, ~ a4 [g4,g5] e4@2 e4 [c3,g4]@2, ~@6 e4 ~", // C F Fmaj7 G C5
  BD: "[f3,f4]@8 [f3,c4,f4,a4]@6 [f3,c5,e5] [a#4,d5], a3@15 ~", // F Fmaj7 A#
  BE: "f3 f3@2 f3 ~ [c4,a4] ~ f3, c5@7 ~, a4@5 ~ f3 ~, ~@3 a3@4 ~, ~@8 [f3,f4]@5 [c4,f4,a4]@2 ~", // F
  BF: "[g3,e4,g4,c5]@6 e5 ~ g3@4 g3@2 [g4,c5,e5] g3, ~@3 [g4,c5] [g4,c5,e5]@3 ~, ~@7 f5@8 ~", // C C5 C
  BG: "~@4 g3@3 g3 [g3,d4,f4,b4]@3 g3 [a3,c4]@2 [b3,d4]@2, [g4,b4,e5]@7 ~@5 f4@4, g3 ~@3, ~ d5@6 ~@9", // G7 Am Bm Em
  BH: "[g4,c5]@10 ~@5 c5, [c3,c4,e4]@13 e5@2 ~, ~@5 g4@2 [c4,d5], ~@11 c5@4 ~, ~@12 f5@3 ~", // C5 C Csus2
  BI: "~@13 d5 a#3@2, [g4,f5]@5 g4 e5 ~, a#3@4 a#3@3 ~, ~@2 e5@9 f5@3 ~@2, ~@4 c5@10 c5 ~", BJ: "[a3,f4,a4,c5]!4",
  BK: "[f4,g#4,c5]@4 ~@2 g#3 ~ [a#3,f4,a#4,d5]@4 [a#3,f4,a#4,d5]@4, g#3@3 ~@5, ~ [f4,g#4,c5] ~@2", // Fm A# Fm
  BL: "[c4,e4,g4]@3 ~ [c4,e4,g4]@3 ~ [c4,e4,g4]@4 [c4,e4,g4]@3 ~", // C
  BM: "[a#3,c4,e4,g4]@4 [a#3,c4,e4,g4]@3 ~ [a#3,c4,e4,g4]@4 [a#3,c4,e4,g4]@3 ~", // C7
  BN: "[a3,c4,f4]@4 [a3,c4,f4]@4 [a3,c4,f4]@4 ~ [a3,c4,f4]@3", BO: "~ [g#3,c4,d#4]@4 ~ [g#3,c4,d#4]@5 [a#3,d4,f4]@5",
  BP: "[[a#3,d4,f4]@5 ~ [e4,g4]@22 ~@4, ~@3 c4@10 ~@3]/2", // A# Em
})).s("gm_piano").gain(0.22).pan(0.4)

// other · trombone
const trombone = note(`<
  ~@35 A B C D E F@2 G C ~ H I ~@17 J K B C D E F@2 G C L M N O P Q N R P S T U N V W M X Y Z AA@3
>`.pickRestart({
  A: "g2@15 ~", B: "c3@8 c3@7 ~", C: "a#2@7 ~ a#2@7 ~", D: "a2@7 ~ a2@7 ~", E: "f#2@7 ~ f#2@6 ~@2", F: "g2@7 ~ g2@7 ~",
  G: "c3@7 ~ c3@7 ~", H: "d3@3 ~ e3 ~ f3 ~ g3@3 ~ g2@3 ~", I: "c3@11 ~@5", J: "[g2,c3]", K: "b2 f3, d3",
  L: "~@12 g3 f3 ~ e3", M: "d3@2 e3 f3 g3@2 g3@2", N: "c3@9 ~ e3 ~ d3 ~ c3 ~", O: "a#2@15 ~", P: "a2@7 ~",
  Q: "g#2@7 ~ a#2@8", R: "a#2@13 ~@3", S: "f#2@13 ~@3", T: "g3@15 ~", U: "g3!2", V: "a#2@9 ~ e3 ~ d3 ~ c3 ~",
  W: "a2@7 ~@5 g3 f3 ~ e3", X: "~@9 e4 ~ c4 f4 e4 d4 c4, c3@15 ~", Y: "f4 ~ e4 ~ c4@6 ~@2 d4 ~ e4 ~, a#2",
  Z: "c4@7 ~@2 g3 ~ c4 d4 f4 e4 d4, a2", AA: "[c4 f4 ~@2 d#4 ~ c4@4 ~ [a#2,d4]@10 ~ [c3,e4]@24 ~@2, ~ g#2@9 ~@38]/3",
})).s("gm_trombone").gain(0.19)

// other · trumpet
const trumpet = note("<~@64 A B ~ C D ~ E@2 F G H I J@2 K L M@3 N M O M@2 P@2 Q R S T@3>".pickRestart({
  A: "c4", B: "~ f4, d4", C: "~@10 a5 g5 f5 e5 d5 e5", D: "c5@3 ~", E: "[~ c5 e5 c5 ~ c5 e5 a4@3 c5@2 b4@4]/2",
  F: "g5@2 g5 c5", G: "g5@7 ~ g5@4 c5@4", H: "~@12 a4 c5 ~ a4", I: "d5@2 e5 f5 g5@2 g5@2", J: "~ c5 d5 c5 g5@2 c5@2",
  K: "f5@6 e5 d5", L: "f5@15 ~", M: "g5@15 ~", N: "f#5@7 ~", O: "a5@8 g5@7 ~",
  P: "[f5@7 ~@5 a4 c5 ~@2 d5@4 e5@2 f5@2 g5@4 g5@4, ~@15 a4@2 ~@15]/2", Q: "~@9 e5 ~ c5 f5 e5 d5 c5",
  R: "f5 ~ e5 ~ c5@6 ~@2 d5 ~ e5 ~", S: "c5@7 ~@2 g4 ~ c5 d5 f5 e5 d5",
  T: "[c5 f5 ~@2 d#5 ~ c5@4 ~ d5@9 ~@2 e5@24 ~@2]/3",
})).s("gm_trumpet").gain(0.21).pan(0.3)

// other · french horn · "FR.HORN"
const french_horn = note(`<
  ~@34 A B C@3 D C E C F ~@22 C@3 D C E G H ~@2 G H I J K L M N O P Q R S ~ T U V W@3
>`.pickRestart({
  A: "~ c4", B: "d4@8 f4@7 ~", C: "e4@15 ~", D: "d4@15 ~", E: "f4@8 d4@7 ~", F: "e4", G: "~ c4 d4 c4 g4@2 c4@2",
  H: "~ c4 d4 c4 a#4@2 c5@2", I: "a4@15 ~", J: "g#4@7 ~ a#4@8", K: "~@5 e5 d5 c5", L: "g5@4 ~ c5 d5 e5",
  M: "c5@4 ~ e5 d5 c5", N: "f#5@11 ~@5", O: "~@5 c5 d5 e5", P: "a4@8 g4@7 ~", Q: "~ c5 d5 c5 g5@2 c5@2",
  R: "~ c5 d5 c5 a#5@2 c6@2", S: "a5 ~", T: "g4@15 ~", U: "g4", V: "a4", W: "[~ c5@9 ~ d5@11 e5@24 ~@2]/3",
})).s("gm_french_horn").gain(0.18).pan(0.4)

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

// drums · kick · soft notes
const kick_soft = s("bd").struct(`<
  ~@36 A ~@15 B A ~@7 C ~@2 D ~ A@3 C ~ A ~ A ~@3 A ~@2 A@3 C ~ A ~ A ~@2 A@3 E ~@2
>`.pickRestart({
  A: "~@3 x ~@4", B: "~ x ~@6", C: "x", D: "~ x", E: "~ x ~@14",
})).gain(0.14)

// drums · snare
const snare = s("sd").struct(`<
  ~@20 A@15 B C@8 ~ D ~@4 E A@6 B C@3 F C@3 G C@8 ~ D C H A I C@8 ~ D ~@3 J ~@2
>`.pickRestart({
  A: "~@3 x", B: "~@5 x ~@2", C: "~ x ~ x", D: "~@8 x ~@2 x ~@4", E: "~ x ~@2", F: "~@4 x ~@6 x ~@4",
  G: "x ~@3 x ~@6 x ~@4", H: "~@4 x ~@3 x ~@2 x ~@4", I: "~@6 x ~ x!2 ~@2 x ~@3", J: "~@11 x ~@2 x ~",
})).gain(0.23)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@65 [~ x ~ x ~ x ~ x!4 ~@5] ~@13 [~@11 x ~@4] ~@16>").gain(0.09)

// drums · low tom
const low_tom = s("lt").struct("<~@35 A ~@9 B ~@11 A ~@3 A ~@3 C ~@9 B ~ B ~@11 B ~@4 D ~>".pickRestart({
  A: "~@7 x", B: "~@6 x!2", C: "~@13 x!3", D: "~@3 x ~@12",
})).gain(0.28)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@5 A ~@4 B ~@9 B@4 ~@8 A ~@13 A ~@3 C D E F G@2 H I H J G K H L E ~@13 M N ~@16
>`.pickRestart({
  A: "~ x ~@2", B: "~@3 x", C: "~@2 x ~@2 x ~ x", D: "x!2 ~@3 x ~ x", E: "x!2 ~ x ~ x ~ x", F: "~ x ~@3 x ~ x",
  G: "~ x ~ x ~ x ~ x", H: "~ x ~ x!3 ~ x", I: "~ x ~ x!2 ~@3", J: "x!2 ~ x!3 ~ x", K: "~ x ~ x ~@4",
  L: "~ x ~ x ~ x ~@2", M: "~ x ~ x!4 ~", N: "~ x!2 ~",
})).gain(0.05)

// drums · mid tom
const mid_tom = s("mt").struct("<~@35 A ~@21 B ~@3 B ~@3 C ~@13 D ~@14 E ~>".pickRestart({
  A: "~@13 x ~@2", B: "~@3 x", C: "~@12 x!2 ~@2", D: "~@13 x ~ x", E: "~ x ~@6",
})).gain(0.28)

// drums · high tom
const high_tom = s("ht").struct("<~@94 x ~>").gain(0.23)

// drums · crash
const crash = s("cr").struct(`<
  ~@36 A ~@2 B A ~@3 A C A ~@3 A ~@7 A ~@3 A ~@3 A ~@2 B A ~@3 A C A ~ D A@2 ~@2 B A ~@3 A C A D A E F ~
>`.pickRestart({
  A: "x", B: "~@7 x", C: "x!2 ~@2", D: "x ~@6 x", E: "~ x ~@4 x ~@9", F: "~@3 x ~@4",
})).gain(0.23)

// … 38 more lines

More by Michael George