Strudelify
Both Sides Of The Story cover art

1993 · Both Sides

Both Sides Of The Story

Phil Collins

KeyA♭ majorTempo128 bpm
0:00/0:00
// Both Sides Of The Story — Collins Phil
// 128 bpm, 4/4, key G# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 202 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(128/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, A@4 for four bars: edit a riff to change every repeat.

// chords · overdriven guitar
const overdriven_guitar = note(`<
  ~ A B C D A B C D A B C D E D F@3 ~@17 A B C D A B C D A B C D A B C D G B C D G B C D E D H D I J K@2 L@2 M@2 N O P Q
  R@2 S@2 G T U V G T U V G T U V G T U V G T U V G T U V W V X Y Z@2 AA@2 AB@2 N O P Q AC@2 AD@2 AE@6 ~@22 AF AG AH AI
  AF AG AH AI AF AG AH AI AF AG AH AI AF AG AH AI AF AG AH AI AF AG AH AI AF AG AH AI AF AG AH AI AF AG AH AI AF AJ@2 AK
  AF AJ@2 AK AF AJ@2 AK ~
>`.pickRestart({
  A: "[ab2,eb3,ab3,eb4,bb4,eb5]@21 [ab2,eb3,ab3] ~ [ab2,eb3,ab3]", // Absus2 Ab5
  B: "[ab3,eb4,bb4,eb5] [bb2,eb3,bb3,eb4,bb4,eb5], [ab2,eb3]@5 ~@7", // Absus2 Eb5 Ab5
  C: "[ab2,db3,ab3,eb4,ab4,db5]@21 [ab2,db3,ab3] ~ [ab2,db3,ab3]", D: "[ab2,db3,ab3,eb4,ab4], db5@11 ~",
  E: "[bb2,eb3,eb4,bb4,eb5], bb3@7 ~", F: "[[ab2,eb3,ab3,eb4,ab4,eb5]@65 ~@7]/3",
  G: "~ [ab2,eb3,ab3,eb4,bb4,eb5]@21 [ab2,eb3,ab3]!2", H: "~ [eb3,eb4]@23, [bb2,bb4,eb5], [bb3,ab4]@7 ~",
  I: "~ ab5@14 ~ [ab3,ab5]@4 ~ eb3 ab2 [ab2,eb3], [ab2,ab4]@7 ~, [ab3,bb4,eb5]@14 ~ [bb4,eb5]@4 ~ [bb4,eb5,ab5]@4, ~ eb3@20 ab3@3", // Ab Ab5 Ab Absus2 Eb5 Ebsus4
  J: "~ [ab2,eb5]@11 [ab2,eb3,ab3,eb5]@12, [bb4,ab5], ab3 ~, eb3@5 ~@7", // Ab5 Bb7
  K: "[~ db3@20 [db3,ab3] ab2 [ab2,db3,ab3] ~ ab2@23, [eb4,ab4]@47 ~, db5@15 ~, [ab2,ab3]@7 ~ [db3,ab3]@8]/2", // Db5 Ab5 Ab Db5
  L: "[~ eb4@21 ab2!2 ~ [ab2,eb4]@11 [ab2,eb3,ab3,eb4,bb4,eb5]@12, [bb4,eb5]@35 ~@13, [ab2,ab3]@7 ~ ab3@4 ~@4, ~ eb3@35 ~@12]/2", // Ab5 Absus2 Eb5 Ab
  M: "[~ [ab2,db3]@21 [ab2,db3]!2 ~ ab2@23, ab4@7 ~ [db3,ab4]@8, ~ eb4@47, ~ [ab3,db5]@45 ~@2]/2", // Db5
  N: "~ [ab2,eb3,bb4,eb5]@23, ~ [ab3,eb4]@21 ~@2", O: "~ [ab3,eb4,db5]@23, ~ [ab2,db3,ab4]@21 ~@2",
  P: "~ [bb3,g4,eb5]@23, ~ [bb2,eb3,bb4]@21 ~@2", Q: "~ [f3,c4,ab4]@23, ~ [f2,c3,f4]@21 ~@2",
  R: "[~ [bb2,f3,bb4]@21 [bb2,f3]!2 ~ bb2@23, ~ f4@47, ~ [bb3,db5]@45 ~@2, ~ [f3,bb4]]/2", // Bb5 Bbm Bb5
  S: "[~ [bb2,eb3,bb4]@21 [bb2,eb3]!2 ~ [bb2,eb3]@23, ~ f4@47, ~ [bb3,eb5]@45 ~@2, ~ bb4]/2", // Eb5
  T: "~ [ab3,eb4,eb5]@11 ~ eb5@11, bb4@11 ~@13, ~ [ab2,eb3]@10 ~ [bb2,eb3,bb3,eb4,bb4]@12", // Ab5 Eb5
  U: "~ [ab2,db3,ab3,eb4,ab4,db5]@21 [ab2,db3,ab3]!2", V: "~ [ab2,db3,ab3,eb4,db5]@23, ab4",
  W: "~ [bb2,eb3,eb4,bb4,eb5]@23, ~ bb3@21 ~@2", // Eb5
  X: "~ [ab3,bb4,eb5,ab5]@15 [ab3,bb4,eb5,ab5]@4 ~@2 [ab2,eb3]!2, ~ [ab2,eb3,ab4]@20 ab3@3, ~@5 [bb4,eb5,ab5]", // Absus2 Ab5 Ebsus4
  Y: "~ [ab3,eb5]@12 [ab2,eb3,ab3,eb5]@11, ~ [bb4,ab5]@23, ~ [ab2,eb3]@10 ~@13", // Ab5 Bb7 Ab5
  Z: "[~ [ab2,db3,ab3]@21 [ab2,db3,ab3]!2 ~ [ab2,db3,ab3]@23, ~ [eb4,ab4]@47, ~ db5@45 ~@2]/2", // Db5 Ab5
  AA: "[~ [ab2,ab3,eb4]@21 ab2!2 ~ [ab3,eb4]@11 ~ [ab2,eb3,ab3,bb4,eb5]@11, ~ [eb3,bb4,eb5]@35 eb4@12, ~@25 ab2@10 ~@13]/2", // Ab5 Absus2 Eb5
  AB: "[~ [ab2,db3,ab4]@21 [ab2,db3]!2 ~ [ab2,db3,ab4]@23, ~ eb4@47, ~ [ab3,db5]@45 ~@2]/2", // Db5
  AC: "[~ [bb2,f3,bb4]@21 [bb2,f3]!2 ~ [bb2,f3,bb4]@23, ~ f4@47, ~ [bb3,db5]@45 ~@2]/2", // Bb5 Bbm
  AD: "[~ [bb2,eb3,bb4]@21 [bb2,eb3]!2 ~ [bb2,eb3,bb4]@23, ~ f4@47, ~ [bb3,eb5]@45 ~@2]/2", // Eb5
  AE: "[~ [eb3,ab3]@142 ~, ab2@71 ~]/6", AF: "~ [ab2,eb3,ab3,eb4,bb4,eb5]@21 [ab2,eb3,ab3] ~",
  AG: "[ab2,eb3,ab3] [ab3,eb4,bb4,eb5]@12 [bb2,eb3,bb3,eb4,bb4,eb5]@11, ~ [ab2,eb3]@10 ~@13", // Ab5 Absus2 Eb5 Ab5
  AH: "~ [ab2,db3,ab3,eb4,ab4,db5]@21 [ab2,db3,ab3] ~", AI: "[ab2,db3,ab3] [ab2,db3,ab3,eb4,ab4,db5]@23",
  AJ: "[[ab2,eb3,ab3] [ab2,eb5]@24 [ab2,eb5]@21 [eb3,ab3] ab2, ~ [eb3,ab3,eb4,bb4]@44 ~@3]/2", // Ab5 Ebsus4
  AK: "[ab2,eb3,ab3] [ab2,eb3,ab3,eb4,bb4,eb5]@23", // Ab5 Absus2
})).s("gm_overdriven_guitar").gain(0.23).pan(0.8)

