Strudelify
Something Happened on the Way to Heaven cover art

1989 · ...But Seriously

Something Happened on the Way to Heaven

Phil Collins

KeyE♭ majorTempo125 bpm
0:00/0:00
// Something Happened on the Way to Heaven — Collins Phil
// 125 bpm, 4/4, key D# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 6/4 at bar 10, 4/4 at bar 12, 6/4 at bar 95, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 139 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(125/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 · "E.Bass/Sl"
const bass = note(`<
  A B C D E B C D F G H@3 I H@3 J H@2 K L H@3 M H@3 J H@2 K L H N O P O Q O P R S H@3 I H@3 J H@2 K L H@3 N O P O Q O P
  R S O P O Q O P R S T U V W X U V Y Z AA AB D AC AA AB D AC AD AE AF@3 AG AF@2 AH AI AF@2 AJ AK@7 AL@8 AM@5 AN@4 AO@4
  AP@5
>`.pickRestart({
  A: "~@8 c3@2 c2 c3 c2@2 c3 c2", B: "c3@2 c2 c3 c2@2 c3 c2 ab2@2 ab2!2 ab2@2 ab2!2",
  C: "ab2@2 ab2!2 ab2@2 ab2!2 bb2@2 bb2!2 bb2@2 bb2!2", D: "bb2@2 bb2!2 bb2@2 bb2!2 bb2@2 bb2!2 bb2@2 bb2!2",
  E: "g2@2 g2!2 g2@2 g2!2 c3@2 c2 c3 c2@2 c3 c2", F: "g2@2 g2!2 g2@2 g2!2 g2@2 g2!2 g3@2 g2!2", G: "g3!4 g2 g3 g2 ~",
  H: "ab2@2 eb2@2 ab2@2 bb2 ~ bb2@2 f2@2 c3@2 bb2@2", I: "ab2@2 eb2@2 ab2@2 bb2@2 ~@2 bb3 ~ bb3@3 ~",
  J: "ab2@2 eb2@2 ab2@2 bb2 ~ bb2@2 eb2@2 f2@2 g2@2", K: "ab2@2 eb2@2 ab2@2 bb2 ~ bb2 ~ bb2@2 ab2@2 g2@2",
  L: "f2 ~ f2 ~ f2 ~ f2@2 c3@2 c2@2 c3@2 c2@2", M: "ab2@2 eb2@2 ab2@2 bb2@2 ~@2 bb3 ~ bb3@4",
  N: "ab2@2 eb2@2 ab2@2 bb2@2 bb2 ~ bb2@2 c2@2 d2@2", O: "eb2 f2 g2 ab2@2 g2 f2 eb2", P: "bb2 c3 d3 eb3@2 d3 c3 bb2",
  Q: "bb2 c3 d3 c3@3 bb2@2", R: "c3 eb3 g3 f3@2 eb3 c3 ab2", S: "bb2@2 f2@2 bb2@2 c3@6 bb2@3 ~",
  T: "f2 ~ f2 ~ f2 ~ f2 ~ f2 ~ f2 ~ f2 ~ f2 f3", U: "g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2@2",
  V: "ab2 ~ ab2 ~ ab2 ~ ab2 ~ ab2 ~ ab2 ~ ab2 ~ ab2@2", W: "c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3@2 bb2@2",
  X: "f2 ~ f2 ~ f2 ~ f2 ~ f2 ~ f2 ~ f2 ~ f2@2", Y: "bb2 ~ bb2 ~ bb2 ~ bb2 ~ bb2 ~ bb2 ~ bb2 ~ bb2@2",
  Z: "bb3@3 bb2@10 ~@3", AA: "c3@2 c2 c3 c2@2 c3 c2 c3@2 c2 c3 c2@2 c3 c2",
  AB: "ab2@2 ab2!2 ab2@2 ab2!2 ab2@2 ab2!2 ab2@2 ab2!2", AC: "bb2@2 bb2!2 bb2@2 bb2!2 g2@2 g2!2 g2@2 g2!2",
  AD: "g2@2 g2!2 g3@2 g2!2 g3@2 g3@2 g3@2 g3@2", AE: "g2@2 g3@2 g2@2 ~@2 ab2@2 eb2@2 ab2@2 bb2 ~",
  AF: "bb2@2 f2@2 c3@2 bb2@2 ab2@2 eb2@2 ab2@2 bb2 ~", AG: "bb2@2 eb2@2 f2@2 g2@2 ab2@2 eb2@2 ab2@2 bb2 ~",
  AH: "bb2 ~ bb2@2 ab2@2 g2@2 f2 ~ f2 ~ f2 ~ f2@2", AI: "c3@2 c2@2 c3@2 c2@2 ab2@2 eb2@2 ab2@2 bb2 ~",
  AJ: "bb2 f2 c3 bb2 ab2 eb2 ab2 bb2",
  AK: "[bb2 ~ bb2@2 c2@2 d2@2 eb2@2 f2@2 g2@2 ab2@4 g2@2 f2@2 eb2@2 bb2@2 c3@2 d3@2 eb3@4 d3@2 c3@2 bb2@2 eb2@2 f2@2 g2@2 ab2@4 g2@2 f2@2 eb2@2 bb2@2 c3@2 d3@2 c3@6 bb2@4 eb2@2 f2@2 g2@2 ab2@4 g2@2 f2@2 eb2@2 bb2@2 c3@2 d3@2 eb3@4 d3@2 c3@2 bb2@2 c3@2 eb3@2 g3@2 f3@2]/7",
  AL: "[~@2 eb3@2 c3@2 ab2@2 bb2@2 f2@2 bb2@2 c3@6 bb2@3 ~ eb2@2 f2@2 g2@2 ab2@4 g2@2 f2@2 eb2@2 bb2@2 c3@2 d3@2 eb3@4 d3@2 c3@2 bb2@2 eb2@2 f2@2 g2@2 ab2@4 g2@2 f2@2 eb2@2 bb2@2 c3@2 d3@2 c3@6 bb2@4 eb2@2 f2@2 g2@2 ab2@4 g2@2 f2@2 eb2@2 bb2@2 c3@2 d3@2 eb3@4 d3@2 c3@2 bb2@2 c3@2 eb3@2 g3@2 f3@2]/8",
  AM: "[~@2 eb3@2 c3@2 ab2@2 bb2@2 f2@2 bb2@2 c3@6 bb2@3 ~ eb2@2 f2@2 g2@2 ab2@4 g2@2 f2@2 eb2@2 bb2@2 c3@2 d3@2 eb3@4 d3@2 c3@2 bb2@2 eb2@2 f2@2 g2@2 ab2@4 g2@2 f2@2 eb2@2 bb2@2 c3@2 d3@2 c3@2]/5",
  AN: "[~@2 c3@2 bb2 ~ bb2@2 eb2@2 f2@2 g2@2 ab2@4 g2@2 f2@2 eb2@2 bb2@2 c3@2 d3@2 eb3@4 d3@2 c3@2 bb2 ~ c3@2 bb2@2 g2@2 f2@4 g2@2 ab2@2 ~@2 bb2@2 c3@2 d3@2 c3@2]/4",
  AO: "[~@2 c3!2 bb2 ~ bb2@2 eb2@2 f2@2 g2@2 ab2@4 g2@2 f2@2 eb2@2 bb2@2 c3@2 d3@2 eb3@4 d3@2 c3@2 bb2@2 eb2@2 f2@2 g2@2 ab2@4 g2@2 f2@2 eb2@2 bb2@2 c3@2 d3@2 c3@2]/4",
  AP: "[~@2 c3@2 bb2 ~ bb2@2 eb2@2 f2@2 g2@2 ab2@4 g2@2 f2@2 eb2@2 bb2@2 c3@2 d3@2 eb3@4 d3@2 c3@2 bb2 ~ c3@2 bb2@2 g2@2 f2@4 g2@2 ab2@3 ~ bb2@2 c3@2 d3@2 c3@4 bb2@2 bb3@4 eb2@3 ~@5]/5",
})).s("gm_fretless_bass").gain(0.31)

