Strudelify

Against All Odds

Phil Collins

KeyB majorTempo56 bpm
0:00/0:00
// Against All Odds — Phil Collins
// 56 bpm, 4/4, key B major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: Full arrangement: all 50 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(56/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 C D E I J H K L M N O P Q R@2 ~@20 S T U ~@4>".pickRestart({
  A: "~@12 d#4@6 [f#3,c#4]@2 ~@5 [c#3,f#3,a#3]@7, ~@2 f#2@15 ~ [f#2,a#3]@8 ~@6, ~ f#3@2 ~@5, ~@6 g#3@7 ~@8 c#4@11, ~@8 e4@7 ~@5 f#4@12", // F#5 F#
  B: "~@7 e4@4 d#4@4 ~@2 [f#2,f#3,a#3]@7 [f#2,c#3,f#3,a#3]@8, ~ f#2@13 ~@18, ~@3 f#3@7 ~@22, ~@5 g#3@7 ~@3 c#4@17", // F#
  C: "[g#3,b3,d#4]@8 [g#3,b3,d#4]@7 ~ [a#3,c#4]@8 [c#4,f4]@8, g#2@15 ~ a#2@15 ~", // G#m A#m C#
  D: "[f#3,b3,d#4]@7 ~ [f#3,b3,d#4]@7 ~ [c#4,e4]@7 ~ e4@4 e4@2 f#4@2, b2@7 ~ c#3@8, ~@24 [g#3,c#4]@7 ~", // B C#m C#5
  E: "g#4@5 ~ b4@4 g#4@4 e4@2 a#4@6 c#5@4 a#4@4 f#4@2, [e2,b3,e4]@15 ~ [e2,c#4]@15 ~, ~@8 f#4@5 ~@3", // E5 C#m
  F: "[a#3,d#4]@4 [d#4,f#4]@4 d#4@4 d#4@2 e4 f#4, d#3@15 ~ g#2@15 ~, ~@24 b3@7 ~", // D#5 D#m
  G: "[c#4,e4,g#4]@7 ~ [c#4,g#4]@8 [b3,e4,b4]@8 [b3,e4,b4]@8, c#3@15 ~ c#3@15 ~", // C#m C#5 E5
  H: "[f#3,b3,c#4]@4 ~@2 c#4 ~ [f#2,f#3,a#3,c#4]@4 [f#2,f#3,a#3,c#4]@4, f#2@7 f#4@9, ~@8 f#3@7 ~@17, ~@10 b3@5 ~@17", // F#sus4 F#
  I: "[a#3,d#4]@8 ~@4 c#5@3 ~ d#4@2 ~@2 a#4@2 b4@2 [d#4,g#4]@4 f#4@2 g#4@2, d#3@15 ~ g#2@15 ~, ~@2 [d#4,f#4]@2 b4 ~@3, ~@18 d#4@5 ~ b3@7 ~", // D#5 G#5 D#m
  J: "[c#4,e4,g#4]@7 ~ [c#4,g#4]@8 [b3,e4,b4]@7 ~ [b3,e4,b4]@8, c#3@15 ~ c#3@15 ~", // C#m C#5 E5
  K: "[b3,d#4]@8 d#4@7 ~ [d#4,f#4]@8 [b3,d#4]@7 ~, b2@15 ~", // B D#m B
  L: "[g#3,c#4,f4]@8 [c#4,f4]@8 g#3@7 ~ [g#3,c#4,f4]@7 ~, b2@15 ~", // C#
  M: "[b3,d#4]@8 [g#3,b3]@8 [b3,e4,g#4]@8 [b3,g#4]@7 ~, g#2@13 ~@3 e2@13 ~@3", // B G#m E
  N: "[g#3,c#4,e4]@8 [g#3,c#4,e4]@7 ~ f#3@2 ~@2 b3@2 c#4@2 [f#2,f#3,a#3,c#4]@8, c#3@13 ~@3 [f#2,c#4]@8 ~@8, ~@4 b3 ~@3, ~@18 f#3@5 ~@9", // C#m F# F#5
  O: "[b3,d#4]@7 ~ [b3,d#4,f#4]@8 [b3,d#4,f#4]@8 b3@8, b2@15 ~", // B
  P: "[g#3,c#4,f4]@8 [g#3,c#4,f4]@7 ~ [g#3,c#4,f4]@8 [g#3,c#4]@8, b2@29 ~@3", // C# C#5
  Q: "[b3,d#4]@2 ~ g#3 ~ e4 ~ b3, g#2@15 ~ e2@16, g#3@4 ~@4 [b3,d#4]@7 ~@3 b3@4 ~@2 g#4@7 ~", // B
  R: "[c#4@4 ~@8 c#4@2 g#3@2 [f#3,b3,c#4]@8 [f#3,b3,c#4]@7 ~@3 f#3@2 ~@12 a#3@7 ~@9, c#3@8 f#2@19 ~@5, ~@4 c#4@7 ~@21 [b3,c#4]@4 b3@7 ~ b3@2 c#4@9 ~@9, ~@6 g#3@8 ~@24 f#3@17 ~@9, ~@8 g#4@7 ~@25 f#4@15 ~@9]/2", // F#sus4 Bsus2
  S: "~@5 d#4@3 ~@4 [c#3,f#3,a#3]@4, f#2@15 ~ [f#2,a#3]@8 ~@8, ~@2 f#3@9 ~@5 [f#3,c#4]@4 ~@12, ~ g#3@2 ~@2 c#4@3, ~@6 e4@7 ~@5 f#4@14", // F# F#5
  T: "~@3 e4@2 d#4@2 ~ [f#2,c#3,f#3]@4 [f#2,c#3,f#3,a#3]@4, f#2@13 ~@19, ~ f#3@4 ~@11, ~@4 g#3@7 ~@3 c#4@18", // F#5 F#
  U: "~@7 e4@4 d#4@7 ~@14, f#2@17 ~@15, ~@2 f#3@15 ~@15, ~@4 g#3@5 ~@23",
})).s("gm_piano").gain(0.37).pan(0.4)