// bass · fretless bass
const bass = note(`<
  ~ A B C@2 D@2 E@2 F@2 G H I J K@2 L M L M L M L N L M L N O M L M P Q R@2 S@2 T U@3 V@2 W@6 X Y Z@4 T AA P Q AB AC AD
  AE AF AG AH AI@2 AJ AK AL AM AN AO AP AQ AR AS@2 AT@2 AS@2 AU@2 AV@4 AW@2 AX@2 AY@2 AZ@2 BA@4 BB BC BD@2 BE BF BG@3
  BH@2 BI BJ BK BL AP BM@2 BN BO BP@2 BQ@4 BR@2 BS@2 BT@2 BP@2 BU@2 BV@2 BW@2 BX@2 BY BZ BY BZ CA@4 AW@2 CB@2 CC@4 BA@4
  CD@6 CB@2 CC@4 BA@4 CD@6 CB@2 CC@4 BA@4 ~@5
>`.pickRestart({
  A: "ab1@18 ~@3 ab1@2 ~, ab3@23 ~", B: "eb4@23 ~, ab1@7 ~",
  C: "[ab1@18 ~@3 ab1@2 ~@19 [g3,bb3]@6, ab3@30 ~@3 ab3@8 ~@7, ~@12 ab1@11 ~, ~@36 eb4@11 ~]/2", // Gm
  D: "[ab3@12 eb3@6 ~@3 ab1@2 ~@19 ab2@5 ~, [ab1,eb4]@18 ab3@23 ~@7, ~@12 ab1@11 ~]/2", // Ab5
  E: "[ab1@6 ~ ab1 ~@6 bb3@2, ab2@47 ~, ~@12 ab1@11 ~, ~@33 bb3@7 ~@8, ~@36 eb4@11 ~]/2",
  F: "[ab1@20 ~ ab1@2 ~@13 ab3@6 eb4@6, [ab2,ab3,eb4]@35 ~ [ab2,eb3]@11 ~, ~@12 ab1@11 ~]/2", // Ab5
  G: "ab1@19 ~@2 ab1@2 ~, [ab2,eb3,ab3]@23 ~", H: "[ab2,ab3,eb4]@23 ~, ab1@7 ~", I: "[eb2,eb3,bb3]@23 ~",
  J: "[db2,db3,ab3]@23 ~", K: "[eb4@11 ~ eb4@6 bb3@6, [ab2,ab3]]/2", L: "ab1@6 ~ ab1", M: "ab1@23 ~",
  N: "~@5 ab2@3, ab1@23 ~", O: "~@5 eb3@3, ab1@23 ~", P: "[eb2,bb2,eb3]@23 ~", Q: "[db2,ab2,db3]@23 ~",
  R: "[ab1@6 ~ ab1 ~@5 ab2 eb3 ab2, ab2@37 ~@11, ~@24 ab1@23 ~]/2", S: "[ab1@18 ~@3 ab1@3 ab1@23 ~, ab2@47 ~]/2",
  T: "ab1@6 ~ ab1, ab2",
  U: "[eb3@15 ab2@3 eb3@3 ~@3 ab1@18 ~@3 ab1@3 ~@18 ab2@5 ~, ab1@23 ~ eb3@42 ~@6, ~@21 ab2@44 ~@7, ~@24 ab1@11 ~]/3",
  V: "[ab1@18 ~@3 ab1@3 ab1@23 ~, ab2@47 ~, ~@7 eb3@9]/2",
  W: "[ab1@18 ~@3 ab1@3 ~@24 ab1@18 ~@3 ab1@3 ab1@23 ~ ab1@18 ~@3 ab1@3 ~@12 [bb3,eb4]@6 [ab3,eb4]@6, ab2@47 ~ ab2@47 ~ ab2@35 ~@13, ~@24 ab1@23 ~@73 ab1@23 ~, ~@45 eb3@48 ~@2 eb3@37 ~@12]/6", // Eb5 Ab5
  X: "~ ab3@20 [ab1,eb3]@3, ab1@3 ~", Y: "~ ab2@23, ab1@23 ~",
  Z: "[ab1@18 ~@3 ab1@3 ~@13 eb3@4 ~@50 eb3@2 ab2@3, ab2@23 ~ ab1@23 ~ ab1@23 ~ ab1@24, ~@21 eb3@15 ~@9 eb3@5 ~@46, ~@25 ab2@16 ab2@7 ~ ab2@43 ~@4]/4",
  AA: "[ab1,ab2]@23 ~", AB: "[eb2,bb2,eb3]@19 ~@3 [eb2,eb3]@2, ~@21 bb2@2 ~", AC: "~@3 db3, ab2, db3@17 ~@7, ~ db2@23",
  AD: "~@21 ab1@2 ~, ab1@3 ~, ~ ab2@23", AE: "~@7 eb3@5 ~@7 c3@5, ab1@11 ~, ab2 ab3",
  AF: "db2@19 ~@2 db2@2 ~, db3@23 ~", AG: "[db2,db3]@23 ~", AH: "~ ab2@20 [ab1,eb3]@3, ab1@19 ~@5",
  AI: "[ab2@12 c3@6 ~@6 db2@19 ~@2 db2@2 ~, ab1@23 ~ db3@23 ~, ~@19 bb2@7 ~@22]/2", AJ: "db3@3 eb3, db2@23 ~",
  AK: "~ [ab1,ab2]@23", AL: "~ [db2,db3]@17 [db2,db3]@6", AM: "~ [eb2,eb3]@17 [eb2,eb3]@6",
  AN: "~ [f2,f3]@16 ~ [f2,f3]@6", AO: "~ bb1@16 ~ [f2,f3]@6, bb2@17 ~@7", AP: "~ [bb1,bb2]@23",
  AQ: "~ eb2@22 ~, eb3@23 ~", AR: "~ eb2@23, [eb3,bb3]",
  AS: "[~ ab1@19 ~ ab1@2 ~@16 [ab3,eb4]@9, ~ [eb3,ab3]@37 ~@10, ~@25 ab1@22 ~]/2", // Ab5
  AT: "[~ ab1@20 ab1@2 ~@16 [ab3,eb4]@9, [eb3,ab3]@19 ~@5, ~@25 ab1@22 ~]/2", // Ab5
  AU: "[~ ab1@20 ab1@2 ~@16 [ab3,eb4]@9, [eb3,ab3]@19 ~@5, ~@25 ab1@23]/2", // Ab5
  AV: "[~ ab1@19 ~@2 ab1@2 ~@16 [ab3,eb4]@8 ~ ab1@20 ab1@2 ~@17 eb4@8, ~ [eb3,ab3]@36 ab2@13 ~@23 ab1@22 ~, ~@25 ab1@22 ~ [eb3,ab3]@38 ~ ab3@9, ~@7 ab2]/4", // Ab5
  AW: "[~ ab1@19 ~@2 ab1@2 ~@16 [ab3,eb4]@8, ~ [eb3,ab3]@36 ab2@11, ~@25 ab1@22 ~]/2", // Ab5
  AX: "[~ ab1@20 ab1@2 ~@17 [ab3,eb4]@8, [eb3,ab3]@37 ab2@11, ~@25 ab1@23]/2", // Ab5
  AY: "[~ ab1@19 ~@2 ab1@2 ~@16 eb4@8, ~ [eb3,ab3]@37 ~ ab3@9, ~@25 ab1@22 ~, ~@3 ab2]/2", // Ab5
  AZ: "[~ ab1@20 ~ ab1@2 ~@16 [ab3,eb4]@8, ~ [eb3,ab3]@38 ~@9, ~@25 ab1@22 ~, ~@33 ab2@14 ~]/2", // Ab5
  BA: "[~ ab1@19 ~@2 ab1@2 ~@16 [ab3,eb4]@9 ab1@20 ~ ab1@2 ~@16 [ab3,eb4]@8, ~ [eb3,ab3]@36 ab2@13 ~@23 ab1@23, ~@25 ab1@22 ~@2 [eb3,ab3]@38 ~@9, ~@41 ab2@7]/4", // Ab5
  BB: "~ [eb2,bb2,eb3]@23", BC: "~ [db2,ab2,db3]@23", BD: "[~ ab1@18 ~@2 ab1@3 ~ ab1@22 ~, ~ ab2@47]/2",
  BE: "~ db2@19 ~@2 db2@2, ~ db3@23", BF: "~ [db2,db3]@23",
  BG: "[~ ab2@21 eb3@3 ab2@12 c3@6 bb2@6 db2@19 ~@2 db2@2, ~ ab1@19 ~@2 ab1@2 ~ ab1@23 ~ db3@23]/3",
  BH: "[~ db3@18 eb3@6 [ab1,ab2]@23, ~ db2@23 ~@24]/2", BI: "~ [db2,db3]@17 ~ [db2,db3]@5",
  BJ: "~ [eb2,eb3]@17 ~ [eb2,eb3]@5", BK: "~ [f2,f3]@16 ~@2 [f2,f3]@5", BL: "~ [bb1,bb2]@17 ~ [f2,f3]@5",
  BM: "~ [eb2,eb3]@23", BN: "~ ab1@18 ~@3 ab1@2", BO: "~@4 c4@9 ~@6 eb4@5, ~ ab1@23, ~@2 eb4@7 ~@3, ~@13 bb3@11",
  BP: "[~ ab1@19 ~@2 ab1@2 ~ ab1@21 ~@2, ~ [f3,db4]@47]/2", // Db
  BQ: "[~ [c4,eb4]@15 bb3@5 ~ ab1@2 ~ bb3@4 ~@4 eb4@4 [g3,bb3]@4 ~@4 eb4@4 f3@9 ~@12 ab1@2 ~ ab1@21 ~@2, ~ ab1@19 ~ eb4@12 ~@34 f4@29, ~@25 ab1@22 ~@2 ab1@20 ~@27, ~@29 ab3@7 ~@5 ab3@9 ~@8 [ab3,db4]@38]/4", // Cm Gm Db5
  BR: "[~ ab1@19 ~@2 ab1@2 ~@7 ab2@17, ~ [ab3,eb4]@47, ~@25 ab1@21 ~@2]/2", // Ab5
  BS: "[~ ab1@19 ~@2 ab1@2 ~ ab1@21 ~@2, ~ [ab3,eb4]@35 ~@12]/2", // Ab5
  BT: "[~ ab1@19 ~@2 ab1@2 ~@7 bb3@6 ab3@11, ~ eb4@47, ~ ab3@29 ~@18, ~@25 ab1@22 ~]/2",
  BU: "[~ ab1@19 ~@2 ab1@2 ~@13 bb3@11, ~ eb4@47, ~ ab3@36 ~@11, ~@25 ab1@21 ~@2]/2",
  BV: "[~@22 ab1@2 ~ ab1@21 eb3@2, ~ eb4@47, ~ ab1@18 ab2@29, ~@10 ab3@11 ~@4 ab3@23]/2",
  BW: "[~ ab1@19 ~@2 ab1@2 ~ ab1@21 ~@2, ~ [eb3,c4]@46 ~]/2", // Cm
  BX: "[~ f3@20 ab1@2 ~@2 [ab1,f3]@22 ~, ~ db4@47, ~ ab1@18 ~@29]/2", BY: "~ [eb2,eb3,bb3]@23",
  BZ: "~ [db2,db3,ab3]@23", // Db5
  CA: "[~ ab1@19 ~@2 ab1@2 ~@16 [ab3,eb4]@9 ab1@20 ~ ab1@2 ~@16 [ab3,eb4]@8, ~ [eb3,ab3]@36 ab2@13 ~@23 ab1@22 ~, ~@25 ab1@22 ~@2 [eb3,ab3]@38 ~@9, ~@7 ab2]/4", // Ab5
  CB: "[~ ab1@20 ~ ab1@2 ~@16 [ab3,eb4]@8, ~ [eb3,ab3]@38 ~@9, ~@25 ab1@23, ~@37 ab2@11]/2", // Ab5
  CC: "[~ ab1@19 ~@2 ab1@2 ~@16 [ab3,eb4]@9 ab1@20 ~ ab1@2 ~@16 [ab3,eb4]@8, ~ [eb3,ab3]@36 ab2@13 ~@23 ab1@22 ~, ~@25 ab1@22 ~@2 [eb3,ab3]@38 ~@9, ~@41 ab2@7]/4", // Ab5
  CD: "[~ ab1@19 ~@2 ab1@2 ~@16 [ab3,eb4]@9 ab1@20 ~ ab1@2 ~@16 [ab3,eb4]@9 ab1@19 ~@2 ab1@2 ~@16 [ab3,eb4]@8, ~ [eb3,ab3]@36 ab2@13 ~@23 ab1@22 ~@26 ab1@22 ~, ~@25 ab1@22 ~@2 [eb3,ab3]@38 ~@10 [eb3,ab3]@37 ~@10, ~@85 ab2@13 ~@35 ab2@11]/6", // Ab5
})).s("gm_fretless_bass").gain(0.35)