// other · synth strings 1 · "AnalogStr"
const synth_strings_1 = note("<A@8 ~@68 B C D E F G H I@2 J@8 ~@46>".pickRestart({
  A: "[~ c5@15]/8", B: "f3", C: "g3 bb3", D: "ab3", E: "c4@3 bb3", F: "c4", G: "eb4 d4", H: "eb4",
  I: "[g4@19 f4@9 ~@4]/2", J: "c5/8",
})).s("gm_synth_strings_1").gain(0.31)

// chords · string ensemble 1 · "D110Strin"
const string_ensemble_1 = note(`<
  A B@4 C@2 D E F ~@58 G H@2 I G J@2 K L M N O L P N Q R S T@3 U@3 V W X ~@11 Y Z@2 AA@2 AB@4 Z@2 AA@2 AB@4 Z@2 AA@2
  AB@4 Z@2 AA@2 AC@4
>`.pickRestart({
  A: "~@4 c6 c5 c6 c5",
  B: "[c6@2 ~ c6@2 ~ c5@2 ~ c5@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~ c5@2 c6@2 c5@2 c6@2 c5@2 c6@2 c5@2, ~ c5 ~@2 c6 ~@2 c5 ~ c5 ~ c5 ~ c5 ~ c5 ~ c5 ~ c5 ~ c5 ~ c5 ~@8]/4",
  C: "[c6@2 ~ c6@2 ~@2 c6@2 ~@2 c6@2 c5@2 c6@2 ~@2 c6@2 c5@2 c6@2 ~@2 c6@2 ~ c5@2, ~ c5 ~ c5 ~ c5 ~@3 c5 ~@3 c5 ~@2]/2",
  D: "c6@2 c5@2 c6@2 c5@2 c6@2 c5@2 ~ c5@2 ~, ~@6 c6 ~", E: "c6@2 ~ c6@2 ~ c5@2 c6@2 c5@2 c6@2 c5@2, ~ c5 ~@6",
  F: "c6 c5 c6 c5 c6 c5 ~@2", G: "[g4,bb4] [ab4,c5]", H: "[[bb4,d5]@3 [eb5,g5]@9 [ab4,c5]@4]/2",
  I: "d5@3 eb5@5, bb4@15 ~", J: "[[bb4,d5]@3 g5@9 ab5@4, ~@3 eb5@13]/2", K: "[f5,bb5]@3 [eb5,g5]@5",
  L: "[f4,ab4,c5]@15 ~", M: "[g4,eb5]@7 ~ [f4,d5]@8, bb4@15 ~", N: "[ab4,c5,eb5]@15 ~",
  O: "[g4,eb5]@3 [f4,d5], bb4@15 ~", P: "[g4,bb4,eb5]@8 [f4,bb4,d5]@7 ~", Q: "[bb4,eb5,g5]@15 ~",
  R: "[bb4,eb5,g5]@3 [bb4,d5,f5]@8 ~@5", S: "c6@2 c5@2 c6@2 c5@2 c6@2 ~ c6@2 ~ c5@2, ~@5 c5 ~@2",
  T: "[~ c5@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~@2 c6@2 ~ c5@2 c6@2 c5@2, c6 ~@2 c5 ~ c5 ~ c5 ~ c5 ~ c5 ~ c5 ~ c5 ~ c5 ~ c5 ~@4]/3",
  U: "[c6@2 c5@2 c6@2 c5@2 c6@2 ~ c6@2 ~@2 c6@2 ~@2 c6@2 c5@2 c6@2 ~@2 c6@2 c5@2 c6@2 ~@2 c6@2 ~ c5@2 c6@2 c5@2 c6@2 c5@2, ~@5 c5 ~ c5 ~ c5 ~@3 c5 ~@3 c5 ~@6]/3",
  V: "c6@2 c5@2 ~ c5@2 ~ c6@2 ~ c6@2 ~ c5@2, ~@2 c6 ~@2 c5 ~@2", W: "c6 c5 c6 c5 c6 c5 c6 c5", X: "c6 c5 ~@6",
  Y: "~ [g4,bb4]", Z: "[[ab4,c5]@4 [bb4,d5]@3 [eb5,g5]@9]/2",
  AA: "[[ab4,c5]@4 d5@3 eb5@5 [g4,bb4]@4, ~@8 bb4@15 ~@9]/2", // Ab Gm
  AB: "[[ab4,c5]@4 [bb4,d5]@3 g5@9 ab5@4 [f5,bb5]@3 [eb5,g5]@5 [g4,bb4]@4, ~@7 eb5@13 ~@12]/4", // Ab Bb Bb5 Eb Gm
  AC: "[[ab4,c5]@4 [bb4,d5]@3 g5@9 ab5@4 [f5,bb5]@3 [eb5,g5]@5 ~@4, ~@7 eb5@13 ~@12]/4", // Ab Bb Bb5 Eb
})).s("gm_string_ensemble_1").gain(0.31)

