Strudelify
Against All Odds cover art

Against All Odds

Phil Collins

KeyB majorTempo60 bpm
0:00/0:00
// Against All Odds — Collins Phil
// 60 bpm, 4/4, key B major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 50 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(60/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 · epiano2 · "E.PIANO 2"
const epiano2 = note(`<
  A B C D E F G H C D E I G H J K L M J K N O@2 P Q R S T@5 U V@3 U W@3 X Y@2 Z AA AB AC AD@2 ~
>`.pickRestart({
  A: "~@5 d#4@3 f#3 ~@3 [c#3,f#3,a#3]@4, ~ f#3@4 ~@3 [f#2,a#3]@4 ~@4, ~@2 g#3@4 ~@3 f#4@7, ~@3 e4@4 ~ c#4@2 c#4@6", // F#
  B: "~@3 e4@2 d#4@2 ~ [f#2,f#3,a#3]@4 [f#2,c#3]@4, f#2@7 ~@9, ~ f#3@4 ~@7 [f#3,a#3] ~@3, ~@2 g#3@3 ~@2 c#4@9", // F# F#5 F#
  C: "[g#3,b3,d#4]!2 [a#3,c#4,f4]!2, g#2 a#2", // G#m A#m
  D: "[f#3,b3,d#4]@4 [f#3,b3,d#4]@4 [g#3,c#4,e4]@4 e4@2 e4 f#4, b2@7 ~ c#3@8, ~@3 [g#3,c#4]", // B C#m C#5
  E: "g#4@3 b4@2 g#4@2 e4 a#4@3 c#5@2 a#4@2 f#4, [e2,b3] [e2,c#4], e4@6 ~@2 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@8 g#2@7 ~, ~@3 b3", // D#5 D#m G#m
  G: "[c#4,e4,g#4] [c#4,g#4] [b3,e4,b4]!2, c#3!2", // C#m C#5 E5
  H: "[f#3,b3,c#4] ~ [f#2,f#3,a#3,c#4]!2, f#2 ~, ~ f#3 ~@2, ~@5 b3@2 f#4@9, ~@3 c#4 ~@4", // F#sus4 F#
  I: "[a#3,d#4]@4 ~@2 c#5@2 d#4 ~ a#4 b4 [d#4,g#4]@2 f#4 g#4, d#3@8 g#2@7 ~, ~ [a#3,d#4,f#4] [g#3,b3] b3, ~@4 b4 ~@3, ~@9 d#4@2 ~@5", // D#5 G#5 D#m G#m
  J: "[b3,d#4,f#4]!4, b2@15 ~", K: "[g#3,c#4,f4]!4, b2@15 ~", L: "[g#3,b3,d#4]!2 [b3,e4,g#4]!2, g#2@7 ~ e2@7 ~",
  M: "[g#3,c#4,e4]@4 [g#3,c#4,e4]@4 f#3 ~ b3 c#4 [f#2,f#3,a#3,c#4]@4, c#3@3 ~ [f#2,c#4]@2 ~@2, ~@4 b3 ~@3, ~@9 f#3@2 ~@5", // C#m F# F#5
  N: "g#3 ~@2 g#3 ~@3 b3, g#2@7 ~ e2@8, [b3,d#4]@4 [b3,d#4]@4 ~ b3@2 b3@2 e4@2 ~, ~@2 g#3@4 ~@4 e4@2 g#4@3 ~", // B
  O: "[~@6 c#4 g#3 [f#3,b3,c#4]@4 [f#3,b3,c#4]@4 ~@8 a#3@3 ~@5, c#3@8 f#2@19 ~@5, [c#4,e4]@2 [c#4,e4]@3 e4@2 ~@10 f#3@2 f#3@9 ~@4, ~ g#3@2 g#3@4 ~@9 [b3,c#4]@2 b3@3 c#4 b3 c#4@4 ~@5, ~@4 g#4@4 ~@12 f#4@7 ~@5]/2", // F#sus4 C#m Bsus2
  P: "~@6 g#4 b3, ~@4 b3@3 ~, ~@10 g#3@5 ~",
  Q: "c#4@4 a#4@3 ~ [b3,d#4]@2 ~@4 d#4@2, f4@7 ~@4 d#4@2 f#4@2 ~, a#3@2 ~@8 b3@2 b3@3 ~", // B
  R: "g#3 ~ g#4 c#4 b3 ~ [e4,g#4] b3, [c#4,e4]@3 ~ [e4,g#4]@2 ~@2, ~@2 g#3@5 ~@3 b3@4 ~@2", // E C#m E
  S: "[c#4,f#4]@2 ~@4 f#4 c#4 a#3@2 ~@4 d#4@2, a#4@5 a#4@2 ~@3 a#3@5 ~, ~@2 c#4@2 c#4@3 ~ d#4@5 f#4@2 ~, ~@3 f#4@3 ~@2 f#4@4 a#4@3 ~", // F#5
  T: "[g#3@2 ~@4 g#3@2 c#4@2 ~@4 c#4 ~@2 e4@2 ~ c#4@2 ~@6 c#4@2 ~@2 a#3@6 ~@10 b3 ~ d#4@2 [d#4,f#4]@4 ~@2 c#4@2 f4@8 f4@4 ~@2 b3@2 ~ b3 ~@2, [b3,d#4]@4 d#4@4 ~@2 c#4@4 ~ e4@2 ~@10 f#4@9 ~@6 d#4@4 d#4@4 ~@26 d#4@4, ~@2 g#3@3 b3@3 g#3@15 ~ f#3@8 ~@8 b2@16 b2@16 g#2@7 ~, ~@3 g#4@5 g#4@4 g#4@4 b4@3 b4@4 ~@21 b4@10 ~@26]/5", // D#m B
  U: "~@3 b3 ~@2 g#4@2, b3 ~ c#3@2, ~ g#4@3 ~@4",
  V: "[~@4 f#4@4 ~@8 b3 ~ d#4@2 [d#4,f#4]@4 ~@2 c#4@2 f4@8 f4@4 ~@2 b3@2 ~ b3 ~@2, ~@8 b2@16 b2@16 g#2@7 ~, ~@5 d#4@2 d#4@2 ~@13 d#4@2, ~@6 b4@5 ~@13]/3", // D#m
  W: "[~@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",
  X: "~ e4 g#4@2 ~@3 c#4, e3 c#3, ~@9 e4@2 ~@5, ~@5 g#4@3",
  Y: "[~@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",
  Z: "~@5 d#4@3 f#3 ~@3 [c#3,f#3,a#3]@4, f#2@2 [f#2,a#3] ~, ~ f#3@4 ~@11, ~@2 g#3@4 ~@3 f#4@7, ~@3 e4@4 ~ c#4@2 c#4@6", // F#
  AA: "~@3 e4@2 d#4@2 ~ [f#2,f#3,a#3]@4 [f#2,c#3,f#3,a#3]@4, f#2@7 ~@9, ~ f#3@4 ~@11, ~@2 g#3@3 ~@2 c#4@9", // F#
  AB: "~@3 e4@2 d#4@3 ~@2 [c#4,f#4]@5 ~, f#2@9 [b2,f#3,b3]@5 ~@2, ~ f#3@7 ~@8, ~@2 g#3@3 ~@11", // F#5 B5
  AC: "~ f#4@6 ~ e4@8, [a#2,g#3,c#4]@5 ~@2 [e2,g#3,b3]@7 ~@2", // A#m7 E
  AD: "[~ [c#4,f#4]@31, [f#2,c#3]@27 ~@5, ~ [f#3,a#3]@29 ~@2]/2", // F#5 F#
})).s("gm_epiano2").gain(0.2).pan(0.4)

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

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