// chords · pad warm
const pad_warm = note(`<
  ~@16 A@3 B@2 C@2 B@2 C@2 B@2 C@2 B@2 D E C@2 B@2 C@2 B@2 C@2 B@2 C@2 B@2 C@2 B@2 C@2 B@2 D E D E C@2 B@2 F@2 B@2 G E D
  H I@2 J@2 C@2 B@2 C@2 B@2 C@2 B@2 C@2 B@2 C@2 B@2 C@2 B@2 D E C@2 B@2 F@2 B@2 G E D H I@2 J@2 K@2 L@8 M@8 N@7 O P Q
  R@40 S@8 ~@5
>`.pickRestart({
  A: "[c5@5 g4, [eb4,bb4,eb5]]/3", B: "[db4,f4,ab4,db5]/2", C: "[c5@3 g4, [eb4,bb4,eb5]]/2", D: "[eb4,g4,bb4,eb5]",
  E: "[db4,f4,ab4,db5]", F: "[eb4,bb4,c5,eb5]/2", G: "[eb4,bb4,c5,eb5]", H: "[c4,f4,ab4,c5]", I: "[db4,f4,bb4,db5]/2",
  J: "[eb4,g4,bb4,eb5]/2", K: "[c5@36 ~ g4@11, [eb4,bb4,eb5]]/2",
  L: "[~ [db4,f4,ab4,db5]@48 ~@18 ab5@18 g4@12 [db4,f4,ab4,db5]@48 c5@36 g4@11, ~@49 [eb4,bb4,eb5]@48 ~@48 [eb4,bb4,eb5]@47, ~@49 c5@36 ~@107]/8", // Db Eb5
  M: "[~ [db4,f4,ab4,db5]@48 c5@36 g4@12 [db4,f4,ab4,db5]@48 c5@36 g4@11, ~@49 [eb4,bb4,eb5]@48 ~@48 [eb4,bb4,eb5]@47]/8", // Db Eb5
  N: "[~ [db4,f4,ab4,db5]@48 c5@42 g4@6 [db4,f4,ab4,db5]@48 [eb4,g4,bb4,eb5]@23, ~@49 [eb4,bb4,eb5]@48 ~@71]/7", // Db Eb Eb5
  O: "~ [db4,f4,ab4,db5]@23", P: "~ [eb4,g4,bb4]@23", Q: "~ [db4,f4,ab4]@23",
  R: "[~ c5@36 g4@12 [db4,f4,ab4,db5]@48 c5@36 g4@12 [db4,f4,ab4,db5]@47, ~ eb5@96 eb5@95, ~ [eb4,bb4]@48 ~@48 [eb4,bb4]@48 ~@47]/8", // Db Eb5
  S: "[~ [eb4,ab4,bb4,c5,eb5]@191]/8", // Ab
})).s("gm_pad_warm").gain(0.26)