// chords · piano · "Grand Pia"
const piano = note(`<
  A B C D E B F G H I J K L M J N J O K P K Q@2 R J S J N J O K P K Q@2 T U V W X Y Z AA X J K L M J N J O K P K Q@2 R J
  T U V W X Y Z AA X U V W X Y Z AA X AB AC AD AE AF AC AG AH AI AJ AK@3 AL AM@3 AN AO@8 AP@8 AQ@24 AR@5
>`.pickRestart({
  A: "~@8 [eb4,g4,c5]@6 [bb4,c5,f5] ~", B: "~@3 eb5@5 [ab4,c5,eb5]@6 [ab4,c5,f5] ~, [bb4,c5,f5] ~",
  C: "f5@3 eb5@11 [ab4,c5,eb5]@2, [ab4,c5]@7 ~", // Ab
  D: "[c5,eb5,ab5]@7 ~@7 eb5@2, ~@7 c5@8 ~, ~@7 eb5@6 ~@3, ~ g5, ~@11 f5@5", // Ab
  E: "[bb4,d5,f5]@8 ~ eb4@5 [bb4,c5,f5] ~, ~@4 [g4,c5]@3 ~", F: "~@3 eb5@9 ~@2 [ab4,c5,eb5]@2, [ab4,c5,f5]@13 ~@3",
  G: "[c5,eb5,ab5]@7 ~@7 eb5@2, ~@7 c5@8 ~, ~ g5, ~@4 eb5@3 ~, ~@11 f5@5", H: "[bb4,d5,f5]@2 [bb4,d5,f5]!2",
  I: "[bb4,d5,f5]@2 [bb4,d5,f5]@2 [bb4,d5,f5]@2 [bb4,d5,f5]@2 [bb4,d5,f5]@2 [bb4,d5,f5] ~ [bb4,d5,f5] ~@3", // Bb
  J: "[ab4,c5,eb5]@6 [bb4,d5,f5]@9 ~", K: "[ab4,c5,eb5]@5 ~ [bb4,d5,f5]@9 ~", L: "[bb4,c5,eb5]@6 [bb4,d5,f5]@9 ~",
  M: "~@6 [bb4,d5,f5]@3 ~ [bb4,bb5] ~ [bb4,bb5] ~@3, [ab4,c5,eb5]@9 ~@7", N: "[bb4,c5,eb5]@5 ~ [bb4,d5,f5]@9 ~",
  O: "[ab4,c5,eb5]@6 [f4,bb4,d5]@9 ~", P: "[bb4,c5,eb5]@5 ~ [bb4,d5,f5]@8 ~@2",
  Q: "[~@3 [g5,g6]@3 eb5@2 ~@8 [ab4,c5,eb5]@5 ~ [bb4,d5,f5]@9 ~, [f4,ab4,c5,ab5,ab6]@5 ~ [g4,bb4]@9 ~@17, ~@6 [f5,f6]@4 ~@2 [f5,f6]@9 ~@11, ~@8 [eb5,eb6]@7 ~@17]/2", // G Ab Bb Fm Gm F Eb
  R: "[bb4,c5,eb5]@3 [bb4,d5,f5]@4 ~", S: "[bb4,c5,eb5]@5 ~ [bb4,d5,f5]@2 ~@2 [bb4,bb5] ~ [bb4,bb5] ~@3",
  T: "~ eb5@5 [f4,bb4,d5]@10, c5@3 ~@5", U: "[g4,bb4,eb5]@3 [ab4,c5,eb5]@5", V: "[bb4,d5,f5]@6 [bb4,eb5,g5]@9 ~",
  W: "[g4,bb4,eb5]@6 [ab4,c5,eb5]@9 ~", X: "[f4,bb4,d5]@5 ~ [g4,bb4,eb5]@5 ~ [f4,bb4,d5]@3 ~",
  Y: "[g4,bb4,eb5]@5 ~ [ab4,c5,eb5]@8 ~@2", Z: "[bb4,d5,f5]@2 ~ [bb4,eb5,g5]@4 ~",
  AA: "[g4,bb4,eb5]@6 [f4,ab4,c5]@7 ~@3", AB: "[f4,ab4,c5]@15 ~", AC: "[g4,bb4,eb5]@7 ~ [f4,bb4,d5]@7 ~",
  AD: "[ab4,c5,eb5]@15 ~", AE: "[g4,bb4,eb5]@11 ~ [f4,bb4,d5]@3 ~", AF: "[f4,ab4,c5]@7 ~", AG: "[ab4,c5,eb5]@3 ~",
  AH: "[bb4,eb5,g5]@7 ~", AI: "[bb4,eb5,g5]@3 [bb4,d5,f5]@9 ~@4",
  AJ: "[eb4,g4,c5]@6 [bb4,c5,f5] ~@4 eb5@5, ~ [bb4,c5,f5]", // Cm Bbsus2
  AK: "[[ab4,c5,eb5]@6 [ab4,c5,f5] ~ f5@3 eb5@11 [ab4,c5,eb5]@2 [c5,eb5,ab5]@7 ~@7 eb5@2 [bb4,d5,f5]@8, ~@8 [ab4,c5]@14 ~@9 c5@8 ~@9, ~@31 eb5@6 ~@11, ~@4 g5 ~, ~@35 f5@5 ~@8]/3", // Ab Fm Ab Bb Ab
  AL: "~ eb4@5 [bb4,c5,f5] ~@4 eb5@5, [g4,c5]@3 ~ [bb4,c5,f5]@4", // Bbsus2 C5 Bbsus2
  AM: "[[ab4,c5,eb5]@6 [ab4,c5,f5] ~@4 eb5@9 ~@2 [ab4,c5,eb5]@2 [c5,eb5,ab5]@7 ~@7 eb5@2 [bb4,d5,f5]@8, ~@8 [ab4,c5,f5]@13 ~@10 c5@8 ~@9, ~@4 g5 ~, ~@16 eb5@3 ~@5, ~@35 f5@5 ~@8]/3", // Ab Fm Ab Bb Fm
  AN: "[bb4,d5,f5]@2 [bb4,d5,f5]@2 [bb4,d5,f5]!4", // Bb
  AO: "[[bb4,d5,f5]@2 [bb4,d5,f5] ~ [bb4,d5,f5] ~@3 [ab4,c5,eb5]@6 [bb4,d5,f5]@9 ~ [bb4,c5,eb5]@5 ~ [bb4,d5,f5]@9 ~ [ab4,c5,eb5]@6 [bb4,d5,f5]@9 ~ [ab4,c5,eb5]@6 [f4,bb4,d5]@9 ~ [ab4,c5,eb5]@5 ~ [bb4,d5,f5]@9 ~ [bb4,c5,eb5]@5 ~ [bb4,d5,f5]@8 ~@2 [ab4,c5,eb5]@5 ~ [bb4,d5,f5]@9 ~@4 [g5,g6]@3 [g4,bb4,eb5,f5,f6]@2, ~@120 [f4,ab4,c5,ab5,ab6]@5 ~@3]/8", // Bb Ab Bb Cm7 Bb Ab Bb Ab …
  AP: "[~@8 [ab4,c5,eb5]@5 ~ [bb4,d5,f5]@9 ~ [bb4,c5,eb5]@6 [bb4,d5,f5]@8 ~@2 [ab4,c5,eb5]@6 [bb4,d5,f5]@9 ~@2 eb5@5 [f4,bb4,d5]@10 [g4,bb4,eb5]@6 [ab4,c5,eb5]@10 [bb4,d5,f5]@6 [bb4,eb5,g5]@9 ~ [g4,bb4,eb5]@6 [ab4,c5,eb5]@9 ~ [f4,bb4,d5]@5 ~ [g4,bb4,eb5]@2, [eb5,eb6]@7 ~@49 c5@6 ~@66, ~@4 [f5,f6]@9 ~@115]/8", // Ab Bb Cm7 Bb Ab Bb Eb Ab …
  AQ: "[~@4 [f4,bb4,d5]@3 ~ [g4,bb4,eb5]@5 ~ [ab4,c5,eb5]@8 ~@2 [bb4,d5,f5]@4 ~@2 [bb4,eb5,g5]@8 ~@2 [g4,bb4,eb5]@6 [f4,ab4,c5]@7 ~@3 [f4,bb4,d5]@5 ~ [g4,bb4,eb5]@5 ~ [f4,bb4,d5]@3 ~ [g4,bb4,eb5]@6 [ab4,c5,eb5]@10 [bb4,d5,f5]@6 [bb4,eb5,g5]@9 ~ [g4,bb4,eb5]@6 [ab4,c5,eb5]@9 ~ [f4,bb4,d5]@5 ~ [g4,bb4,eb5]@2]/8", // Bb Eb Ab Bb Eb Fm Bb Eb …
  AR: "[~@4 [f4,bb4,d5]@3 ~ [g4,bb4,eb5]@5 ~ [ab4,c5,eb5]@8 ~@2 [bb4,d5,f5]@4 ~@2 [bb4,eb5,g5]@8 ~@2 [g4,bb4,eb5]@6 [f4,ab4,c5]@7 ~@3 [f4,bb4,d5]@5 ~ [g4,bb4,eb5]@5 ~ [f4,bb4,d5]@3 ~ [g4,bb4,eb5]@3 ~@5]/5", // Bb Eb Ab Bb Eb Fm Bb Eb …
})).s("gm_piano").gain(0.31)