// chords · piano · soft notes
const piano_soft = note("<~@2 A B ~ C D ~ A B ~ C D ~ E F G ~ H I J K L ~@27>".pickRestart({
  A: "~@16 f4@7 ~ a#3@7 ~", B: "~@16 g#3@7 ~@9", C: "~@8 a#3@7 ~ [g#3,b3]@8 g#3@2 ~@6", D: "~@8 e4@7 ~@17",
  E: "f#4@8 [b3,f#4]@7 ~ b3@8 f#4@7 ~", F: "~@8 g#3@8 [c#4,f4]@7 ~@9", G: "g#3 d#4 ~ e4", H: "f#4@7 ~@17 [d#4,f#4]@8",
  I: "~@3 f4", J: "~@4 g#3@8 ~@10 b3@4 e4@3 ~@3", K: "~@2 g#3@2 e4@5 ~ e4@5 ~@17, e4 ~@7", L: "~@5 c#4@2 ~@9",
})).s("gm_piano").gain(0.21).pan(0.4)

// other · melodic tom
const melodic_tom = note("<~@22 A B ~@5 C ~@3 D ~@8 E ~@7>".pickRestart({
  A: "~@16 f3 ~@3 c5 ~@3 g4 ~@3 f3 ~@3", B: "~@2 a3 ~ b3 ~ a3 ~@3 f4 ~ c3 ~@19",
  C: "~@2 b4 ~ b4 ~ f4 ~ f4 ~ d4 ~ d4 ~@19", D: "~@6 b4 e4 a4 d4 f4 ~ b3 ~ g3 ~@17",
  E: "~@4 g5 ~@3 b4 ~@3 f4 ~@5 d4 ~@3 g3 ~ c4 ~@7",
})).s("gm_melodic_tom").gain(0.57)

// chords · string ensemble 2
const string_ensemble_2 = note("<~@8 A B@2 C D@2 E F G@2 H I J K@3 L M N O@5 P@4 Q@4 R S@2 ~@2 T U V@2 ~>".pickRestart({
  A: "[f#3,b3,d#4] [g#3,c#4,f4]", B: "[[d#4,f#4] [g#3,e4] [g#3,e4] [a#3,c#4,f#4], b3@3 ~]/2",
  C: "[a#3,d#4,f#4] [g#3,b3,d#4]", D: "[[g#3,e4]@32 ~@16 a#3@15 ~, b3@47 ~@17, ~@32 [f#3,c#4]@31 ~]/2",
  E: "[f#3,b3,d#4]", F: "[f3,g#3,c#4]",
  G: "[[f#3,d#4]@16 [g#3,e4]@16 [g#3,e4]@16 ~@8 a#3@7 ~, b3@7 ~, ~@3 [f#3,c#4]]/2", H: "[b4,d#5]", I: "[c#5,f5]",
  J: "[b4,d#5] [b4,e5]", K: "[[b4,e5]@16 [c#5,f#5]@63 ~ [f#3,b3,d#4]@16]/3", L: "[g#3,c#4,f4] [f#3,b3,d#4]",
  M: "~@3 a#4 b4 a#4 g#4 d#5, [g#3,c#4,e4] [b3,e4]", N: "[c#4,f#4,c#5]@4 f#5@3 c#6, ~ [d#4,f#4]",
  O: "[[d#5,b5]@4 [c#5,a#5]@3 ~ [b4,g#5]@4 [a#4,f#5]@4 [c#5,e5]@16 e5@4 d#5@4 c#5@4 b4@4 [c#4,c#5,f#5]@32 f#5@24 b5@4 a#5@4 g#5@28 a#5@4 b5@4 a#5@4 g#5@4 f#5@4, [b3,d#4] [c#4,e4]@2 ~@2 [b4,d#5]@2 [c#5,f5]@2 [b4,d#5]]/5", // G#m F# E D#m C#m F#5 B C#m …
  P: "[~@2 g#5 f#5 e5 g#5 f#5 e5 ~@2 g#5 f#5 e5 g#5 f#5 e5 [a#4,f#5]@8 [b4,d#5,f#5]@16 g#5@14 g#5 a#5 b5@2 a#5@2 g#5@2 a#5@2, e5 ~@31, ~ g#4@12 ~@51, ~ b4@7 c#5@16 ~@16 [c#5,f5]@16 [b4,d#5]@8]/4", // D#m B C# B
  Q: "[~@2 g#5 f#5 e5@2 d#5@2 e5@8 [a#4,f#5]@8 [b4,d#5,f#5]@16 g#5@14 g#5 a#5 b5@2 a#5@2 g#5@2 a#5@2, e5 ~@31, ~ g#4@12 ~@51, ~ b4@7 c#5@16 ~@16 [c#5,f5]@16 [b4,d#5]@8]/4", // D#m B C# B
  R: "~@2 g#5 f#5 e5@2 d#5@2 [c#5,e5]@8, e5 ~@7, ~ g#4@15, ~ b4@7 ~@8", S: "[b3 a#3, [f#4,c#5]]/2",
  T: "~@17 c#4@6 ~ f#4@8, ~@17 [f#3,b3]@15", U: "~@6 f#4@9 [e3,g#3,b3]@16 ~, c#4@9 ~@7, [a#2,g#3]@15 ~@17",
  V: "[[f#2,c#3,f#3,a#3]@31 ~]/2", // F#
})).s("gm_string_ensemble_2").gain(0.29)