// other · bagpipe
const bagpipe = note("<~@79 A@2 B@6 C D@7 C D@7 C E@3 ~@42 F@2 G@6 C H@7 C H@7 C H@7 C H@7 C I@7 C J@3 ~>".pickRestart({
  A: "[~ eb5@20 bb4@2 ~ eb5@22 bb4 ab4, ~@23 c5@2 ~@23]/2",
  B: "[~ bb4@17 eb5@18 ~ bb4 eb5@4 bb4 eb5@29 bb4 eb5@12 bb4 eb5@29 ab4@11 bb4 eb5@5 ab4 eb5@5 ab4 eb5@3 c5 ~]/6",
  C: "db5 eb5@23",
  D: "[bb4@2 eb5@11 ab4 eb5@23 ab4@24 bb4 eb5@4 bb4 eb5@29 bb4 eb5@12 bb4 eb5@29 ab4@11 bb4 eb5@5 ab4 eb5@5 ab4 eb5@3 c5 ~]/7",
  E: "[~@2 eb5@11 ab4 eb5@53 ab4@5, ~ bb4@2 ~@69]/3", F: "[~ eb5@21 ~ c5@2 eb5@21 bb4 ~, ~@11 bb4 ~@12]/2",
  G: "[ab4 bb4@18 eb5@18 bb4 eb5@4 bb4 eb5@30 bb4 eb5@11 bb4 eb5@29 ab4@12 bb4 eb5@5 ab4 eb5@5 ab4 eb5@3 c5]/6",
  H: "[~ bb4@2 eb5@11 ab4 eb5@22 ab4@24 bb4 eb5@4 bb4 eb5@30 bb4 eb5@12 bb4 eb5@28 ab4@12 bb4 eb5@5 ab4 eb5@5 ab4 eb5@3 c5]/7",
  I: "[~ bb4@2 eb5@11 ab4 eb5@22 ab4@24 bb4 eb5@4 ~ eb5@30 bb4 eb5@12 bb4 eb5@28 ab4@12 bb4 eb5@5 ab4 eb5@5 ab4 eb5@3 c5, ~@67 bb4 ~@100]/7",
  J: "[~ bb4@2 eb5@11 ab4 eb5@22 ab4@24 ~ bb4 eb5@4 bb4 eb5@4]/3",
})).s("gm_bagpipe").gain(0.09)

