Strudelify
Easy Lover cover art

2016 · No Jacket Required

Easy Lover

Phil Collins

KeyA♭ majorTempo132 bpm
0:00/0:00
// Easy Lover — Collins Phil
// 132 bpm, 4/4, key G# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 5 "Dist-Guitar" distortion guitar (copy of ch 6 "Over-Guitar" overdriven guitar, 0.104 beats early)
// note: Full arrangement: all 144 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(132/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 · synth strings 1 · "Synth Strings"
const synth_strings_1 = note(`<
  A@4 B@5 C@4 D@4 E@12 F@2 ~@15 G@2 H I H J H K@4 E@4 L@4 E@4 F@2 ~@15 G@2 H M H M H N@4 O@5 P@3 Q R@4 S@4 T@4 H U H U H
  V@4 E@4 W@4 E@4 W@4 ~
>`.pickRestart({
  A: "[[bb3,db4,eb4,ab4]@44 ~ [c4,eb4,ab4]@51]/4", // Bbm7 Ab
  B: "[[db4,f4,bb4,c5]@44 ~ [eb4,ab4,bb4,c5]@23 ~ [ab3,db4,f4]@12 [bb3,eb4,g4]@12 [c4,eb4,ab4]@26 ~]/5", // Bbm Ab Db Eb Ab
  C: "[[bb3,db4,ab4]@9 [c4,eb4,g4]@12 [c4,eb4,ab4]@23 ~ [ab3,db4,f4]@12 [bb3,eb4,g4]@12 [c4,eb4,ab4]@26 ~]/4", // Bbm7 Cm Ab Db Eb Ab
  D: "[[ab3,db4,f4]@9 [bb3,eb4,g4]@12 [c4,eb4,ab4]@24 [ab3,db4,f4]@12 [bb3,eb4,g4]@12 [c4,eb4,ab4]@25 ~@2]/4", // Db Eb Ab Db Eb Ab
  E: "[[bb3,db4,ab4]@9 [bb3,eb4,g4]@12 [c4,eb4,ab4]@24 [ab3,db4,f4]@12 [bb3,eb4,g4]@12 [c4,eb4,ab4]@26 ~]/4", // Bbm7 Eb Ab Db Eb Ab
  F: "[[bb3,db4,ab4]@12 [bb3,eb4,g4]@9 [c4,eb4,ab4]@22 ~@5]/2", G: "[~@21 [ab3,db4,f4]@26 ~]/2",
  H: "[bb3,eb4,g4]@9 [c4,f4,ab4]@14 ~", I: "[ab3,db4]@11 ~, f4", J: "[db4,f4], ab3@11 ~",
  K: "[[db4,f4,bb4]@43 ~@2 [ab3,db4,f4]@12 [bb3,eb4,g4]@12 [c4,eb4,ab4]@25 ~@2]/4", // Bbm Db Eb Ab
  L: "[[bb3,db4,ab4]@9 [bb3,eb4,g4]@12 [eb4,ab4]@24 [ab3,db4,f4]@12 [bb3,eb4,g4]@12 [c4,eb4,ab4]@26 ~, ~@7 c4@7 ~@18]/4", // Bbm7 Eb Ab5 Db Eb Ab
  M: "[ab3,db4,f4]", N: "[[db4,f4,ab4,bb4]@44 ~ [c4,eb4,f4,ab4]@50 ~]/4",
  O: "[[db4,f4,bb4,c5]@44 ~ [eb4,f4,ab4,bb4,c5]@24 [ab3,db4,f4]@12 [bb3,eb4,g4]@12 [c4,eb4,ab4]@26 ~]/5", // Bbm Fm7 Db Eb Ab
  P: "[[ab3,db4,f4]@9 [bb3,eb4,g4]@12 [c4,eb4,ab4]@23 ~ [ab3,db4,f4]@12 [bb3,eb4,g4]@14 ~]/3", Q: "[c4,eb4,ab4]",
  R: "[[ab3,db4,f4]@9 [bb3,eb4,g4]@12 [c4,eb4,ab4]@23 ~ [ab3,db4,f4]@11 ~ [bb3,eb4,g4]@11 ~ [c4,eb4,ab4]@26 ~]/4", // Db Eb Ab Db Eb Ab
  S: "[[ab3,db4,f4]@8 ~ [bb3,eb4,g4]@11 ~ [c4,eb4,ab4]@24 [ab3,db4,f4]@10 ~@2 [bb3,eb4,g4]@11 ~ [c4,eb4,ab4]@25 ~@2]/4", // Db Eb Ab Db Eb Ab
  T: "[[ab3,db4,f4]@9 [bb3,eb4,g4]@11 ~ [c4,eb4,ab4]@23 ~ [ab3,db4,f4]@11 ~ [bb3,eb4,g4]@11 ~ [ab3,db4,f4]@25 ~@2]/4", // Db Eb Ab Db Eb Db
  U: "[ab3,db4,f4]@23 ~", V: "[[db4,f4,ab4,bb4]@44 ~ [ab3,db4,f4]@12 [bb3,eb4,g4]@12 [c4,eb4,ab4]@25 ~@2]/4",
  W: "[[bb3,db4,ab4]@9 [bb3,eb4,g4]@12 [c4,eb4,ab4]@24 [ab3,db4,f4]@12 [bb3,eb4,g4]@12 [c4,eb4,ab4]@25 ~@2]/4", // Bbm7 Eb Ab Db Eb Ab
})).s("gm_synth_strings_1").gain(0.36)