// bass · fretless bass · "FRETLESS" · 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: "~@14 c#3 d#3", B: "~@3 d#3 ~@3 d#3", C: "~@7 a#2", D: "~@8 c3 ~@6 d#3", E: "~@7 a#2 ~@8", F: "~@6 c#3 d#3 ~@8",
  G: "~@7 e3 ~@8", H: "~@4 b2 ~@11", I: "~@2 f#2 ~@3 f#2!2 ~@8", J: "~@2 f#2 ~@5", K: "~@7 c#3 ~@6 f#2@2",
  L: "~@2 f#2!2 ~@12", M: "~@3 f#2 ~@4",
})).s("gm_fretless_bass").gain(0.34)

// chords · pad warm · "WARM PAD"
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@2 X Y Z@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 a#3, [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]@2 ~ a#3, b3@3 ~, ~ [f#3,c#4]]/2", J: "[f#3,b3,d#4]", K: "[f3,g#3,c#4]",
  L: "[[f#3,d#4]@2 [g#3,e4]@2 [g#3,e4]@2 ~ a#3, 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] b3@2 a#3@2 [f#3,b3,d#4], ~ [f#3,c#4]@4 ~]/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] [g#3,b3,e4]@2 b3 a#3 [f#3,b3,d#4]@2 [f3,g#3,c#4]@2 [f#3,d#4] [g#3,e4]!2, ~@3 [f#3,c#4]@2 ~@4 b3@3]/6", // B E B C# D#m C#m F#5
  T: "[~ a#3 [f#3,b3,d#4]@4 [f3,g#3,c#4]@4 [f#3,d#4]@2 [g#3,e4]@2 [g#3,e4]@2 ~ a#3 [f#3,b3,d#4]@4 [g#3,c#4,f4]@4 [g#3,b3,d#4]@2, [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 a#3, [f#3,c#4]]/2", W: "g#3 a#3", X: "g#3 [f#3,b3,c#4]",
  Y: "g#3@3 ~ f#3@4 [e3,g#3,b3]@8, [a#2,c#4]@7 ~@9", Z: "[~ [f#2,f#3,a#3,c#4]@31]/2",
})).s("gm_pad_warm").gain(0.42)