// chords · electric guitar clean
const electric_guitar_clean = note("<~@8 A B C D E F G H I J K L M@4 N O P Q R@5 S@4 T@4 U@2 ~@7>".pickRestart({
  A: "~@7 f4, ~@5 g#3@3, ~@3 c#4", B: "f#4 ~@2 f#4 ~@3 g#4, ~@4 b3@12 ~@4 b3@11 ~, ~ d#4 ~ e4",
  C: "~@3 b4@2 ~@3 c#4 ~@3 f#4 ~ f#4@2, ~@2 b3@9 ~ b3@4 ~@4 c#4@6 c#4@4 ~@2, ~@4 e4@5 ~ e4@4 e4@4 f#4@4 c#5@6 ~@4",
  D: "~@2 d#4@2 ~@10 f#4@2 ~@2 g#3@2 a#3@4 b3@2 g#3 ~ [c#4,e4] ~ [d#4,f#4]@2, g#3 f#4 a#4@2 ~@4, ~@3 d#4@2 f#4@2 ~@9, ~@3 d#4 ~@4", // C#m D#m
  E: "~@8 e4@7 ~@3 g#3@2 ~@4 e4@7 ~, ~@2 g#3@4 g#3@6 ~@10 g#3@9 ~, ~@4 b3@5 ~@11 b3@11 ~",
  F: "~@10 f#4@2 ~@4 a#3@15 ~, ~@3 b3@5 ~@8, ~@8 c#4@4 c#4@19 ~",
  G: "~@7 b3, ~@4 b3@7 ~ b3@7 ~ b3@7 ~@5, ~@8 d#4@15 ~ d#4@7 ~, ~ f#3",
  H: "~@8 g#3@2 ~ c#4 ~@2 g#3@2, ~@4 c#4@7 ~ c#4@8 g#3@6 c#4@5 ~, ~@8 f4@15 ~ f4@7 ~",
  I: "~@6 d#4@2 e4@2 ~ e4 ~@2 b3@2, ~@4 d#4@7 ~@9 b3@6 e4@6, ~@8 g#4@8 ~@8 g#4@7 ~",
  J: "~ g#3 ~@4 b3@2 ~@6 f#4@2, ~@4 b3@6 e4@5 ~@3 b3@4 f#4@6 ~@4, ~@3 g#3@4 ~ f#3@4 a#3@4, ~@8 g#4@7 ~@5 c#4@12",
  K: "~@10 b3@2 ~ b3@3, ~ b3@2 b3@2 ~@3, ~@4 d#4@8 d#4@3 ~, ~@8 f#3@5 ~@3",
  L: "~@6 c#4@2 ~@2 c#4@2 ~ c#4@3, ~ c#4@2 ~ g#3@4, ~@4 f4@8 f4@3 ~",
  M: "[~@12 d#4@4 e4@4 ~@8 b3@6 ~@10 b3@5 ~@15 b3@6 ~@10 a#3@30 ~@6 b3@4 [b3,d#4]@6 ~@2, ~@2 d#4@4 ~@4 b3@4 ~@3 g#3@2 g#3@3 ~@7 b3@3 ~@3 b3@3 b3@2 ~@16 g#3@7 ~, ~@4 g#4@7 e4@2 e4@5 b3@3 e4@3 ~@6 c#4@4 ~@3 c#4@2 c#4@2 ~@23, ~@24 g#4@4 ~@12 g#4@6 ~@16 f#4@7 ~@3 f#4@12 ~@44]/4", // B
  N: "~@4 c#4@4 [c#4,f4]@6 ~@6 d#4@3 ~ [d#4,f#4]@6 ~@2, a#3@8 ~@8 b3@13 ~@3", // C# D#m
  O: "~@6 b3@2 g#4@3 b4@2 ~ e4@2, ~ b3@2 ~@5, ~@8 e4@7 ~@11 g#4@4 ~@2",
  P: "c#4@3 ~@3 c#5@4 ~@2 f#4@4 ~@12 a#4@3 ~, f#4@10 a#4@4 ~@6 c#4@5 ~ c#4@6, ~@2 c#4@5 ~ a#3@8, ~@11 f#4@5",
  Q: "~@4 f#3@4 g#3@3 ~ a#3@4 ~@8 e4@2 ~@2 e4@4, ~@16 g#3@15 ~, ~@16 [e4,g#4]@9 ~ g#4@6, ~@11 b3@5", // E
  R: "[b3@6 ~@2 e4@2 ~@2 e4@4 ~@8 c#4@2 ~@6 a#3@15 ~@25 d#4@8 ~@24 f4@8 ~@12 d#4@4 e4@4 ~@2 e4@2 ~@4 b3@6 ~@2 b3@2 e4@2 ~@4 b3@3 ~, g#3@15 ~@13 c#4@8 ~@20 d#4@15 ~@13 c#4@7 ~ c#4@7 ~ c#4@9 ~@7 d#4@7 ~@15 e4@11 ~@5 e4@4 ~@2, [e4,g#4]@9 ~ g#4@5 ~@11 f#4@8 ~@30 f#3@13 ~@19 g#3@11 ~@25 b3@8 ~@6 g#3@4 ~@10, ~@6 b3@9 ~@7 b3@7 ~ b3@9 ~@13 b3@7 ~ b3@7 ~ b3@12 ~@8 f4@8 ~@24 g#4@15 ~ g#4@16 g#4@5 ~@3]/5", // E
  S: "[~@3 c#4@2 ~@2 f#4 ~@12 d#4@4 ~@12 f4@4 ~@6 d#4@2 e4@2 ~ e4 ~@2 b3@3 ~ b3 e4 ~@2 b3@2, b3@10 b3@6 ~@4 b3@7 ~ b3@7 ~ b3@12 ~@4 c#4@7 ~ c#4@7 ~ c#4@9 ~@7 d#4@7 ~@15 e4@11 ~@5 e4@4 ~@2, ~@2 c#4@4 ~@6 c#4@4 ~@8 d#4@15 ~@17 f4@8 ~@24 g#4@15 ~ g#4@16 g#4@5 ~@3, ~@4 f#4@9 ~@19 f#3@13 ~@19 g#3@11 ~@25 b3@8 ~@6 g#3@4 ~@10]/4",
  T: "[~@3 c#4@2 ~@2 f#4 ~@12 d#4@4 ~@12 f4@4 ~@6 d#4@2 e4@2 ~ e4 ~@2 b3@2 ~@3 e4 ~@2 b3@2, b3@10 b3@6 ~@4 b3@7 ~ b3@7 ~ b3@12 ~@4 c#4@7 ~ c#4@7 ~ c#4@9 ~@7 d#4@7 ~@15 e4@10 b3@6 e4@5 ~, ~@2 c#4@4 ~@6 c#4@4 ~@8 d#4@15 ~@17 f4@8 ~@24 g#4@15 ~ g#4@8 g#4@8 g#4@5 ~@3, ~@4 f#4@10 ~@18 f#3@13 ~@19 g#3@11 ~@25 b3@8 ~@6 g#3@11 ~@3]/4",
  U: "[~@18 b3@2 ~@8 b3@4 a#3@31 ~, b3@15 ~ f#3@15 ~@33, ~@4 c#4@7 ~ c#4@8 c#4@4 f#4@10 ~@30, ~@4 f#4@7 b3@2 c#4@7 ~@12]/2",
})).s("gm_electric_guitar_clean").gain(0.26).pan(0.6)