// chords · overdriven guitar · "Over-Guitar"
const overdriven_guitar = note(`<
  A@4 B@6 C@7 D@12 E@2 F G H I@2 J@2 K L G H I@2 M@2 N@2 O@2 P@2 Q R@4 D@12 E@2 F G H I@2 J@2 K L G H I@2 M@2 N@2 O@2
  P@2 Q S@4 T@3 ~ U@3 V W X Y Z@5 AA@5 O@2 P@2 Q AB@4 D@16 AC
>`.pickRestart({
  A: "[~ [gb2,gb3]@41 ~ [gb2,gb3]@3 [f2,f3]@50]/4", // Gb F
  B: "[~ [gb2,gb3]@40 ~@2 [gb2,gb3]@3 [f2,f3]@23 ~ [ab3,db4]@11 ~ [bb3,eb4]@11 ~ [c4,f4]@8 b3 [bb3,eb4,e4] [a3,d4] [ab3,db4] [g3,c4] [gb3,b3] ~@3 ab4 c5 ~ ab4 c5 ~@2 c5@9 [g4,b4] [f4,gb4,bb4] [e4,ab4,a4] [eb4,g4] [d4,gb4] [db4,f4] [c4,e4] ~@8 eb3@2, ~@23 db3@4 eb3@4 f3@3 ~@5 ab4@3 ~@6]/6", // Gb F Db5 Eb5 F5 Eb D5 Db5 …
  C: "[~@4 f3@3 eb3@3 c3@3 f3@3 ~@6 [ab3,db4]@11 ~ [bb3,eb4]@11 ~ [c4,f4]@8 b3 [bb3,eb4,e4] [a3,d4] [ab3,db4] [g3,c4] [gb3,b3] ~@3 ab4 c5 ~ ab4 c5 ~@2 c5@9 [g4,b4] [f4,gb4,bb4] [e4,ab4,a4] [eb4,g4] [d4,gb4] [db4,f4] [c4,e4] ~@8 eb3@6 f3@3 eb3@3 c3@3 f3@3 ~@6 [ab3,db4]@11 ~ [bb3,eb4]@11 ~ [c4,f4]@8 b3 [bb3,eb4,e4] [a3,d4] [ab3,db4] [g3,c4] [gb3,b3] ~@12, ~@7 db3@4 eb3@4 f3@3 ~@5 ab4@3 ~@13 db3@4 eb3@4 f3@3 ~@6]/7", // Db5 Eb5 F5 Eb D5 Db5 C5 B5 …
  D: "[~@22 f3@6 f3@3 eb3@3 c3@3 f3@3 ~@6 [ab3,db4]@11 ~ [bb3,eb4]@11 ~ [c4,f4]@8 b3 [bb3,eb4,e4] [a3,d4] [ab3,db4] [g3,c4] [gb3,b3] ~@12, ~@15 db3@4 eb3@4 f3@3 ~@6]/4", // Db5 Eb5 F5 Eb D5 Db5 C5 B5
  E: "[~@22 [c4,f4]@21 [b3,e4] [bb3,eb4] [a3,d4] [ab3,db4] [g3,c4], ~@7 f3@7 ~@2]/2", // F5 E5 Eb5 D5 Db5 C5
  F: "[gb3,b3] db3@3 ~@6 c3@3 db3@3 ~@8", G: "~ db3@3 ~@6 db3@3 ~@3 c3@3 ~@3 db3@2", H: "~@10 c3@3 db3@3 ~@8",
  I: "[~ db3@3 ~@6 db3@3 ~@3 eb3@2 ~@4 f3@6 f3@3 eb3@3 c3@3 f3@3 ~@6 eb3@2]/2",
  J: "[~ f3@3 ~@6 f3@2 ~@4 eb3@2 ~@4 f3@6 f3@3 eb3@3 c3@3 f3@3 ~@8]/2", K: "~ f3@3 ~@6 f3@2 ~@4 c3@2 ~@4 db3@2",
  L: "~@10 c3@2 ~ db3@3 ~@8", M: "[~ f3@3 ~@6 f3@2 ~@4 eb3@2 ~@4 f3@6 f3@3 eb3@2 ~ c3@2 ~ f3@3 ~@8]/2",
  N: "[~ f3@3 ~@6 f3@3 ~@3 c3@3 b2@3 bb2@6 f3 ~@2 [ab3,db4] ~@2 f3 ~@2 [ab3,db4] ~@2 f3 ~@2 [ab3,db4] ~@2 f3 ~]/2", // Db5
  O: "[~ g3@3 bb3@3 eb4@2 ~ bb3@6 bb3@3 bb3@3 ab3@8 ~ [ab3,db4] ~@2 f3 ~@2 [ab3,db4] ~@2 f3 ~@2 [ab3,db4] ~@2 f3 ~]/2", // Db5
  P: "[~ g3@3 bb3@3 eb4@2 ~ bb3@6 db4@3 f4@3 eb4@7 ~@2 [ab3,db4] ~@2 f3 ~@2 [ab3,db4] ~@2 f3 ~@2 [ab3,db4] ~@2 f3 ~]/2", // Db5
  Q: "~ g3@3 bb3@3 eb4@2 ~ bb3@6 bb3@3 bb3@3 ab3@2",
  R: "[~ [gb2,gb3]@42 ~@3 [ab3,db4]@11 ~ [bb3,eb4]@11 ~ [c4,f4]@8 b3 [bb3,eb4,e4] [a3,d4] [ab3,db4] [g3,c4] [gb3,b3] ~@12, ~@15 db3@4 eb3@4 f3@3 ~@6]/4", // Gb Db5 Eb5 F5 Eb D5 Db5 C5 …
  S: "[~ [gb2,gb3]@40 ~@2 [gb2,gb3]@3 [f2,f3]@50]/4", T: "[~ [gb2,gb3]@40 ~@2 [gb2,gb3]@3 f3@23 ~@3, ~@46 f2@21 ~@5]/3",
  U: "[~@3 [eb4,bb4]@3 [f4,c5] f4 c5 [f4,c5] f4 c5 [f4,c5]@3 b4 [a4,bb4] [g4,ab4] f4@3 ab4@9 bb4@3 ~@6 c4@3 ab4@3 bb4@9 ab4@3 f4@3 ab4@3 db5@3 bb4@6, ~@18 gb4 ~@11 a4 ~@32 c5 ~@8]/3", // Eb5 F5 Bbmaj7 Abmaj7
  V: "c5@3 f4@2 ~ ab4@7 ~@2 f3@4 gb3 g3 ab3 a3 bb3, ~@6 g4 ~@17",
  W: "[ab4,c5]@3 f4 ~ [ab4,c5]@3 f4 ~ c5@7 [ab4,b4] [g4,bb4] [f4,gb4,ab4,a4] [e4,g4] f3@3, ~@9 ab4@7 ~@8", // Ab Abm Gm Em
  X: "ab3 bb3 bb3@2 ab3 f3 ab3 f3, ~@12 g3 ~@5 g3 ~@5",
  Y: "bb3@3 c5@4 ~ c5@2 f4@2 [gb4,db5]@6 d5 db5 [bb4,b4,c5] [e4,ab4] ~@2, ~@3 ab4@8 ~@10 f4@3", // Gb5 E
  Z: "[ab4@3 bb4@3 bb4@6 ab4@3 f4@3 ab4@3 eb5@9 eb5 ~ c5 bb4 ~@2 bb4@3 c5 ~@2 ab4 ~ f4 bb4@2 ~ bb4 ~@2 g4@2 ~ eb4 gb4 f4@2 ~@2 c4 ~@2 c4@5 ~ bb3@2 ~ f3 ~@2 ab3@2 ~ c4@3 eb4 ~ e4 f4 ~ g4 ab4 ~@2 bb4 ~@2 g4@2 bb4@3 bb4 ab4 ~ b4@3 ~ bb4@2 db5@6 ~ db5 ~@2 c5@2 eb5, ~@12 g4 ~@22 c5@2 ~@4 bb4@2 ~@4 ab4@2 ~ ab4@2 ~ f4@2 ~@4 eb4@2 ~ bb3@2 ~@7 ab3@2 ~ g3@2 ~ bb3@2 ~@10 g4@2 ~ ab4@2 ~@10 c5@2 ~@14]/5",
  AA: "[[e5,f5]@2 ~ eb5@3 f5@5 ~ [e5,f5] ~@2 c5@2 ~ bb4 ~@2 c5@6 f4@2 ~ ab4@2 ~ bb4@2 ~ eb5@2 ~ ab5@3 eb5@2 ~ f5@6 f5@3 f5@6 f5@3 ab5@3 bb5@3 bb5@6 bb5@6 bb5@6 bb5@3 a5@3 ab5@19 ~@8, ~@14 eb5@2 ~@5 b4 ~@17 g5 ~@5 e5 ~@74]/5", // Fmaj7
  AB: "[~ gb2@42 ~@3 [ab3,db4]@11 ~ [bb3,eb4]@11 ~ [c4,f4]@8 b3 [bb3,eb4,e4] [a3,d4] [ab3,db4] [g3,c4] [gb3,b3] ~@12, ~@15 db3@4 eb3@4 f3@3 ~@6]/4", // Db5 Eb5 F5 Eb D5 Db5 C5 B5
  AC: "~@11 eb3",
})).s("gm_overdriven_guitar").gain(0.49).pan(0.7)