// other · synth drum
const synth_drum = note(`<
  ~ A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B C B C B C B
  D B D B D B D B D B D B D B D B D B D B D B D B D B D E D E D E D E D E F E F E F E F E F E F E F E F E F E F E F E F
  E F E F E F E F E F E F E F E F E F E F G F G F G F G F G F G F G F G F G F G F G F G F G F G F G F G F G F G H G H G
  H G H G H G H G H G H G H G H G H G H G H G H G ~
>`.pickRestart({
  A: "d2 ~@8 d2!2 ~ e3@2 ~@4 e3 ~ e3 ab3 ~@2", B: "d2@2 ~@15 d2 e3 ~ e3 d2 ~@2",
  C: "d2 ~@9 d2!2 e3@2 ~@4 e3 ~ e3 ab3 ~@2", D: "~ d2 ~@8 d2!2 ~ e3@2 ~@4 e3!2 ab3 ~@2",
  E: "~ d2@2 ~@14 d2 ~ e3!2 ~ d2 ~", F: "~ d2 ~@8 d2!2 ~ e3@2 ~@4 e3!2 ~ ab3 ~", G: "~ d2@2 ~@15 d2 e3 ~ e3 d2 ~",
  H: "~ d2 ~@8 d2 ~ d2 e3@2 ~@4 e3 ~ e3 ab3 ~",
})).s("gm_synth_drum").gain(0.22).pan(0.3)