// other · tenor sax · "D110Sax3"
const tenor_sax = note(`<
  ~@36 A B C D A B C E F ~ G H ~@3 I J K J ~ L ~ M ~ A B C D A B C E A B C D A B C E ~@22 N O P Q ~ R ~ S ~ T U V W T U
  X@2 T U V W T U Y@2 Z AA AB AC AD AA AB AE Z AA AB AC AB AA AB AE
>`.pickRestart({
  A: "~@8 c6@2 eb6 ~@5", B: "~@10 f6@2 eb6@2 bb6 ~", C: "~@10 eb6 ~@5", D: "~@10 eb6 ~ eb6 ~@3",
  E: "d6@4 eb6 ~ eb6@6 d6 ~@3", F: "~@4 f6 g6@3 f6@2 bb5@2 ~@4", G: "~@4 g6@4 f6@2 bb5 ~@5, ~@4 f6 ~@11",
  H: "~@10 [bb5,bb6] ~ [bb5,bb6]@2 ~@2", I: "~@12 bb5 ~@3", J: "~@8 bb5 ~@7", K: "~@6 bb5 ~@3 bb5 ~@5",
  L: "~@4 eb6 d6 f6 ~", M: "~@8 eb6@2 d6@2 bb5 ~@3", N: "~@4 bb5 ~@11", O: "bb5 ~@13 bb5 ~", P: "~@2 bb5 ~@13",
  Q: "bb5 ~@15", R: "eb6 d6 f6 ~@5", S: "eb6@2 d6@2 bb5 ~@11", T: "c6@2 eb6 ~@13", U: "~@2 f6@2 eb6@2 bb6 ~@9",
  V: "~@2 eb6 ~@13", W: "~@2 eb6 ~ eb6 ~@11", X: "[~@2 eb6 ~@5 d6@4 eb6 ~ eb6@6 d6 ~@11]/2",
  Y: "[~@2 eb6 ~@5 d6@4 eb6 ~ eb6@6 d6 ~@3 [eb6,eb7]@3 ~@5]/2", Z: "c6@2 eb6 ~@5 d6@2 eb6@2 f6@2 eb6 ~",
  AA: "~@2 c6@2 bb5@2 eb6 ~@3 eb6 ~@5", AB: "eb6 ~ eb6 ~@5 d6@2 eb6@2 f6@2 eb6 ~",
  AC: "~@2 [eb6,eb7] ~ [eb6,eb7] ~@5 eb6 ~@5", AD: "eb6 ~ eb6 ~@5 d6@2 eb6@2 f6@2 eb6@2",
  AE: "~@2 [eb6,eb7] ~ [eb6,eb7] ~@3 [eb6,eb7]@3 ~@5", // Eb
})).s("gm_tenor_sax").gain(0.41)