// chords · pad warm
const pad_warm = note("<~@2 A B C D E F A G@2 H I@2 J K L@2 J M N O@3 P Q R S@6 T@7 U V@2 W X Y Z AA@2 ~>".pickRestart({
  A: "[f#3,b3,d#4] [g#3,c#4,f4]", B: "[b3,d#4,f#4] [g#3,c#4,e4]", C: "[g#3,b3,e4] [a#3,c#4,f#4]",
  D: "[a#3,d#4,f#4] [f#3,b3,d#4]", E: "[g#3,b3,e4]", F: "b3@15 ~ a#3@16, [f#3,c#4]",
  G: "[[d#4,f#4] [g#3,e4] [g#3,e4] [a#3,c#4,f#4], b3@3 ~]/2", H: "[a#3,d#4,f#4] [g#3,b3,d#4]",
  I: "[[g#3,e4]@32 ~@16 a#3@15 ~, b3@47 ~@17, ~@32 [f#3,c#4]@31 ~]/2", J: "[f#3,b3,d#4]", K: "[f3,g#3,c#4]",
  L: "[[f#3,d#4]@16 [g#3,e4]@16 [g#3,e4]@16 ~@8 a#3@7 ~, b3@7 ~, ~@3 [f#3,c#4]]/2", M: "[g#3,c#4,f4]",
  N: "[g#3,b3,d#4] [g#3,b3,e4]", O: "[[g#3,b3,e4]@16 b3@31 ~ a#3@31 ~ [f#3,b3,d#4]@16, ~@16 [f#3,c#4]@63 ~@17]/3",
  P: "[g#3,c#4,f4] [b3,d#4,f#4]", Q: "[g#3,c#4,e4] [g#3,b3,e4]", R: "[a#3,c#4,f#4] [a#3,d#4,f#4]",
  S: "[[f#3,b3,d#4]@16 [g#3,b3,e4]@32 b3@15 ~ a#3@16 [f#3,b3,d#4]@32 [f3,g#3,c#4]@32 [f#3,d#4]@16 [g#3,e4]@16 [g#3,e4]@16, ~@3 [f#3,c#4]@2 ~@4 b3@3]/6", // B E B C# D#m C#m F#5
  T: "[~@8 a#3@7 ~ [f#3,b3,d#4]@32 [f3,g#3,c#4]@32 [f#3,d#4]@16 [g#3,e4]@16 [g#3,e4]@16 ~@8 a#3@8 [f#3,b3,d#4]@32 [g#3,c#4,f4]@32 [g#3,b3,d#4]@16, [f#3,c#4]@2 ~@8 b3@7 ~@11, ~@8 [f#3,c#4] ~@5]/7", // B C# D#m C#m B C# G#m F#5
  U: "[g#3,b3,e4]!2", V: "[b3@31 ~ a#3@31 ~, [f#3,c#4]@63 ~]/2", W: "g#3 a#3", X: "g#3@16 a#3@15 ~",
  Y: "g#3@15 ~@2 [f#3,b3,c#4]@15", Z: "~ g#3@7 f#3@7 ~ [e3,b3]@16, c#4@15 g#3@17, ~ a#2@14 ~@17",
  AA: "[~@2 [f#2,f#3,a#3,c#4]@61 ~]/2", // F#
})).s("gm_pad_warm").gain(0.42)