// other · taiko drum
const taiko_drum = note(`<
  ~ A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B C B C B C B
  D B D B D B D B D B D B D B D B D B D B D B D B D B D E D E D E D E D E F E F E F E F E F E F E F E F E F E F E F E F
  E F E F E F E F E F E F E F E F E F E F G F G F G F G F G F G F G F G F G F G F G F G F G F G F G F G F G F G H G H G
  H G H G H G H G H G H G H G H G H G H G H G H G ~
>`.pickRestart({
  A: "g4 ~@8 g4!2 ~ a5@2 ~@4 a5 ~ a5 c6 ~@2", B: "g4@2 ~@15 g4 a5 ~ a5 g4 ~@2",
  C: "g4 ~@9 g4!2 a5@2 ~@4 a5 ~ a5 c6 ~@2", D: "~ g4 ~@8 g4!2 ~ a5@2 ~@4 a5!2 c6 ~@2",
  E: "~ g4@2 ~@14 g4 ~ a5!2 ~ g4 ~", F: "~ g4 ~@8 g4!2 ~ a5@2 ~@4 a5!2 ~ c6 ~", G: "~ g4@2 ~@15 g4 a5 ~ a5 g4 ~",
  H: "~ g4 ~@8 g4 ~ g4 a5@2 ~@4 a5 ~ a5 c6 ~",
})).s("gm_taiko_drum").gain(0.3).pan(0.8)