// chords · synth brass 2 · "ChorusBra"
const synth_brass_2 = note(`<
  ~@23 A ~@3 B C D E B C ~@2 F G H I J G H I K ~@5 B C D E B C ~@2 A ~ F G H I J G H I K G H I J G H I K ~@20 L ~ M ~ L
  ~@2 N O P E Q R S T Q R U@2 Q R S T Q R U@2 ~@16
>`.pickRestart({
  A: "~@2 [bb5,d6,f6] ~ [bb5,d6,f6]@2 [bb5,eb6] ~ [bb5,d6,f6]@3 ~@5, ~@3 g6 ~@4", B: "~@6 [ab4,c5] [bb4,d5]",
  C: "[c5,eb5]@2 [d5,f5]@3 ~@11", D: "~@12 [eb5,g5]@3 ~", E: "[d5,f5]@3 ~@13",
  F: "~@2 [d5,f5]@2 [d5,f5]@2 [eb5,g5]@2 [d5,f5]@3 ~@5", G: "~@8 c6@2 eb6 ~@5", H: "~@10 f6@2 eb6@2 bb6 ~",
  I: "~@10 eb6 ~@5", J: "~@10 eb6 ~ eb6 ~@3", K: "d6@4 eb6 ~ eb6@6 d6 ~@3",
  L: "~@4 [ab4,c5]@2 [bb4,d5]@2 [c5,eb5]@2 [d5,f5]@3 ~@3", M: "~@4 [eb5,g5]@3 ~ [d5,f5]@3 ~@5",
  N: "~@10 [bb5,d6,f6] ~ [bb5,d6,f6]@2 [bb5,eb6] ~, ~@7 g6", O: "[bb5,d6,f6]@3 ~@13", P: "~@5 [d5,f5]!2 [eb5,g5]",
  Q: "c6@2 eb6 ~@13", R: "~@2 f6@2 eb6@2 bb6 ~@9", S: "~@2 eb6 ~@13", T: "~@2 eb6 ~ eb6 ~@11",
  U: "[~@2 eb6 ~@5 d6@4 eb6 ~ eb6@6 d6 ~@11]/2",
})).s("gm_synth_brass_2").gain(0.46)