// chords · electric guitar clean · "CLEAN GTR"
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, ~@2 b3@6 ~@2 b3@5 ~, ~ d#4 ~ e4",
  C: "~@3 b4@2 ~@9 f#4@2, ~ b3@5 b3@2 c#4@2 c#4@2 f#4@2 ~@2, ~@2 e4@3 e4@2 e4@2 f#4@2 c#5@2 c#4@2 ~",
  D: "~@7 f#4 ~@2 a#3@2 b3 g#3 [c#4,e4] [d#4,f#4], g#3 f#4 a#4@2 ~@4, ~ d#4@2 d#4@2 f#4@2 ~@9, ~@6 d#4@2 ~ g#3@2 ~@5", // C#m D#m
  E: "~@4 e4@4 ~@4 e4@3 ~, ~ g#3@2 g#3@3 ~@3 g#3@2 g#3@5, ~@2 b3@3 ~@5 b3@6",
  F: "~@5 f#4 ~@2 a#3@7 ~, ~@3 b3@5 ~@8, ~@2 c#4 c#4@5", G: "~@7 b3, ~ b3@2 b3@2 b3@2 ~, ~ d#4@2 d#4, ~ f#3",
  H: "~@4 g#3 ~@2 g#3, ~ c#4@2 c#4@2 g#3@2 ~, ~@4 f4@7 c#4@2 c#4@3, ~@3 f4",
  I: "~@3 d#4 e4 ~@2 b3, ~ d#4@2 ~@2 b3@2 ~, ~@4 g#4@4 ~@3 e4@2 e4@3, ~@3 g#4",
  J: "~@3 b3 ~@3 f#4, ~ g#3@2 g#3@4 ~ f#3@4 a#3@4, ~@2 b3@3 e4@3 ~ b3@2 f#4@3 ~@2, ~@4 g#4@3 ~@3 c#4@6",
  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: "[~@6 d#4@2 e4@2 ~@4 b3@3 ~@5 b3@2 ~@8 b3@3 ~@5 a#3@15 ~@3 b3@2 [b3,d#4]@3 ~, ~@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, ~@12 g#4@2 ~@6 g#4@3 ~@8 f#4@4 ~ f#4@6 ~@22]/4", // B
  N: "~@2 c#4@2 [c#4,f4]@3 ~@3 d#4@2 [d#4,f#4]@3 ~, a#3@2 ~@2 b3@3 ~", // C# D#m
  O: "~@6 b3@2 g#4@3 b4@2 ~ e4@2, ~ b3@2 ~@5, ~@4 e4@4 ~@5 g#4@2 ~",
  P: "c#4@2 ~ c#5@2 ~ f#4@2 ~@6 a#4@2, f#4@5 a#4@2 ~@3 c#4@3 c#4@3, ~@2 c#4@5 ~ a#3@8, ~@11 f#4@5",
  Q: "~ f#3 g#3 a#3 ~@3 e4, ~@8 g#3@7 ~, ~@4 [e4,g#4]@2 e4 ~, ~@11 b3@5, ~@13 g#4@3", // E
  R: "[b3@3 ~@3 e4@2 ~@8 a#3@8 ~@12 d#4@4 ~@12 f4@4 ~@6 d#4@2 e4@2 ~@4 b3@3 ~@5 b3@2, g#3@7 ~@25 f#3@6 ~@10 g#3@5 ~@20 g#3@2 ~@5, [e4,g#4]@4 e4@2 ~@6 c#4@2 c#4@4 ~@10 d#4@8 ~@6 c#4@4 c#4@4 c#4@5 ~@3 d#4@4 ~@5 e4@2 e4@6 e4@2 e4@2 ~, ~@3 b3@4 ~@4 b3@4 b3@5 ~@6 b3@4 b3@4 b3@6 ~@26 b3@4 ~@4 b3@2 ~@4, ~@5 g#4@3 ~@5 f#4@4 ~@27 f4@4 ~@12 g#4@7 ~ g#4@8 g#4@3 ~]/5", // E
  S: "[~@3 c#4@2 ~@2 f#4 ~@12 d#4@4 ~@12 f4@4 ~@6 d#4@2 e4@2 ~@4 b3@3 ~@5 b3@2, b3@5 b3@3 ~@2 b3@4 b3@4 b3@6 ~@2 c#4@4 c#4@4 c#4@5 ~@3 d#4@4 ~@5 e4@2 e4@5 b3@2 ~@4, ~ c#4@2 ~@3 c#4@2 ~@4 d#4@8 ~@8 f4@4 ~@12 g#4@7 ~ g#4@8 g#4@3 ~, ~@2 f#4@5 ~@9 f#3@6 ~@10 g#3@5 ~@13 b3@4 ~@3 g#3@2 e4@2 e4@2 ~]/4",
  T: "[~@3 c#4@2 ~@2 f#4 ~@12 d#4@4 ~@12 f4@4 ~@6 d#4@2 e4@2 ~@4 b3@2 ~@6 b3@2, b3@5 b3@3 ~@2 b3@4 b3@4 b3@6 ~@2 c#4@4 c#4@4 c#4@5 ~@3 d#4@4 ~@5 e4@2 e4@5 b3@4 ~@2, ~ c#4@2 ~@3 c#4@2 ~@4 d#4@8 ~@8 f4@4 ~@12 g#4@7 ~ g#4@4 g#4@3 e4@2 e4@2 ~, ~@2 f#4@5 ~@9 f#3@6 ~@10 g#3@5 ~@13 b3@4 ~@3 g#3@6 ~, ~@60 g#4@3 ~]/4",
  U: "[~@7 b3 a#3@8, b3@8 f#3@7 ~@17, ~@2 c#4@4 c#4@3 b3@2 b3@3 ~@18, ~@4 f#4@8 f#4@5 ~@15, ~@10 c#4@3 c#4@7 ~@12]/2",
})).s("gm_electric_guitar_clean").gain(0.26).pan(0.6)