// bass · fretless bass
const bass = note(`<
  A B C D E F G H I J K L M N O P Q R O S T U V@2 W X Y Z AA AB AC AD AE AF AG AH AI AJ AK AL AM AN AO AP AQ AR AS AT@3
>`.pickRestart({
  A: "~@2 c#2@13 ~ g#2@2 f#2@14", B: "~ c#2@15 ~ f#2@15", C: "g#2@11 ~ g#2@3 ~ a#2@11 ~ a#2@3 ~",
  D: "b2@12 b2@3 ~ c#3@11 ~@5", E: "e3@15 ~ e3@15 ~", F: "d#3@11 ~@5 g#2@12 ~@4",
  G: "c#3@11 ~ g#2@2 c#3 ~ c#3@7 ~ g#2@7 ~", H: "f#2@5 ~ f#2@6 c#2@2 ~@2 f#1@16", I: "g#2@12 g#2@3 ~ a#2@11 ~@5",
  J: "b2@12 b2@3 ~ c#3@11 ~ c#3@2 ~@2", K: "e3@14 b2@2 e3@11 ~ f#3@2 e3 ~", L: "d#3@13 ~@3 g#2@8 a#2@3 ~ b2@4",
  M: "c#3@6 g#2@2 c#3@4 g#2@3 ~", N: "f#2@5 ~ f#2@4 f#2@2 c#2@4 f#1@10 d#2 ~ f#2 ~ c#2@2",
  O: "f#1@11 ~ f#1@3 ~ f#1@8 f#1@7 ~", P: "f#1@11 ~ f#1@4 f#1@7 ~ f#1@7 ~", Q: "g#2@12 g#2 ~ f#2@2 e2@11 ~ d#2@3 ~",
  R: "c#2@12 g#1@4 f#1@4 d#2 ~ c#2@2 f#2@4 d#2 ~ c#2@2", S: "f#1@11 ~ f#1@4 f#1@8 f#1@2 ~@2 g#3@2 d#3@2",
  T: "g#2@11 ~ g#2@2 f#2@2 e2@11 ~ d#2@3 ~", U: "c#2@11 ~ g#1@3 ~ f#1@12 c#3@2 [d3,d#3] [e3,f3,f#3]",
  V: "[f#3@5 ~ f#3@2 c#3@3 ~ c#3@2 d3 [d#3,e3,f3] f#3@28 ~@2 f#2@2 g#2@12 g#2@3 ~]/2", W: "a#2@12 a#2@3 ~ b2@12 b2@3 ~",
  X: "c#3@6 ~@2 e3@7 b2", Y: "e3@12 f#3@2 ~@2 d#3@11 ~ b2 ~ a#2@2", Z: "g#2@8 a#2@3 ~ b2@3 ~ c#3@12 g#2@4",
  AA: "c3@8 g#2@7 ~ f#2@11 ~ c#2@4", AB: "f#2@6 d#3 ~ f3@3 ~ d#3@2 c#3 ~ b2@4 f#2@8 f#2@3 ~",
  AC: "f#2@3 ~@3 f#2@2 f#2@3 ~@5 f#2@4 f#2@7 ~ f#2@4", AD: "f#2@3 ~ f#2@2 f#2@2 ~@4 f#2@2 f#2@2 g#2@10 ~@2 g#2 ~ f#2@2",
  AE: "e2@11 ~ d#2@3 ~ c#2@12 g#2@2 ~@2", AF: "f#2@6 c#3@2 d3 ~ f#3 ~ d#3@2 ~@2 b2@4 f#2@8 ~@4",
  AG: "f#2@8 f#1@8 f#2@12 f#2@3 ~", AH: "f#2@2 ~@2 f#2@2 f#2!2 g#2@5 ~ g#2 f#2", AI: "e2@12 d#2@3 ~ c#2@12 g#2@2 ~@2",
  AJ: "f#2!2 ~ f#2!3 ~ f#2!3 ~ f#2!2 d#2 ~ c#2 f#2@12 f#2@4", AK: "f#2@3 ~ f#2@3 f#2",
  AL: "f#2@11 ~ f#2@2 d#2@2 g#2@10 ~@2 g#2@2 f#2@2", AM: "e2@10 ~@2 e2 ~ d#2@2 c#2@11 ~ g#2@3 ~",
  AN: "f#2@11 ~ c#2@4 f#2@7 ~ c3@4 c#3@4", AO: "f#3@15 ~", AP: "c#2 f#2", AQ: "c#2@8 f#2@7 f#2", AR: "c#2@16 ~ b2@14 ~",
  AS: "a#2@14 ~ e2@17", AT: "[~ [f#1,f#2]@75 ~@20]/3",
})).s("gm_fretless_bass").gain(0.57)