// drums · pedal hat
const pedal_hat = s("hh").struct(`<
  A ~@63 B ~@2 C ~@4 B ~@7 B ~@2 B D B ~@24 A ~@3 E ~@3 A ~@7 F ~@3 E ~@3 A ~@2 A ~
>`.pickRestart({
  A: "~ x", B: "x", C: "~@7 x", D: "~@3 x ~@12", E: "~@3 x ~@4", F: "~ x ~@2 x ~@3",
})).gain(0.2)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  A B@8 C D@25 E D@7 F D@15 E D@3 G D@3 G D@7 G D@3 G D@4 H B@9 I@12 J I@3 G I@3 G I@7 G I@3 K I@3 G I@3 G I@3 L
>`.pickRestart({
  A: "~@2 x!2", B: "x!4", C: "x!3 ~", D: "x ~@2 x!2 ~@3", E: "x ~@5 x ~@8 x", F: "x ~@2 x!2 ~ x ~",
  G: "x ~@2 x!2 ~@2 x", H: "x ~@2 x ~@10 x ~", I: "x ~@3 x ~@2 x", J: "~@7 x!2 ~@5 x ~", K: "x!3 ~ x ~@2 x",
  L: "x ~ x!3 ~@3 x ~@7",
})).gain(0.31)

// drums · high tom
const high_tom = s("ht").struct("<~@35 A ~@23 A ~@24 B ~@21 C ~@32>".pickRestart({
  A: "~@11 x ~@4", B: "~@7 x", C: "~@3 x ~@12",
})).gain(0.2)

// drums · crash
const crash = s("cr").struct(`<
  A B@3 C B@4 D E F@2 G E F H F E F H F E H F G E F H F E F H F E I J@7 K E F@2 G E F H F E F H F E H F I J@7 L J@7 M
  J@8 N O B@3 O B@4 P F Q F R F Q F R Q F@2 S J@7 T J@7 U J@3 V J@3 T J@7 W