// chords · piano · "A.PIANO 1"
const piano = note("<A B C D E F G H C D E I G H J K L M N O P Q@2 ~@20 A R S ~@4>".pickRestart({
  A: "~@5 d#4@3 f#3 ~@3 [c#3,f#3,a#3]@4, f#2@2 [f#2,a#3] ~, ~ f#3@4 ~@11, ~@2 g#3@4 ~@3 f#4@7, ~@3 e4@4 ~ c#4@2 c#4@6", // F#
  B: "~@3 e4@2 d#4@2 ~ [f#2,f#3,a#3]@4 [f#2,c#3]@4, f#2@7 ~@9, ~ f#3@4 ~@7 [f#3,a#3] ~@3, ~@2 g#3@3 ~@2 c#4@9", // F# F#5 F#
  C: "[g#3,b3,d#4]!2 [a#3,c#4] [c#4,f4], g#2 a#2", // G#m A#m C#
  D: "[f#3,b3,d#4]@4 [f#3,b3,d#4]@4 [c#4,e4]@4 e4@2 e4 f#4, b2@7 ~ c#3@8, ~@3 [g#3,c#4]", // B C#m C#5
  E: "g#4@3 b4@2 g#4@2 e4 a#4@3 c#5@2 a#4@2 f#4, [e2,b3] [e2,c#4], e4@6 ~@2 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@8 g#2@7 ~, ~@3 b3", // D#5 D#m
  G: "[c#4,e4,g#4] [c#4,g#4] [b3,e4,b4]!2, c#3!2", // C#m C#5 E5
  H: "[f#3,b3,c#4] ~ [f#2,f#3,a#3,c#4]!2, f#2 ~, ~ f#3 ~@2, ~@5 b3@2 f#4@9, ~@3 c#4 ~@4", // F#sus4 F#
  I: "[a#3,d#4]@4 ~@2 c#5@2 d#4 ~ a#4 b4 [d#4,g#4]@2 f#4 g#4, d#3@8 g#2@7 ~, ~@2 [d#4,f#4]@2 b4 ~@3, ~@9 d#4@2 ~ b3@4", // D#5 G#5 D#m
  J: "[b3,d#4]@4 d#4@4 [d#4,f#4]@4 [b3,d#4]@3 ~, b2@15 ~", K: "[g#3,c#4,f4] [c#4,f4] g#3 [g#3,c#4,f4], b2@15 ~",
  L: "[b3,d#4] [g#3,b3] [b3,e4,g#4] [b3,g#4], g#2@7 ~ e2@7 ~", // B G#m E
  M: "[g#3,c#4,e4]@4 [g#3,c#4,e4]@4 f#3 ~ b3 c#4 [f#2,f#3,a#3,c#4]@4, c#3@3 ~ [f#2,c#4]@2 ~@2, ~@4 b3 ~@3, ~@9 f#3@2 ~@5", // C#m F# F#5
  N: "[b3,d#4] [b3,d#4,f#4]!2 b3, b2@15 ~", O: "[g#3,c#4,f4]!3 [g#3,c#4], b2@15 ~",
  P: "[b3,d#4]@2 ~ g#3 ~ e4 g#4 b3, g#2@7 ~ e2@8, g#3@2 ~@2 [b3,d#4]@4 ~ b3@2 ~@5", // B
  Q: "[c#4@2 ~@4 c#4 g#3 [f#3,b3,c#4]@4 [f#3,b3,c#4]@4 ~@8 a#3@3 ~@5, c#3@8 f#2@19 ~@5, ~@2 c#4@4 ~@10 [b3,c#4]@2 b3@4 b3 c#4@4 ~@5, ~@3 g#3@4 ~@10 f#3@2 f#3@9 ~@4, ~@4 g#4@4 ~@12 f#4@7 ~@5]/2", // F#sus4 Bsus2
  R: "~@3 e4@2 d#4@2 ~ [f#2,c#3,f#3]@4 [f#2,c#3,f#3,a#3]@4, f#2@7 ~@9, ~ f#3@4 ~@11, ~@2 g#3@3 ~@2 c#4@9", // F#5 F#
  S: "~@3 e4@2 d#4@3 ~@8, f#2@9 ~@7, ~ f#3@7 ~@8, ~@2 g#3@3 ~@11",
})).s("gm_piano").gain(0.37).pan(0.4)