// bass · fretless bass · soft notes
const bass_soft = note("<~@3 A ~ B ~@2 C D ~ E ~@13 F G ~ H ~ I J ~ K ~ L ~@2 M ~@11>".pickRestart({
  A: "~@28 c#3 ~ d#3@2", B: "~@12 d#3@3 ~@13 d#3@3 ~", C: "~@28 a#2@3 ~", D: "~@16 c3 ~@13 d#3 ~", E: "~@7 a#2 ~@8",
  F: "~@12 c#3 ~ d#3@2 ~@16", G: "~@7 e3 ~@8", H: "~@8 b2 ~@23", I: "~@4 f#2 ~@7 f#2@2 f#2@2 ~@16", J: "~@8 f#2@3 ~@21",
  K: "~@14 c#3@2 ~@12 f#2@3 ~", L: "~@2 f#2!2 ~@12", M: "~@3 f#2 ~@4",
})).s("gm_fretless_bass").gain(0.34)

// chords · epiano2
const epiano2 = note(`<
  A B C D E F G H C D E I J H K L M N O P Q R@2 S T U V W@5 X Y@3 X Z@3 AA AB@2 AC AD AE@2 AF@3
>`.pickRestart({
  A: "~@12 d#4@6 [f#3,c#4]@2 ~@5 [c#3,f#3,a#3]@7, ~@2 f#3@4 ~@3 [f#2,a#3]@4 ~@3, ~@6 g#3@7 ~@8 c#4@11, ~@8 e4@7 ~@5 f#4@12", // F#5 F#
  B: "~@7 e4@4 d#4@4 ~@2 [f#2,f#3,a#3]@7 [f#2,c#3,f#3,a#3]@8, ~ f#2@13 ~@18, ~@3 f#3@7 ~@22, ~@5 g#3@7 ~@3 c#4@17", // F#
  C: "[g#3,b3,d#4]@8 [g#3,b3,d#4]@7 ~ [a#3,c#4,f4]@8 [a#3,c#4,f4]@8, g#2@15 ~ a#2@15 ~", // G#m A#m
  D: "[f#3,b3,d#4]@7 ~ [f#3,b3,d#4]@7 ~ [g#3,c#4,e4]@7 ~ e4@4 e4@2 f#4@2, b2@7 ~ c#3@8, ~@24 [g#3,c#4]@7 ~", // B C#m C#5
  E: "g#4@5 ~ b4@4 g#4@4 e4@2 a#4@6 c#5@4 a#4@4 f#4@2, [e2,b3,e4]@15 ~ [e2,c#4]@15 ~, ~@8 f#4@5 ~@3", // E5 C#m
  F: "[a#3,d#4]@4 [a#3,d#4,f#4]@4 [g#3,b3,d#4]@4 d#4@2 e4 f#4, d#3@15 ~ g#2@15 ~, ~@24 b3@7 ~", // D#5 D#m G#m
  G: "[c#4,e4,g#4]@7 ~ [c#4,g#4]@8 [b3,e4,b4]@8 [b3,e4,b4]@8, c#3@15 ~ c#3@15 ~", // C#m C#5 E5
  H: "[f#3,b3,c#4]@4 ~@2 c#4 ~ [f#2,f#3,a#3,c#4]@4 [f#2,f#3,a#3,c#4]@4, f#2@7 f#4@9, ~@8 f#3@7 ~@17, ~@10 b3@5 ~@17", // F#sus4 F#
  I: "[a#3,d#4]@8 ~@4 c#5@3 ~ d#4@2 ~@2 a#4@2 b4@2 [d#4,g#4]@4 f#4@2 g#4@2, d#3@15 ~ g#2@15 ~, ~@8 [a#3,d#4,f#4]@8 [g#3,b3]@8 b3@7 ~, ~@4 b4 ~@3, ~@18 d#4@5 ~@9", // D#5 G#5 D#m G#m
  J: "[c#4,e4,g#4]@7 ~ [c#4,g#4]@8 [b3,e4,b4]@7 ~ [b3,e4,b4]@8, c#3@15 ~ c#3@15 ~", // C#m C#5 E5
  K: "[b3,d#4,f#4]@8 [b3,d#4,f#4]@7 ~ [b3,d#4,f#4]@8 [b3,d#4,f#4]@7 ~, b2@15 ~", // B
  L: "[g#3,c#4,f4]@8 [g#3,c#4,f4]@8 [g#3,c#4,f4]@7 ~ [g#3,c#4,f4]@7 ~, b2@15 ~", // C#
  M: "[g#3,b3,d#4]!2 [b3,e4,g#4]!2, g#2@13 ~@3 e2@13 ~@3", // G#m E
  N: "[g#3,c#4,e4]@8 [g#3,c#4,e4]@7 ~ f#3@2 ~@2 b3@2 c#4@2 [f#2,f#3,a#3,c#4]@8, c#3@13 ~@3 [f#2,c#4]@8 ~@8, ~@4 b3 ~@3, ~@18 f#3@5 ~@9", // C#m F# F#5
  O: "[b3,d#4,f#4]@7 ~ [b3,d#4,f#4]@8 [b3,d#4,f#4]@8 [b3,d#4,f#4]@8, b2@15 ~", // B
  P: "[g#3,c#4,f4]@8 [g#3,c#4,f4]@7 ~ [g#3,c#4,f4]@8 [g#3,c#4,f4]@8, b2@29 ~@3", // C#
  Q: "g#3@2 ~@4 g#3@2 ~@5 e4 b3@2, g#2@15 ~ e2@16, [b3,d#4]@8 [b3,d#4]@7 ~@3 b3@4 b3@5 ~@5, ~@4 g#3@8 ~@8 e4@4 g#4@7 ~", // B
  R: "[~@2 g#3@2 ~@8 c#4@2 g#3@2 [f#3,b3,c#4]@8 [f#3,b3,c#4]@7 ~@3 f#3@2 ~@12 a#3@7 ~@9, c#3@8 f#2@19 ~@5, [c#4,e4]@4 [c#4,e4]@6 e4@5 ~@23 f#3@17 ~@9, ~@6 g#3@8 ~@18 [b3,c#4]@4 b3@6 c#4@2 b3@2 c#4@9 ~@9, ~@8 g#4@7 ~@25 f#4@15 ~@9]/2", // F#sus4 C#m Bsus2
  S: "~@7 b3, ~@4 b3@3 ~, ~@20 g#3@9 ~@3, ~@24 g#4@7 ~",
  T: "c#4@4 a#4@3 ~ [b3,d#4]@2 b3 ~@3 d#4@2, f4@15 ~@7 d#4@4 f#4@4 ~@2, a#3@4 ~@20 b3@5 ~@3", // B
  U: "g#3 ~ g#4 c#4 b3 ~@2 b3, [c#4,e4]@12 ~@4 [e4,g#4]@8 [e4,g#4]@7 ~, ~@4 g#3@9 ~@7 b3@8 ~@4", // C#m E
  V: "f#4@4 c#4@2 ~@6 f#4@2 c#4@2 a#3@3 ~@9 d#4@4, a#4@8 c#4@5 ~@3 [d#4,f#4]@10 f#4@4 ~@2, c#4@3 ~@3 f#4@4 a#4@5 ~@5 a#3@10 ~@2, ~@24 a#4@7 ~", // D#m
  W: "[g#3@4 ~@8 g#3@4 c#4@3 ~@9 c#4@2 ~@4 e4@4 ~@2 c#4@4 ~@12 c#4@3 ~@5 a#3@11 ~@25 d#4@4 [d#4,f#4]@8 ~@4 c#4@4 f4@16 f4@8 ~@4 b3@4 ~@2 b3@4 ~@2, [b3,d#4]@8 d#4@7 ~@5 c#4@7 ~@3 e4@4 ~@20 f#4@18 ~@12 d#4@8 d#4@8 ~@52 d#4@8, ~@4 g#3@6 b3@5 ~ g#3@29 ~@3 f#3@15 ~@17 b2@31 ~ b2@31 ~ g#2@14 ~@2, ~@6 g#4@9 ~ g#4@7 ~ g#4@7 ~ b4@5 ~ b4@8 ~@42 b4@20 ~@52, ~@24 b3@3 ~@13]/5", // D#m B
  X: "~@3 b3 ~@2 g#4@2, b3 ~ c#3@2, ~ g#4@3 ~@4",
  Y: "[~@4 f#4@4 ~@10 d#4@2 [d#4,f#4]@4 ~@2 c#4@2 f4@8 f4@4 ~@2 b3@2 ~ b3@2 ~, ~@16 b2@31 ~ b2@31 ~ g#2@14 ~@2, ~@5 d#4@2 d#4@2 ~@13 d#4@2, ~@6 b4@5 ~@13, ~@8 b3@3 ~@13]/3", // D#m
  Z: "[~@4 f#4@4 ~@2 d#4@4 ~@5 f#3@2 d#4@2 ~@3 c#4@2 f4@3 c#4@3 ~@2 f4@4 ~@2 b3@3 ~@3, ~ b2@2 b2@2 g#2, ~@9 d#4 ~@14]/3",
  AA: "~ e4 g#4@2 ~@3 c#4, e3 c#3, ~@9 e4@2 ~@5, ~@5 g#4@3",
  AB: "[~@4 b3 ~@3 a#3@3 ~@5, f#3@7 ~@3 b3@4 ~@18, ~@4 f#4@7 c#4@2 ~@19, ~@6 f#4@5 ~@5]/2",
  AC: "~@5 d#4@3 ~@4 [c#3,f#3,a#3]@4, f#2@15 ~ [f#2,a#3]@8 ~@8, ~@2 f#3@9 ~@5 [f#3,c#4]@4 ~@12, ~ g#3@2 ~@2 c#4@3, ~@6 e4@7 ~@5 f#4@14", // F# F#5
  AD: "~@3 e4@2 d#4@2 ~ [f#2,f#3,a#3]@4 [f#2,c#3,f#3,a#3]@4, f#2@13 ~@19, ~ f#3@4 ~@11, ~@4 g#3@7 ~@3 c#4@18", // F#
  AE: "[~@7 e4@4 d#4@6 ~@3 [c#4,f#4]@10 ~@3 [c#4,f#4]@11 ~@3 [b3,e4]@15 ~@2, f#2@17 b2@10 ~@4 a#2@10 ~@4 e2@13 ~@6, ~@2 f#3@15 ~ f#3@10 ~@4 g#3@10 ~@4 g#3@14 ~@4, ~@4 g#3@5 ~@10 b3@10 ~@35]/2", // F#5 E5
  AF: "[~@3 f#4@65 ~@28, f#2@17 ~@15, ~ [c#3,f#3]@56 ~@39, ~@2 c#4@61 ~@33, ~ a#3@29 ~@18]/3", // F#5
})).s("gm_epiano2").gain(0.2).pan(0.4)