>`.pickRestart({
  A: "x ~ x!2 ~ x!2 ~@3 x!2 ~@2 x ~", B: "x ~ x!2 ~@2 x ~ x ~ x!2 ~@2 x ~", C: "x ~ x!2 ~@2 x ~@3 x!2 ~@2 x ~",
  D: "x ~ x!2 ~@2 x ~ x ~ x ~ x ~@3", E: "~ x!7", F: "x!8", G: "x!7 ~", H: "x!2 ~@2 x ~ x ~ x ~ x ~ x ~ x ~",
  I: "x ~ x ~ x ~ x ~ x ~ x ~@2 x!2 ~", J: "~ x ~ x", K: "~@4 x ~@5 x ~ x ~ x!2", L: "~@4 x ~@4 x!4 ~@3",
  M: "~@4 x ~@7 x ~ x!2", N: "~@6 x ~ x ~@2 x!4 ~", O: "~@2 x!2 ~@2 x ~ x ~ x!2 ~@2 x ~", P: "x!3 ~@2 x!3",
  Q: "x ~ x ~ x ~ x ~ x!2 ~@2 x ~ x ~", R: "x!4 ~ x!3", S: "x ~ x ~@2 x!2 ~@5 x ~@3", T: "~ x!4 ~@7 x ~@3",
  U: "~@4 x ~ x!2 ~@4 x ~@3", V: "~@6 x!2 ~@4 x ~@3", W: "x!2 ~@2 x!4 ~@8",
})).gain(0.26)

// drums · crash · soft notes
const crash_soft = s("cr").struct(`<
  ~@10 A B ~ C A B ~@2 A B ~@2 A B ~ C A B ~@2 A B ~@2 A D A B ~@2 A B ~@2 A B ~ C A B ~@2 A B ~@2 A B ~ E A B ~@2 A B ~
  F A B ~@2 A B ~@2 A B ~@2 A B A B G ~@10 C ~@3 C ~@3 C ~ A H C ~@3 C ~ I B C ~@3 C ~@3 C ~ A B C ~ I B C ~@3 C ~ J ~