// other · brass section
const brass_section = note(`<
  ~@15 A@2 B@2 C@2 D E F@2 G@2 H@2 I@2 ~@23 J@3 B@2 K@2 L@2 M@2 N@2 O@2 P@2 ~@23 Q@3 ~@27 J@3 B@2 R@2 D S F@2 N@2 H@2
  T@2 U@2 ~
>`.pickRestart({
  A: "[~@12 bb4@5 ~ f5@2 ~ eb5@6 c5@3 ~@9 c5@3 f5@3 g5@2 ~]/2",
  B: "[ab5@5 ~ g5@4 ~@2 eb5@5 ~ c5@2 ~ f5@5 ~ f5@2 ~@19]/2", C: "[~@12 db5@6 f5@2 ~ eb5@6 c5@3 ~@9 c5@3 f5@3 g5@2 ~]/2",
  D: "ab5@3 ab5 ~@2 g5@3 g5@3 eb5@3 f5@6 f5@3, ~@21 e5 ~@2", E: "~ c5 ~@6, ~ eb5 ~@10",
  F: "[~@6 db5@3 db5@2 ~ c5@6 f5@2 ~ eb5@6 c5@3 ~@9 c5@3 f5@3 g5@2 ~]/2",
  G: "[ab5@5 ~ g5@4 ~@2 eb5@3 c5@4 ~@2 f5@5 ~ f5@2 ~@19]/2",
  H: "[~@6 db5@4 ~@2 c5@6 f5@2 ~ eb5@6 c5@3 ~@9 c5@3 f5@3 g5@2 ~, ~@6 c5 ~@41]/2",
  I: "[ab5@3 ab5 ~@2 g5@3 eb5@5 ~ f5@6 f5@19 ~@8, ~@21 e5 ~@26]/2",
  J: "[~@21 db5@8 ~ db5@2 ~ db5@9 f5@2 ~ eb5@6 c5@3 ~@9 c5@3 f5@3 g5@2 ~]/3",
  K: "[~@12 eb5@6 f5@2 ~ eb5@6 c5@3 ~@9 c5@3 f5@3 g5@2 ~]/2",
  L: "[ab5@3 ab5 ~@2 g5@3 g5@3 eb5@3 f5@6 f5@5 ~ c5@2 ~@19, ~@21 e5 ~@4 eb5@2 ~@20]/2",
  M: "[~@6 db5@3 db5@2 ~ bb4@6 f5@2 ~ eb5@6 c5@3 ~@9 c5@3 f5@3 g5@2 ~]/2",
  N: "[ab5@5 ~ g5@4 ~@2 eb5@3 c5@5 ~ f5@5 ~ f5@2 ~@19]/2",
  O: "[~@6 c5 db5@4 ~ bb4@6 f5@2 ~ eb5@6 c5@3 ~@9 c5@3 f5@3 g5@2 ~]/2",
  P: "[ab5@3 ab5 ~@2 g5@3 eb5@5 ~ f5@6 f5@14 ~@13, ~@21 e5 ~@26]/2",
  Q: "[~@18 [bb4,g5]@3 [ab4,f5]@16 ~@2 [g4,eb5]@5 ~ [ab4,f5]@27]/3", // Eb Db Cm Db
  R: "[~@12 c5@6 f5@2 ~ eb5@6 c5@3 ~@9 c5@3 f5@3 g5@2 ~]/2", S: "~@3 c5@2 ~@19, ~ eb5 ~@10",
  T: "[ab5@3 ab5 ~@2 g5@3 eb5@5 ~ f5@6 f5@5 ~@22, ~@21 e5 ~@26]/2",
  U: "[~@12 c5@5 ~ f5@2 ~ eb5@6 c5@3 ~@9 c5@3 f5@3 g5@2 ~]/2",
})).s("gm_brass_section").gain(0.8)