// chords · epiano2 · soft notes
const epiano2_soft = note("<A ~@4 B C ~@4 B C ~@10 D E F ~ G H I J@3 K J@3 L@2 M@4 ~@7>".pickRestart({
  A: "~@2 f#2@15 ~@15", B: "~@12 g#3 ~@3", C: "~@8 e4@7 ~@17", D: "~@8 d#4@5 d#4@3, ~@4 g#3 ~@3",
  E: "~@4 a#3@8 c#4@4 f#4@9 ~@7", F: "~@5 e4@3 ~@8", G: "~@13 e4@2 ~",
  H: "~@12 e4@2 c#4@2 ~@4 c#4@3 ~@3 b3@2 c#4@4, ~@16 c#3@5 ~@11, ~@9 b3@4 ~@3", I: "~@13 f#4@3, ~@11 b3@5",
  J: "[~@6 b3@2 ~ g#3@2 g#3@2 ~@2 c#4@2 ~ c#4@4 c#4@2 ~ g#3@2 g#3@3 ~ g#2@2 e4@2 ~ b3@2 ~ e4@2 ~@5 c#4@2, ~@13 c#4@2 ~@20 e4@4 ~@3 c#4@3 e4@2 ~, ~@14 g#3@3 g#3@4 ~@9 g#3@2 ~@11 g#3@4 ~]/3",
  K: "~@3 b3@2 ~ b3@2 ~@5 f#4@3, f#3 ~@3, ~ b3@2 ~@8 b3@5, ~@2 c#4@3 c#4@4 ~@7",
  L: "[~@3 b3@2 ~ b3@2 ~ b3@2 ~@5 d#4@2 ~@2 b3@2 f#4@2 ~@3 g#3@2 ~ g#3@2, f#3@4 ~@10 d#4@2 ~@13 c#4@2 ~, ~@2 b3@4 ~@16 b3@4 f#4@4 f#4@5 ~@29, ~@4 c#4@6 c#4@8 ~@6 b4@5 ~@35]/2",
  M: "[~@3 g#3@2 ~ g#3@2 ~@7 b3@2 ~@2 b3@2 ~@2 e4@2 ~@4 e4@2 ~@4 b3@2 ~@2 f#3@2 ~@6 f#3@4 ~@13, ~ g#3@2 ~@8 g#3@2 b3@2 ~@7 b3@2 ~@4 c#4@2 ~@2 b2@2 ~@12 b3@2 ~@16, ~@2 c#4@3 c#4@2 ~@5 d#4@4 ~@5 e4@2 ~@4 e4@2 ~@5 c#4@3 c#4@4 ~@4 c#4@4 ~@15, ~@14 g#3@2 ~@15 g#3@2 b3@2 ~@3 b3@2 ~ f#3@6 ~@17]/4",
})).s("gm_epiano2").gain(0.11).pan(0.4)