// drums · kick
const kick = s("bd").struct(`<
  ~ A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B C D C D C D C D
  C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C
  D C D ~@28 C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D ~
>`.pickRestart({
  A: "x ~@2 x!2 ~@2 x", B: "x ~@6 x", C: "~ x ~@8 x ~@2 x ~@8 x ~", D: "~ x ~@20 x ~",
})).gain(0.25)

// drums · snare
const snare = s("sd").struct("<[~@4 x!3 ~] [~ x ~ x]!50 [~@7 x ~@11 x ~@4]!150 ~>").gain(0.35)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~ A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B C B C B C B C B C B C B C B C B C D C D C D C D
  C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C
  D C D ~@28 C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D ~
>`.pickRestart({
  A: "~@3 x ~@3 x", B: "x ~@4 x ~ x", C: "~@5 x ~@5 x", D: "~ x ~@14 x ~@5 x ~",
})).gain(0.15)

// drums · pedal hat
const pedal_hat = s("hh").struct("<~ [x!4]!50 [~ x ~@5 x ~@5 x ~@5 x ~@4]!150 ~>").gain(0.2)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~ A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B
  A B A B A B A B A B A B A B A B A B A B A B A B A B A B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C
  B C B ~@28 D E D E D E D E D E D E D E D E D E D E D E D E D E D E D E D E D E D E D E D E D E D E D E D E D E D E ~
>`.pickRestart({
  A: "~@11 x!2 ~@7 x ~@2 x", B: "~@17 x ~@2 x ~@3", C: "~@11 x ~ x ~@6 x ~@2 x", D: "~@12 x!2 ~@7 x ~@2",
  E: "x ~@5 x!2",
})).gain(0.2)

// drums · mid tom · soft notes
const mid_tom_soft = s("mt").struct(`<
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
// … 17 more lines

More by Phil Collins