>`.pickRestart({
  A: "~@15 x", B: "x", C: "~@7 x!2 ~@7", D: "x ~@6 x ~@3 x ~@4", E: "~@7 x ~@3 x ~@4", F: "~@6 x!3 ~@7", G: "~@5 x ~@2",
  H: "~@3 x ~@12", I: "~@14 x!2", J: "~@7 x!2 ~@5 x!2",
})).gain(0.05)

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

// drums · cowbell
const cowbell = s("cb").struct(`<
  ~@36 A B@6 C ~@16 A B@3 A B@2 C A B@3 A B@3 A B@3 A B@2 A ~@22 D B@3 E B@3 D B@3 E B@3 E B@3 D B@3 D B@3 E B@2 E ~
>`.pickRestart({
  A: "~ x!3", B: "x!4", C: "x!2 ~@2", D: "~@3 x", E: "x!2 ~ x",
})).gain(0.26)

// drums · bongos
const bongos = s("bongo:4").struct(`<
  ~@4 A ~@5 B ~@3 B ~@11 B ~@9 B ~@7 B ~@3 B ~@11 B ~@2 C ~@4 B ~@7 B ~@2 C ~@4 B ~@4 B ~@4 A ~@11 A ~@3 D ~@3 A ~@7 A
  ~@3 E ~@3 A ~@3 D ~@3 A
// … 11 more lines

More by Phil Collins