// bass · electric bass finger · "Bass"
const bass = note(`<
  A@4 B@5 C@4 D@4 E@4 F@4 G@4 H@2 I J K L@2 M@2 N O J O P@2 Q@2 R@2 S@2 T@2 U V@4 E@4 W@4 X@4 Y@2 I J K L@2 M@2 N O J O
  P@2 Z@2 R@2 AA@2 AB@2 AC AD@4 AE@5 AF@3 AG AH@4 AI@4 AJ@4 AK@2 AL@2 U AM@4 AN@4 AO@4 AP@4 AO@4 AQ
>`.pickRestart({
  A: "[gb1@40 ~@2 gb1@3 f1@47 ~@4]/4",
  B: "[gb1@39 ~@3 gb1@3 f1@21 ~@3 db2@12 eb2@12 f2@5 ~ f2@3 eb2@3 c2@3 f2@3 ~@3 c2@3 b1@3]/5",
  C: "[bb1@7 ~@2 c2@10 ~@2 f2@5 ~ f2@3 eb2@3 c2@2 ~ f2@3 ~@6 db2@11 ~ eb2@10 ~@2 f2@6 f2@3 eb2@3 c2@3 f2@4 ~@2 c2@3 b1@3]/4",
  D: "[bb1@8 ~ c2@11 ~ f2@6 f2@3 eb2@3 c2@3 f2@3 ~@6 db2@10 ~@2 eb2@10 ~@2 f2@6 f2@3 eb2@3 c2@3 f2@3 ~@3 c2@3 b1@3]/4",
  E: "[bb1@8 ~ c2@6 eb2@3 c2@3 f2@5 ~ f2@3 eb2@3 c2@3 f2@4 ~@5 db2@12 eb2@12 f2@6 f2@3 eb2@3 c2@3 f2@4 ~@2 c2@3 b1@3]/4",
  F: "[bb1@8 ~ c2@12 f2@6 f2@3 eb2@3 c2@3 f2@4 ~@5 db2@11 ~ eb2@10 ~@2 f2@5 ~ f2@3 eb2@3 c2@3 f2@3 ~@3 ab1@3 a1@3]/4",
  G: "[bb1@8 ~ c2@11 ~ f2@5 ~ f2@3 eb2@3 c2@3 f2@4 ~@5 db2@11 ~ eb2@10 ~@2 f2@5 ~ f2@3 eb2@3 c2@2 ~ f2@3 ~@3 ab1@3 a1@3]/4",
  H: "[bb1@12 c2@7 ~@2 f1@9 f2@6 f1@6 f2@6]/2", I: "db2@3 ~@6 c2@2 ~ db2@3 ~@9", J: "db2 ~@2 db2 ~ c2 ~ db2",
  K: "~@9 c2@2 ~ db2@3 ~@9", L: "[db2@3 ~@6 db2@3 ~@3 eb2@2 ~@4 f2@5 ~ f2@3 eb2@2 ~ c2@2 ~ f2@3 ~@6 eb2@2 ~]/2",
  M: "[f2@3 ~@6 f2@3 ~@3 eb2@3 ~@3 f2@5 ~ f2@3 eb2@3 c2@2 ~ f2@3 ~@9]/2", N: "f2 ~@2 f2 ~ c2 ~ db2",
  O: "~@3 c2 db2 ~@3", P: "[db2@3 ~@6 db2@3 ~@3 eb2@2 ~@4 f2@5 ~ f2@3 eb2@3 c2@2 ~ f2@3 ~@6 eb2@2 ~]/2",
  Q: "[f2@3 ~@6 f2@3 ~@3 c2@3 ~@3 f2@5 ~ f2@3 eb2@2 ~ c2@2 ~ f2@3 ~@9]/2",
  R: "[f2@3 ~@6 f2@3 ~@3 c2@3 b1@2 ~ bb1@5 ~ bb1@2 ~ bb1@3 bb1@2 ~ bb1@3 bb1@2 ~ bb1@3 bb1@2 ~]/2",
  S: "[c2@8 ~ f2@6 c2@3 b1@2 ~ bb1@5 ~ bb1@3 bb1@2 ~ bb1@2 ~ bb1@2 ~ bb1@3 bb1@3 bb1@2 ~]/2",
  T: "[c2@2 ~ c2@2 ~ c2@2 ~ f2@5 ~ c2@3 b1@2 ~ bb1@5 ~ bb1@3 bb1@2 ~ bb1@3 bb1@3 bb1@3 bb1@3 bb1@3]/2",
  U: "c2@2 ~ c2@2 ~ c2@3 f2@8 ~ f2@5 ~", V: "[gb2@42 ~@3 db2@12 eb2@10 ~@2 f2@6 f2@3 eb2@3 c2@3 f2@3 ~@3 ab1@3 a1@3]/4",
  W: "[bb1@8 ~ c2@12 f2@6 f2@3 eb2@3 c2@3 f2@4 ~@5 db2@11 ~ eb2@10 ~@2 f2@5 ~ f2@3 eb2@3 c2@3 f2@3 ~@3 c2@3 b1@3]/4",
  X: "[bb1@3 ~@3 bb1@2 ~ c2@6 eb2@3 c2@3 f2@5 ~ f2@3 eb2@3 c2@3 f2@4 ~@5 db2@6 db3@3 db2@3 eb2@6 eb3@3 eb2@2 ~ f2@5 ~ f2@3 eb2@3 c2@2 ~ f2@3 ~@3 c2@3 b1@3]/4",
  Y: "[bb1@3 c2@4 f2@3 f2@2 f1@2 f2@2]/2", Z: "[f2@3 ~@6 f2@3 ~@3 eb2@3 ~@3 f2@5 ~ f2@3 eb2@2 ~ c2@2 ~ f2@3 ~@9]/2",
  AA: "[c2@3 c2@3 c2@3 f2@6 c2@3 b1@2 ~ bb1@5 ~ bb1@3 bb1@2 ~ bb1@2 ~ bb1@2 ~ bb1@3 bb1@3 bb2@2 ~]/2",
  AB: "[f1@2 ~ f1@2 ~ f1@2 ~ f1@3 f1@3 c2@3 b1@2 ~ bb1@5 ~ bb1@3 bb1@2 ~ bb1@3 bb1@3 bb1@3 bb1@3 bb1@3]/2",
  AC: "c2@2 ~ c2@2 ~ c2@3 f2@6 f2@3 f2@3 f2@3", AD: "[gb2@40 ~@2 gb2@3 f2@49 ~@2]/4",
  AE: "[gb2@40 ~@2 gb2@3 f2@17 ~ c3@5 ~ db2@11 ~ eb2@10 ~@2 f2@5 ~ f2@3 eb2@3 c2@3 f1@6 c2@5 ~]/5",
  AF: "[bb1@5 ~ bb1@2 ~ c2@5 ~ eb2@3 c2@2 ~ f2@5 ~ f2@2 ~ eb2@3 c2@3 f2@7 ~@2 db2@11 ~ eb2@9 eb2@5 ~]/3",
  AG: "f2@2 ~ f2@3 eb2@3 c2@3 f1@5 ~ ab1@2 ~ a1@3",
  AH: "[bb1@8 ~ b1@2 ~ c2@3 eb2@2 ~ e2@3 f2@5 ~ f2@3 eb2@3 c2@3 f2@7 ~@2 db2@6 db3@3 db2@2 ~ eb2@6 eb3@3 eb2@3 f2@5 ~ f2@3 eb2@3 c2@3 f1@5 ~ ab1@2 ~ a1@3]/4",
  AI: "[bb1@8 ~ c2@6 eb2@3 c2@2 ~ f2@5 ~ f2@2 ~ eb2@3 c2@3 f2@4 ~@5 db2@11 ~ eb2@11 ~ f2@5 ~ f2@3 eb2@3 c2@3 f1@5 ~ ab1@3 a1@3]/4",
  AJ: "[bb1@9 b1@3 c2@3 eb2@3 e2@3 f2@5 ~ f2@3 eb2@3 c2@3 f2@8 ~ db2@11 ~ eb2@6 c2@3 b1@2 ~ bb1@5 ~ bb1@2 ~ bb1@2 ~ bb1@2 ~ bb1@3 bb1@3 bb1@3 bb1@2 ~]/4",
  AK: "[c2@2 ~ c2@2 ~ c2@3 f2@5 ~ c2@3 b1@3 bb1@6 bb1@3 bb1@2 ~ bb1@2 ~ bb1@3 bb1@3 bb1@3 bb1@2 ~]/2",
  AL: "[c2@2 ~ c2@3 c2@3 f2@5 ~ c2@3 b1@3 bb1@6 bb1@2 ~ bb1@3 bb1@3 bb1@3 bb1@3 bb1@3 bb1@3]/2",
  AM: "[gb2@42 ~@3 db2@12 eb2@11 ~ f2@5 ~ f2@3 eb2@3 c2@3 f1@3 ~@3 ab1@3 a1@3]/4",
  AN: "[bb1@8 ~ c2@6 eb2@2 ~ c2@3 f2@5 ~ f2@3 eb2@3 c2@3 f2@4 ~@5 db2@12 eb2@12 f2@6 f2@3 eb2@3 c2@3 f1@4 ~@2 c2@3 b1@3]/4",
  AO: "[bb1@8 ~ c2@12 f2@6 f2@3 eb2@3 c2@3 f2@4 ~@5 db2@11 ~ eb2@10 ~@2 f2@5 ~ f2@3 eb2@3 c2@3 f1@3 ~@3 ab1@3 a1@3]/4",
  AP: "[bb1@8 ~ c2@6 eb2@3 c2@3 f2@5 ~ f2@3 eb2@3 c2@3 f2@4 ~@5 db2@12 eb2@12 f2@6 f2@3 eb2@3 c2@3 f1@4 ~@2 c2@3 b1@3]/4",
  AQ: "bb1@8 ~ c2@6 eb2@3 c2@3 f2@3",
})).s("gm_electric_bass_finger").gain(0.72)