// drums · kick
const kick = s("bd").struct("<~@22 A B C B@2 C D E C B F G C H D I B@2 D J C K ~@3 L M ~>".pickRestart({
  A: "~ x", B: "x ~@6 x!2 ~@7", C: "x!2", D: "x ~@6 x!2 ~@2 x ~@4", E: "x ~@3 x!5 ~@7", F: "x ~@7 x ~@2 x ~@4",
  G: "x ~@4 x!4 ~@7", H: "x ~@2 x ~@3 x!2 ~@7", I: "x!5 ~@3", J: "x ~@2 x!2 ~@3", K: "x", L: "~@23 x ~@2 x ~@5",
  M: "x!2 ~ x!2 ~@6 x!2 ~@19",
})).gain(0.57)

// drums · snare
const snare = s("sd").struct("<~@23 A B@4 C D B@2 C D B@2 C E B@4 ~@8>".pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~@2 x ~@3 x!2", D: "~ x!2 ~@9 x ~@3", E: "x!2 ~ x!3 ~ x!3 ~ x!3 ~ x ~@8 x ~@7",
})).gain(0.64)

// drums · low tom
const low_tom = s("lt").struct("<~@22 [~ x] [~@3 x ~@4] ~@9 [~@9 x ~@2 x ~ x ~@17] ~@8 [~@3 x] ~@7>").gain(0.57)
// … 33 more lines

More by Phil Collins