// chords · piano · "A.PIANO 1" · 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: "~@2 f4 a#3", B: "~@2 g#3 ~", C: "~@4 a#3@4 [g#3,b3]@4 g#3 ~@3", D: "~ e4 ~@2", E: "f#4 [b3,f#4] b3 f#4",
  F: "~ g#3 [c#4,f4] ~", G: "g#3 d#4 ~ e4", H: "f#4 ~@2 [d#4,f#4]", I: "~@3 f4", J: "~@2 g#3@4 ~@5 b3@2 e4@2 ~",
  K: "~@2 e4@3 e4@2 ~@9, e4 ~@7, ~ g#3@2 ~@13", L: "~@5 c#4@2 ~@9",
})).s("gm_piano").gain(0.21).pan(0.4)

// chords · string ensemble 2 · "SLOWSTRING"
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]@2 ~ a#3, b3@3 ~, ~ [f#3,c#4]]/2", E: "[f#3,b3,d#4]", F: "[f3,g#3,c#4]",
  G: "[[f#3,d#4]@2 [g#3,e4]@2 [g#3,e4]@2 ~ a#3, 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] [c#5,f#5]@4 [f#3,b3,d#4]]/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]@2 [c#5,a#5] ~ [b4,g#5]@2 [a#4,f#5]@2 [c#5,e5]@8 e5@2 d#5@2 c#5@2 b4@2 [c#4,c#5,f#5]@16 f#5@12 b5@2 a#5@2 g#5@14 a#5@2 b5@2 a#5@2 g#5@2 f#5@2, [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: "~@9 c#4@3 f#4@4, ~ [f#3,b3]", U: "~@3 f#4@4 ~ [e3,g#3,b3]@8, c#4@9 ~@7, [a#2,g#3]@7 ~@9",
  V: "[[f#2,c#3,f#3,a#3]@31 ~]/2", // F#
})).s("gm_string_ensemble_2").gain(0.29)

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