// chords · sitar
const sitar = note("<A B C A D E A ~@88 B C A D E F ~@43>".pickRestart({
  A: "c7 ~@2 f6 ~@2 [ab6,f7] ~@2 bb6 ~@2 [c7,eb7] ~@5 c7 ~@5", // Db Cm
  B: "[ab6,f7] ~@2 bb6 ~@2 [c7,eb7] ~@5 c7 ~@5 [ab6,f7] ~@2 bb6 ~@2", // Db Cm Db
  C: "[c7,eb7] ~@5 c7 ~@2 f6 ~@2 [ab6,f7] ~@2 bb6 ~@2 [c7,eb7] ~@5", // Cm Db Cm
  D: "[ab6,f7] ~@2 bb6 ~@2 [c7,eb7] ~@5 c7 ~@2 f6 ~@2 [ab6,f7] ~@2 bb6 ~@2", // Db Cm Db
  E: "[c7,eb7] ~@5 c7 ~@2 f6 ~@2 [ab6,f7] ~@2 bb6 ~@2 [c7,eb7] ~@2 f6 ~@2", F: "c7 ~@2 f6 ~@2 [ab6,f7] ~@2 bb6 ~@14",
})).s("gm_sitar").gain(0.52).pan(0.6)

// other · flute
const flute = note(`<
  A B C D E F G H I J ~ K I L ~@39 M N K I O ~ K I J ~ K I J ~ K I J ~@23 M N P Q R P Q S ~@22 M N T I O ~ K U J ~ K V W
  ~ K I J ~ K I ~
>`.pickRestart({
  A: "c7@2 ~ f6 ~@2 f7@2 ~ f6 ~@2 eb7@2 ~ f6 ~@2 c7@2 ~ f6@2 ~",
  B: "f7@2 ~ f6 ~@2 eb7@2 ~ f6 ~@2 c7@2 ~ f6 ~@2 f7@2 ~ f6 ~@2",
  C: "eb7@2 ~ f6 ~@2 c7@2 ~ f6 ~@2 f7@2 ~ f6 ~@2 eb7@2 ~ f6 ~@2",
  D: "c7@2 ~ f6@2 ~ f7@2 ~ f6 ~@2 eb7@2 ~ f6 ~@2 c7@2 ~ f6@2 ~",
  E: "f7@2 ~ f6 ~@2 eb7@2 ~ f6 ~@2 c7@2 ~ f6@2 ~ f7@2 ~ f6 ~@2",
  F: "eb7@2 ~ f6 ~@2 c7@2 ~ f6@2 ~ f7@2 ~ f6@2 ~ eb7@2 ~ f6 ~@2",
  G: "c7@2 ~ f6@2 ~ f7@2 ~ f6@2 ~ eb7@2 ~ f6 ~@2 c7@2 ~ f6@2 ~", H: "~@21 ab6 ~@2",
  I: "~@3 ab6@2 ~ g6@2 ~@4 ab6@2 ~@4 g6@2 ~@4", J: "f6@2 ~@4 bb6@2 ~ g6@2 ~@4 eb6@2 ~@7", K: "~@21 ab6@2 ~",
  L: "f6@2 ~@4 bb6@2 ~ g6@2 ~@4 eb6@2 ~@4 f6@2 ~", M: "bb7@2 ~ bb6@2 ~ ab7@3 ab6@2 ~ gb7@2 ~ gb6 ~@2 f7@2 ~ f6@2 ~",
  N: "eb7@2 ~ eb6@2 ~ db7@2 ~ db6@2 ~ c7@2 ~ c6@2 ~ bb6@2 ~@4", O: "f6@3 ~@3 bb6@2 ~ g6@2 ~@4 eb6@2 ~@7",
  P: "f7 ~@2 f6 ~@2 eb7 ~@2 f6 ~@2 c7 ~@2 f6 ~@2 f7 ~@2 f6 ~@2",
  Q: "eb7 ~@2 f6 ~@2 c7 ~@2 f6 ~@2 f7 ~@2 f6 ~@2 eb7 ~@2 f6 ~@2",
  R: "c7 ~@2 f6 ~@2 f7 ~@2 f6 ~@2 eb7 ~@2 f6 ~@2 c7 ~@2 f6 ~@2", S: "c7 ~@2 f6 ~@2 f7 ~@2 f6 ~@14", T: "~@7 ab6",
  U: "~@3 ab6@2 ~ g6@2 ~@4 ab6@2 ~@4 g6@3 ~@3", V: "~@3 ab6@2 ~ g6@3 ~@3 ab6@2 ~@4 g6@2 ~@4",
  W: "f6@2 ~@4 bb6@2 ~ g6@2 ~@4 eb6@3 ~@6",
})).s("gm_flute").gain(0.49).pan(0.4)