// 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: "~@11 x ~ x ~@2",
  M: "x!3 ~@2 x!2 ~@9",
})).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!8 ~@4 x ~@3",
})).gain(0.64)

// drums · low tom
const low_tom = s("lt").struct("<~@22 [~ x] [~@3 x ~@4] ~@9 [~@5 x!3 ~@8] ~@8 [~@3 x] ~@7>").gain(0.57)

// drums · hihat
const hihat = s("hh").struct("<~@23 A B@4 C D ~@11 E F ~@7>".pickRestart({
  A: "~@4 x!4", B: "x!8", C: "x ~ x ~ x ~ x ~@3 x!2 ~@4", D: "~@3 x ~@4", E: "x ~ x!3 ~ x!3 ~ x!3 ~ x!2", F: "x ~@6 x",
})).gain(0.43)

// drums · mid tom
const mid_tom = s("mt").struct("<~@22 A B ~@5 C ~@3 D ~@8 E ~@7>".pickRestart({
  A: "~@7 x", B: "~ x!3 ~ x ~@10", C: "~@5 x!2 ~@9", D: "~@4 x!2 ~@10", E: "~@6 x ~@2 x ~ x ~@4",
})).gain(0.64)

// drums · high tom
const high_tom = s("ht").struct("<~@22 A ~@6 B ~@3 C ~@8 D ~@7>".pickRestart({
  A: "~@5 x!2 ~", B: "~ x!4 ~@11", C: "~@3 x ~@12", D: "~ x!2 ~@5",
})).gain(0.64)

// drums · crash
// … 15 more lines

More by Phil Collins