// chords · synth brass 1 · "Synth Brass"
const synth_brass_1 = note(`<
  ~@31 A B C D E F G H C I C J E K G L ~@24 A B C D E F G H C M C J E K G L ~@46 N O P ~ N Q R ~ N Q ~
>`.pickRestart({
  A: "[f4,ab4] ~@8 [eb4,g4] ~@2 [f4,ab4] ~@11", B: "[f4,ab4] ~@8 [f4,ab4] ~@5 [eb4,g4] ~@5 ab4@2 ~, ~@21 f4 ~@2",
  C: "~@9 [eb4,g4] ~@2 [f4,ab4] ~@11", D: "ab4@2 ~@7 [f4,ab4] ~@5 bb4@2 ~@4 [ab4,c5] ~@2, f4 ~@14 g4 ~@8",
  E: "~@3 [ab4,c5] ~@2 [g4,bb4] ~@2 [g4,bb4] ~@2 [ab4,c5] ~@8 [g4,bb4] ~@2", // Ab Gm Ab Gm
  F: "[ab4,c5] ~@8 [ab4,c5] ~@5 [g4,bb4] ~@5 c5@2 ~, ~@21 ab4 ~@2", // Ab Gm
  G: "~@3 [ab4,c5] ~@2 [g4,bb4] ~@2 [g4,bb4] ~@2 [ab4,c5] ~@11", // Ab Gm Ab
  H: "[ab4,c5] ~@8 [ab4,c5] ~@5 [g4,bb4] ~@5 ab4@2 ~, ~@21 f4 ~@2", // Ab Gm
  I: "ab4@2 ~@7 [f4,ab4] ~@5 [eb4,g4] ~@5 [f4,ab4] ~@2, f4 ~@23", // Fm Eb Fm
  J: "[f4,ab4] ~@8 [f4,ab4] ~@5 [g4,bb4] ~@5 c5@2 ~, ~@21 ab4 ~@2", // Fm Gm
  K: "c5@2 ~@7 [ab4,c5] ~@5 [g4,bb4] ~@5 c5@2 ~, ab4 ~@20 ab4 ~@2", L: "[ab4,c5] ~@8 [ab4,c5] ~@14",
  M: "ab4@2 ~@7 f4@2 ~@4 [eb4,g4] ~@5 [f4,ab4] ~@2, f4 ~@8 ab4 ~@14", N: "~@21 [f5,ab5]@2 ~",
  O: "~@3 [f5,ab5]@2 ~ [eb5,g5]@2 ~@4 [f5,ab5]@2 ~@4 [eb5,g5]@2 ~@4", // Fm Eb Fm Eb
  P: "[db5,f5]@2 ~@4 [g5,bb5]@3 [eb5,g5]@2 ~@4 [c5,eb5]@2 ~@7", // Db Gm Eb Cm
  Q: "~@3 [f5,ab5]@2 ~ [eb5,g5]@2 ~@4 [f5,ab5]@2 ~@4 [eb5,g5]@3 ~@3", // Fm Eb Fm Eb
  R: "[db5,f5]@3 ~@3 [g5,bb5]@3 [eb5,g5]@2 ~@4 [c5,eb5]@2 ~@7", // Db Gm Eb Cm
})).s("gm_synth_brass_1").gain(0.6)

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

// drums · snare
const snare = s("sd").struct(`<
  ~ A ~ B ~ A C D E@6 F E@14 G H E@15 I E@7 J E@31 K E@7 L E ~ E M N D E@15 L E@6 G ~ E@19
>`.pickRestart({
  A: "~ x", B: "x ~@2 x ~@2 x ~", C: "~@2 x!5 ~", D: "~ x!2 ~@2 x!2 ~", E: "~ x ~ x", F: "~@2 x ~ x!2 ~ x",
// … 57 more lines

More by Phil Collins