Strudelify

Fire on the Cross

Bruce Hornsby

KeyE♭ majorTempo124 bpm
0:00/0:00
// Fire on the Cross — Bruce Hornsby
// 124.4 bpm, 4/4, key D# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 121 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(124.4/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@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 C D@2 E C D F@2 G H I@2 G H I@2 G H J@4 A@2 K@5 L@8 M@7 N O@7 P@5 Q@8
  R@8 S T@4 U@3 V@2 W X Y Z@6 AA@5
>`.pickRestart({
  A: "[[f2,c3,g3,ab3,bb3,eb4]@7 [ab2,eb3,bb3,eb4]@9]/2", // Fm7 Absus2
  B: "[[eb2,bb2,f3,bb3]@7 [db2,ab2,eb3,ab3]@4 [eb2,bb2,f3,bb3] [eb2,bb2,f3,bb3]@4]/2", C: "[c3,g3]@3 [c3,ab3]@5, eb3",
  D: "[c3,bb3]@3 [c3,ab3]@5, eb3", E: "[bb2,eb3,g3,c4]",
  F: "[[bb2,c3,f3]@3 [ab2,bb2,eb3]@4 [eb2,f2,bb2]@4 [db2,eb2,ab2]@5]/2", G: "[f2,g3,bb3]", H: "[ab2,bb3,eb4]",
  I: "[[eb2,f3]@7 [db2,eb3]@4 [eb2,f3]@5]/2", // Ebsus2 Dbsus2 Ebsus2
  J: "[[eb2,f3]@28 [db2,eb3]@16 [eb2,f3]@16 ~@9 [c6,f6]@5 ~ [c6,f6]@5 [c6,f6]@5 [c6,f6]@5 ~ [c6,f6]@5 [c6,f6]@5 [c6,f6]@5 ~ [c6,f6]@5 [c6,f6]@5 [c6,f6]@5 ~ [c6,f6]@5, ~@15 [f1,eb3,c4]@17]/4", // Ebsus2 Dbsus2 Ebsus2 F5 F7
  K: "[[eb2,bb2,f3,bb3]@28 [db2,ab2,eb3,ab3]@15 [eb2,bb2,f3,bb3]@4 [eb2,bb2,f3,bb3]@16 [f2,c3,g3,ab3,bb3,eb4]@28 [ab2,eb3,bb3,eb4]@35 [eb2,bb2,f3,bb3]@28 [db2,ab2,eb3,ab3]@6]/5", // Ebsus2 Dbsus2 Ebsus2 Fm7 Absus2 Ebsus2 Dbsus2
  L: "[~@9 [eb2,bb2,f3,bb3]@4 [eb2,bb2,f3,bb3]@16 [f2,c3,g3,ab3,bb3,eb4]@28 [ab2,eb3,bb3,eb4]@35 [eb2,bb2,f3,bb3]@28 [db2,ab2,eb3,ab3]@15 [eb2,bb2,f3,bb3]@4 [eb2,bb2,f3,bb3]@16 [f2,c3,g3,ab3,bb3,eb4]@27 [ab2,eb3,bb3,eb4]@35 ~ [eb2,bb2,f3,bb3]@27 [db2,ab2,eb3,ab3]@11]/8", // Ebsus2 Fm7 Absus2 Ebsus2 Dbsus2 Ebsus2 Fm7 Absus2 …
  M: "[~@5 [eb2,bb2,f3,bb3]@4 [eb2,bb2,f3,bb3]@16 [c3,g3]@12 [c3,ab3]@19 [c3,bb3]@12 [c3,ab3]@20 [c3,bb3]@12 [c3,ab3]@19 [bb2,eb3,g3,c4]@31 ~ [c3,g3]@12 [c3,ab3]@19 [c3,bb3]@12 [c3,ab3]@20 [bb2,c3,f3]@10, ~@25 eb3@31 eb3@31 ~ eb3@31 ~@32 eb3@31 eb3@31 ~@11]/7", // Ebsus2 C5 Fm C7 Fm C7 Fm Cm7 …
  N: "~@2 [ab2,bb2,eb3]@15 [eb2,f2,bb2]@15", // Absus2 Ebsus2
  O: "[~ [db2,eb2,ab2]@20 [f2,g3,bb3]@31 [ab2,bb3,eb4]@31 ~ [eb2,f3]@27 [db2,eb3]@16 [eb2,f3]@20 [f2,g3,bb3]@31 [ab2,bb3,eb4]@31 ~ [eb2,f3]@14]/7", // Dbsus2 Gm7 Absus2 Ebsus2 Dbsus2 Ebsus2 Gm7 Absus2 …
  P: "[~@13 [db2,eb3]@16 [eb2,f3]@20 [f2,g3,bb3]@31 [ab2,bb3,eb4]@31 ~ [eb2,f3]@27 [db2,eb3]@16 [eb2,f3]@5]/5", // Dbsus2 Ebsus2 Gm7 Absus2 Ebsus2 Dbsus2 Ebsus2
  Q: "[~@11 [f1,eb3,c4]@67 [eb3,bb3,c4]@31 [eb3,bb3,eb4]@31 ~ [f3,c4,f4]@31 [ab2,eb4,ab4]@16 [bb2,f4,bb4]@16 [eb3,bb3,c4]@31 [eb3,bb3,eb4]@21]/8", // F7 Cm7 Eb5 F5 Ab5 Bb5 Cm7 Eb5
  R: "[~@11 [f3,c4,f4]@31 [ab2,eb4,ab4]@16 [bb2,f4,bb4]@16 [c3,g3]@12 [c3,ab3]@19 [c3,bb3]@12 [c3,ab3]@20 [c3,bb3]@12 [c3,ab3]@19 [bb2,eb3,g3,c4]@31 ~ [c3,g3]@12 [c3,ab3]@19 [c3,bb3]@12 [c3,ab3]@13, ~@74 eb3@31 eb3@31 ~ eb3@31 ~@32 eb3@31 eb3@25]/8", // F5 Ab5 Bb5 C5 Fm C7 Fm C7 …
  S: "~@7 [bb2,c3,f3]@11 [ab2,bb2,eb3]@14", // Bbsus2 Absus2
  T: "[~@2 [eb2,f2,bb2]@16 [db2,eb2,ab2]@20 [f2,g3,bb3]@31 [ab2,bb3,eb4]@31 ~ [eb2,f3]@27]/4", // Ebsus2 Dbsus2 Gm7 Absus2 Ebsus2
  U: "[[db2,eb3]@16 [eb2,f3]@20 [f2,g3,bb3]@31 [ab2,bb3,eb4]@29]/3", V: "[~@3 [eb2,f3]@27 [db2,eb3]@16 [eb2,f3]@18]/2",
  W: "~ [f2,g3,bb3]@15", X: "~ [ab2,bb3,eb4]@31", Y: "~ [eb2,f3]@27 [db2,eb3]@4",
  Z: "[~@12 [eb2,f3]@16 [f1,eb3,c4]@67 [eb3,bb3,c4]@31 [eb3,bb3,eb4]@31 ~ [f3,c4,f4]@31 [ab2,eb4,ab4]@3]/6", // Ebsus2 F7 Cm7 Eb5 F5 Ab5
  AA: "[~@13 [bb2,f4,bb4]@16 [eb3,bb3,c4]@31 [eb3,bb3,eb4]@31 ~ [f3,c4,f4]@31 [ab2,eb4,ab4]@16 [bb2,f4,bb4]@16 ~@5]/5", // Bb5 Cm7 Eb5 F5 Ab5 Bb5
})).s("gm_piano").gain(0.5)

// bass · electric bass finger
const bass = note(`<
  A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 C@3 D C@2 E@2 F G H@2 F G H@2 I G J@4 A@2 K@5 L@8 M@7 N O@6 P Q@2 R S
  T@8 U@2 V W@7 X@4 Y@5 Z AA AB@8 AC@4
>`.pickRestart({
  A: "[f2@7 ab2@9]/2", B: "[eb2@7 db2@4 eb2 eb2@4]/2", C: "c3", D: "ab2", E: "[bb2@3 ab2@4 eb2@4 db2@5]/2", F: "f2!4",
  G: "ab2!4", H: "[bb2@2 bb2@2 bb2@3 db2@4 eb2@5]/2", I: "f2@2 f2@2 f2@2 f2 ab2",
  J: "[bb2@2 bb2@2 bb2@3 db2@4 eb2@4 f1@17]/4", K: "[eb2@28 db2@15 eb2@4 eb2@16 f2@28 ab2@35 eb2@28 db2@6]/5",
  L: "[~@9 eb2@4 eb2@16 f2@28 ab2@35 eb2@28 db2@15 eb2@4 eb2@16 f2@27 ab2@35 ~ eb2@27 db2@11]/8",
  M: "[~@5 eb2@4 eb2@16 c3@31 c3@31 ~ c3@31 ab2@31 ~ c3@31 c3@31 ~ bb2@10]/7", N: "~@2 ab2@15 eb2@15",
  O: "[~ db2@20 f2@8 f2@8 f2@7 f2@8 ab2@8 ab2@8 ab2@8 ab2@8 bb2@8 bb2@8 bb2@11 db2@16 eb2@20 f2@8 f2@8 f2@7 f2@8 ab2@8 ab2@6]/6",
  P: "~ ab2@4 ab2@4 bb2@4 bb2@3", Q: "[~@2 bb2@11 db2@16 eb2@20 f2@8 f2@7]/2", R: "~ f2@7 f2@4 ab2@4 ab2@8 ab2@8",
  S: "ab2!2 bb2!2",
  T: "[bb2@11 db2@16 eb2@16 ~@8 f2@4 f2@4 f2@4 f2@3 ab2@4 g2@4 f2@4 bb2@4 f2@4 ab2@4 f2@4 eb2@4 c2@4 eb2@4 f2@4 f2@8 f2@8 f2@7 f2@8 ab2@8 ab2@8 ab2@8 ab2@8 bb2@8 bb2@8 bb2@7 bb2@8 db2@8 db2@8 eb2@8 eb2@8 f2@8 f2@7 f2@5, ~@43 f1@67 ~@146]/8",
  U: "[~@3 f2@8 ab2@8 ab2@8 ab2@8 ab2@8 bb2@8 bb2@7 bb2@6]/2", V: "~ bb2@4 db2@4 db2@4 eb2@3",
  W: "[~@2 eb2@8 c3@31 c3@31 ~ c3@31 ab2@31 ~ c3@31 c3@31 ~ bb2@11 ab2@14]/7",
  X: "[~@2 eb2@16 db2@20 f2@8 f2@7 f2@8 f2@8 ab2@8 ab2@8 ab2@8 ab2@8 bb2@8 bb2@7 bb2@12]/4",
  Y: "[db2@16 eb2@20 f2@8 f2@7 f2@8 f2@8 ab2@8 ab2@8 ab2@8 ab2@8 bb2@8 bb2@7 bb2@12 db2@16 eb2@18]/5",
  Z: "~@2 f2@7 f2@8 f2@8 f2@4 ab2@3", AA: "~ ab2@8 ab2@8 ab2@8 ab2@7",
  AB: "[~ bb2@7 bb2@8 bb2@12 db2@16 eb2@16 ~@8 f2@3 f2@4 f2@4 f2@4 ab2@4 g2@4 f2@4 bb2@4 f2@4 ab2@4 f2@4 eb2@4 c2@4 eb2@4 f2@4 f2@7 f2@8 f2@8 f2@8 ab2@8 ab2@8 ab2@8 ab2@8 bb2@7 bb2@8 bb2@8 bb2@8 db2@8 db2@8 eb2@8 eb2@8 f2@3, ~@60 f1@67 ~@129]/8",
  AC: "[~@4 f2@8 f2@8 f2@8 ab2@8 ab2@8 ab2@8 ab2@8 bb2@7 bb2@8 bb2@8 bb2@8 db2@8 db2@8 eb2@8 eb2@8 ~@5]/4",
})).s("gm_electric_bass_finger").gain(0.35)

// other · banjo
const banjo = note(`<
  ~@3 A ~ B C D ~@3 A ~@3 A ~@3 A ~@3 A ~@8 E B C D E B C D E B C F G H ~@2 I@2 ~@2 J@2 ~@2 K@2 ~@2 L@2 ~@7 M@2 N O@5 P
  Q R S@2 ~@17 T@3 U V@5 W X F ~@10
>`.pickRestart({
  A: "db6 ab5 eb5 db5 db6 ab5 f5 eb5 eb6 bb5 f5 eb5 eb6 bb5 f5 eb5",
  B: "ab4 eb5 bb5 eb5 ab4 eb5 bb5@2 ab4 eb5 bb5 eb5 ab4 eb5 bb5@2",
  C: "eb5 bb5 f6 bb5 eb5 bb5 f6@2 eb5 bb5 f6 bb5 eb5 bb5 f6@2",
  D: "db5 ab5 eb6 ab5 db5 ab5 eb6@2 eb5 bb5 f6 bb5 eb5 bb5 f6@2", E: "f4 c5 g5 c5 f4 c5 g5@2 f4 c5 g5 c5 f4 c5 g5@2",
  F: "db5 ab5 eb6 ab5 db5 ab5 eb6@2 eb5 bb5 f6 bb5 eb5 bb5 eb6@2", G: "~@3 c6@2 c6@3 c6@3 c6@2 c6@3",
  H: "c6@3 c6@2 c6@3 c6@3 c6@2 c6@3",
  I: "[~@31 db6@2 ab5@2 eb5@2 db5@2 db6@2 ab5@2 f5@2 eb5@2 eb6@2 bb5@2 f5@2 eb5@2 eb6@2 bb5@2 f5@2 eb5@2 ~]/2",
  J: "[~@29 db6@2 ab5@2 eb5@2 db5@2 db6@2 ab5@2 f5@2 eb5@2 eb6@2 bb5@2 f5@2 eb5@2 eb6@2 bb5@2 f5@2 eb5@2 ~@3]/2",
  K: "[~@27 db6@2 ab5@2 eb5@2 db5@2 db6@2 ab5@2 f5@2 eb5@2 eb6@2 bb5@2 f5@2 eb5@2 eb6@2 bb5@2 f5@2 eb5@2 ~@5]/2",
  L: "[~@25 db6@2 ab5@2 eb5@2 db5@2 db6@2 ab5@2 f5@2 eb5@2 eb6@2 bb5@2 f5@2 eb5@2 eb6@2 bb5@2 f5@2 eb5@2 ~@7]/2",
  M: "[~@21 f4@2 c5@2 g5@2 c5@2 f4@2 c5@2 g5@4 f4@2 c5@2 g5@2 ~ f4@2 c5@2 g5@4 ab4@2 eb5@2 bb5@2 eb5@2 ab4@2 eb5@2, ~@43 c5@2 ~@19]/2",
  N: "bb5@2 ab4 eb5 bb5 eb5 ab4 eb5 bb5@2 eb5 bb5 f6 bb5 eb5 bb5",
  O: "[f6@4 eb5@2 bb5@2 f6@2 ~ eb5@2 bb5@2 f6@4 db5@2 ab5@2 eb6@2 ab5@2 db5@2 ab5@2 eb6@4 eb5@2 bb5@2 f6@2 bb5@2 eb5@2 bb5@2 f6@4 f4@2 c5@2 g5@2 c5@2 f4@2 c5@2 g5@4 f4@2 c5@2 ~ c5@2 f4@2 c5@2 g5@4 ab4@2 eb5@2 bb5@2 eb5@2 ab4@2 eb5@2 bb5@4 ab4@2 eb5@2 bb5@2 eb5@2 ab4@2 eb5@2 bb5@4 eb5@2 bb5@2 f6@2 bb5@2 eb5@2 bb5@2 f6@4 eb5@2 bb5@2 ~ bb5@2 eb5@2 bb5@2 f6@4 db5@2 ab5@2 eb6@2 ab5@2 db5@2 ab5@2 eb6@3, ~@10 bb5@2 ~@59 g5@2 ~@61 f6@2 ~@24]/5",
  P: "~ eb5@2 bb5@2 f6@2 bb5@2 eb5@2 bb5@2 f6@4 f4@2 c5@2 g5@2 c5@2 f4@2 c5@2 g5@3",
  Q: "~ f4@2 ~ g5@2 c5@2 f4@2 c5@2 g5@4 ab4@2 eb5@2 bb5@2 eb5@2 ab4@2 eb5@2 bb5@4, ~@3 c5@2 ~@27",
  R: "ab4 eb5 bb5 eb5 ab4 eb5 bb5@2 eb5 bb5 f6 bb5 eb5 bb5 f6@2",
  S: "[eb5@2 ~ f6@2 bb5@2 eb5@2 bb5@2 f6@4 db5@2 ab5@2 eb6@2 ab5@2 db5@2 ab5@2 eb6@4 eb5@2 bb5@2 f6@2 bb5@2 eb5@2 bb5@2 eb6@4 ~@17, ~ bb5 ~@30]/2",
  T: "[~@6 f4@2 c5@2 g5@2 c5@2 f4@2 ~ g5@4 f4@2 c5@2 g5@2 c5@2 f4@2 c5@2 g5@4 ab4@2 eb5@2 bb5@2 eb5@2 ab4@2 eb5@2 bb5@4 ab4@2 eb5@2 bb5@2 eb5@2 ab4@2 eb5@2 bb5@4 eb5@2 bb5@2 f6@2 bb5@2 eb5@2 ~ f6@4 eb5@2 bb5@2 f6@2 bb5@2 eb5@2 bb5@2, ~@16 c5@2 ~@61 bb5@2 ~@15]/3",
  U: "f6@2 db5 ab5 eb6 ab5 db5 ab5 eb6@2 eb5 bb5 f6 bb5 eb5 bb5",
  V: "[f6@4 f4@2 c5@2 g5@2 c5@2 ~ c5@2 g5@4 f4@2 c5@2 g5@2 c5@2 f4@2 c5@2 g5@4 ab4@2 eb5@2 bb5@2 eb5@2 ab4@2 eb5@2 bb5@4 ab4@2 eb5@2 bb5@2 eb5@2 ab4@2 eb5@2 bb5@4 eb5@2 bb5@2 f6@2 bb5@2 ~ bb5@2 f6@4 eb5@2 bb5@2 f6@2 bb5@2 eb5@2 bb5@2 f6@4 db5@2 ab5@2 eb6@2 ab5@2 db5@2 ab5@2 eb6@4 eb5@2 bb5@2 f6@2 bb5@2 eb5@2 bb5@2 f6@4 f4@2 c5@2 g5@2 ~ f4@2 c5@2 g5@4 f4@2 c5@2 g5@2 c5@2 f4@2 c5@2 g5@3, ~@12 f4@2 ~@61 eb5@2 ~@59 c5@2 ~@22]/5",
  W: "~ ab4@2 eb5@2 bb5@2 eb5@2 ab4@2 eb5@2 bb5@4 ab4@2 eb5@2 bb5@2 eb5@2 ab4@2 eb5@2 bb5@3",
  X: "~ eb5@2 bb5@2 f6@2 ~ eb5@2 bb5@2 f6@4 eb5@2 bb5@2 f6@2 bb5@2 eb5@2 bb5@2 f6@4, ~@7 bb5@2 ~@23",
})).s("gm_banjo").gain(0.25)

// chords · lead 8 bass lead
const lead_8_bass_lead = note(`<
  A@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@2 F D E G@2 H I J@2 H I J@2 H I K@4 C@2 L@5 M@8 N@7 O P@8 Q@4 R@8
  S@8 T U@4 V@3 W@2 X Y Z AA@6 AB@5
>`.pickRestart({
  A: "[~@7 [ab2,eb3,bb3]@9, ~@28 eb4 ~@35]/2", // Absus2
  B: "[[eb2,bb2,f3,bb3]@7 [db2,ab2,eb3,ab3]@4 [eb2,bb2,f3,bb3] [eb2,bb2,f3,bb3]@4]/2", // Ebsus2 Dbsus2 Ebsus2
  C: "[[f2,c3,g3,ab3,bb3,eb4]@7 [ab2,eb3,bb3,eb4]@9]/2", D: "[c3,g3]@3 [c3,ab3]@5, eb3",
  E: "[c3,bb3]@3 [c3,ab3]@5, eb3", F: "[bb2,eb3,g3,c4]",
  G: "[[bb2,c3,f3]@3 [ab2,bb2,eb3]@4 [eb2,f2,bb2]@4 [db2,eb2,ab2]@5]/2", H: "[ab1,ab2,eb3]", I: "[eb2,eb3]",
  J: "[[bb1,bb2]@7 [ab1,ab2]@4 [bb1,bb2] [bb1,bb2]@4]/2", // Bb Ab Bb
  K: "[[bb1,bb2]@7 [ab1,ab2]@4 [bb1,bb2] [bb1,bb2]@3 [f2,bb3,f4]@17]/4", // Bb Ab Bb Bb5
  L: "[[eb2,bb2,f3,bb3]@28 [db2,ab2,eb3,ab3]@15 [eb2,bb2,f3,bb3]@4 [eb2,bb2,f3,bb3]@16 [f2,c3,g3,ab3,bb3,eb4]@28 [ab2,eb3,bb3,eb4]@35 [eb2,bb2,f3,bb3]@28 [db2,ab2,eb3,ab3]@6]/5", // Ebsus2 Dbsus2 Ebsus2 Fm7 Absus2 Ebsus2 Dbsus2
  M: "[~@9 [eb2,bb2,f3,bb3]@4 [eb2,bb2,f3,bb3]@16 [f2,c3,g3,ab3,bb3,eb4]@28 [ab2,eb3,bb3,eb4]@35 [eb2,bb2,f3,bb3]@28 [db2,ab2,eb3,ab3]@15 [eb2,bb2,f3,bb3]@4 [eb2,bb2,f3,bb3]@16 [f2,c3,g3,ab3,bb3,eb4]@27 [ab2,eb3,bb3,eb4]@35 ~ [eb2,bb2,f3,bb3]@27 [db2,ab2,eb3,ab3]@11]/8", // Ebsus2 Fm7 Absus2 Ebsus2 Dbsus2 Ebsus2 Fm7 Absus2 …
  N: "[~@5 [eb2,bb2,f3,bb3]@4 [eb2,bb2,f3,bb3]@16 [c3,g3]@12 [c3,ab3]@19 [c3,bb3]@12 [c3,ab3]@20 [c3,bb3]@12 [c3,ab3]@19 [bb2,eb3,g3,c4]@31 ~ [c3,g3]@12 [c3,ab3]@19 [c3,bb3]@12 [c3,ab3]@20 [bb2,c3,f3]@10, ~@25 eb3@31 eb3@31 ~ eb3@31 ~@32 eb3@31 eb3@31 ~@11]/7", // Ebsus2 C5 Fm C7 Fm C7 Fm Cm7 …
  O: "~@2 [ab2,bb2,eb3]@15 [eb2,f2,bb2]@15", // Absus2 Ebsus2
  P: "[~ [db2,eb2,ab2]@20 [ab1,ab2,eb3]@31 [eb2,eb3]@31 ~ [bb1,bb2]@27 [ab1,ab2]@16 [bb1,bb2]@4 [bb1,bb2]@16 [ab1,ab2,eb3]@31 [eb2,eb3]@31 ~ [bb1,bb2]@27 [ab1,ab2]@16 [bb1,bb2]@3]/8", // Dbsus2 Ab5 Eb Bb Ab Bb Ab5 Eb …
  Q: "[~ [bb1,bb2]@16 [ab1,ab2,eb3]@31 [eb2,eb3]@31 ~ [bb1,bb2]@27 [ab1,ab2]@16 [bb1,bb2]@4 [bb1,bb2]]/4", // Bb Ab5 Eb Bb Ab Bb
  R: "[~@11 [f2,bb3,f4]@67 [eb3,bb3,c4]@31 [eb3,bb3,eb4]@31 ~ [f3,c4,f4]@31 [ab2,eb4,ab4]@16 [bb2,f4,bb4]@16 [eb3,bb3,c4]@31 [eb3,bb3,eb4]@21]/8", // Bb5 Cm7 Eb5 F5 Ab5 Bb5 Cm7 Eb5
  S: "[~@11 [f3,c4,f4]@31 [ab2,eb4,ab4]@16 [bb2,f4,bb4]@16 [c3,g3]@12 [c3,ab3]@19 [c3,bb3]@12 [c3,ab3]@20 [c3,bb3]@12 [c3,ab3]@19 [bb2,eb3,g3,c4]@31 ~ [c3,g3]@12 [c3,ab3]@19 [c3,bb3]@12 [c3,ab3]@13, ~@74 eb3@31 eb3@31 ~ eb3@31 ~@32 eb3@31 eb3@25]/8", // F5 Ab5 Bb5 C5 Fm C7 Fm C7 …
  T: "~@7 [bb2,c3,f3]@11 [ab2,bb2,eb3]@14", // Bbsus2 Absus2
  U: "[~@2 [eb2,f2,bb2]@16 [db2,eb2,ab2]@20 [ab1,ab2,eb3]@31 [eb2,eb3]@31 ~ [bb1,bb2]@27]/4", // Ebsus2 Dbsus2 Ab5 Eb Bb
  V: "[[ab1,ab2]@16 [bb1,bb2]@4 [bb1,bb2]@16 [ab1,ab2,eb3]@31 [eb2,eb3]@29]/3", // Ab Bb Ab5 Eb
  W: "[~@3 [bb1,bb2]@27 [ab1,ab2]@16 [bb1,bb2]@4 [bb1,bb2]@14]/2", X: "~ [ab1,ab2,eb3]@15", Y: "~ [eb2,eb3]@31",
  Z: "~ [bb1,bb2]@27 [ab1,ab2]@4", // Bb Ab
  AA: "[~@12 [bb1,bb2]@4 [bb1,bb2]@12 [f2,bb3,f4]@67 [eb3,bb3,c4]@31 [eb3,bb3,eb4]@31 ~ [f3,c4,f4]@31 [ab2,eb4,ab4]@3]/6", // Bb Bb5 Cm7 Eb5 F5 Ab5
  AB: "[~@13 [bb2,f4,bb4]@16 [eb3,bb3,c4]@31 [eb3,bb3,eb4]@31 ~ [f3,c4,f4]@31 [ab2,eb4,ab4]@16 [bb2,f4,bb4]@16 ~@5]/5", // Bb5 Cm7 Eb5 F5 Ab5 Bb5
})).s("gm_lead_8_bass_lead").gain(0.28)

// drums · kick
const kick = s("bd").struct(`<
  A ~ A B A ~ A B A ~ A B A ~ A B A ~ A B A ~ A B A C A C A C D E F@12 ~@2 A ~ A G H I J K L C M N O J P Q R S T U V W X
  Y Z AA AB AC AD AE AF AG AH AI AJ AK AL AM AN@2 AO AP AQ AR AS AL AT AU AV AW AX AY AZ BA BB BC BD BE BF BG BH BI BJ
  BK F BL BM BN@2 K@2 BO@2 N BP
>`.pickRestart({
  A: "x ~@6 x", B: "~@3 x!2 ~@3", C: "~@7 x", D: "x!4 ~ x!3", E: "~ x ~ x!2 ~ x!2", F: "x ~@2 x!2 ~@3",
  G: "~@11 x ~@3 x ~@15 x", H: "~@27 x ~@4", I: "~@15 x", J: "~@13 x ~@2", K: "~@9 x ~@3 x ~@15 x ~@2", L: "~@25 x ~@6",
  M: "~@3 x", N: "~@7 x ~@3 x ~@15 x ~@4", O: "~@11 x ~@4", P: "~@21 x ~@10", Q: "~@5 x ~@3 x ~@15 x ~@6",
  R: "~@5 x ~@2", S: "~@5 x!2 ~", T: "~@19 x ~@12", U: "~@19 x ~@3 x ~@8", V: "~@9 x ~@6", W: "~@9 x ~ x ~ x ~ x",
  X: "~@2 x ~@7 x ~@2 x ~@3 x ~@7 x ~@6", Y: "~ x ~@3 x ~@7 x ~@3 x ~@3 x ~@10", Z: "~ x ~@3 x ~@14 x ~@11",
  AA: "x!2 ~@3 x ~@2", AB: "x ~@3 x ~@14 x ~@11 x", AC: "~@3 x ~@15 x ~@11 x", AD: "~@3 x ~@14 x ~@11 x ~",
  AE: "~ x ~@7 x ~@5 x", AF: "~@2 x ~@14 x ~@11 x ~@2", AG: "~ x ~@15 x ~@11 x ~@2", AH: "~ x ~@14 x ~@11 x ~@3",
  AI: "x ~@3 x ~@2 x", AJ: "x ~@14 x ~@11 x ~@3 x", AK: "~@15 x ~@16", AL: "~@5 x ~@10", AM: "~@7 x ~@5 x ~ x",
  AN: "~@13 x ~@11 x ~@3 x ~@2", AO: "~@3 x ~@2 x!2", AP: "~@12 x ~@11 x ~@2 x ~@4", AQ: "~@11 x ~@11 x ~@3 x ~@4",
  AR: "~@11 x ~@11 x ~@2 x ~@5", AS: "~@5 x ~@5 x ~ x ~@2", AT: "~@5 x ~@26", AU: "~@5 x ~@3 x ~@22", AV: "~ x ~@6",
  AW: "~ x!2 ~@5", AX: "~@3 x ~@28", AY: "~@3 x ~@3 x ~@3 x ~@3 x ~@2 x ~@7 x ~@3 x ~", AZ: "~ x ~@3 x ~@3 x ~ x ~@3 x",
  BA: "~@2 x ~@3 x ~@10 x ~@3 x ~@10", BB: "~@5 x ~@11 x ~@3 x ~@10", BC: "~@5 x ~@10 x ~@3 x ~@11",
  BD: "~ x ~@2 x!2 ~@2", BE: "~@4 x ~@10 x ~@3 x ~@12", BF: "~@3 x ~@11 x ~@3 x ~@12", BG: "~@3 x ~@10 x ~@3 x ~@13",
  BH: "~ x ~@5 x ~ x ~@6", BI: "~@2 x ~@10 x ~@3 x ~@14", BJ: "~ x ~@11 x ~@3 x ~@14", BK: "~ x ~@10 x ~@3 x ~@15",
  BL: "x ~@26 x ~@4", BM: "~@31 x", BN: "~@5 x ~ x ~@7 x", BO: "~@2 x!2 ~@3 x", BP: "~@7 x ~@3 x ~@20",
})).gain(0.48)

// drums · rim
const rim = s("rim").struct("<~@46 A@3 B@2 C@2 D@2 E@2 F@2 G@2 H I J K L M N ~@23 O P I J K L ~@24>".pickRestart({
  A: "~ x ~ x", B: "~@7 x ~@15 x ~@8", C: "~@3 x ~@7 x ~@4", D: "~@5 x ~@15 x ~@10", E: "~ x ~@3 x ~@2",
  F: "~@3 x ~@15 x ~@12", G: "~ x ~@7 x ~@6", H: "~ x ~@15 x ~@7 x ~@6", I: "~ x ~@7 x ~@7 x ~@6 x ~@7", J: "x!4",
  K: "x ~@7 x ~@7 x ~@6 x ~@7 x", L: "~@7 x ~@7 x ~@7 x ~@7 x", M: "~@7 x ~@7 x ~@6 x ~@7 x ~", N: "~@3 x ~@3 x ~@8",
  O: "~@10 x ~@7 x ~@6 x ~@6", P: "~ x ~@7 x ~@7 x ~@7 x ~@6",
})).gain(0.36)

// drums · snare
const snare = s("sd").struct(`<
  ~@30 A B C@3 D C@7 E ~@23 F G H I@2 J@2 K@2 L@2 C@2 M ~ N O P@2 Q R S@2 T ~@6 U V W X Y I Z J AA K L@2 C E AB AC AD@2
  P AE AF@2 S AG
>`.pickRestart({
  A: "~ x!2 ~ x!2 ~@2", B: "~@9 x!2 ~@5", C: "~ x ~ x", D: "~@4 x ~@6 x!2 ~@3", E: "~ x ~@2", F: "~@13 x ~ x",
  G: "~@3 x ~ x ~@10", H: "~@7 x ~ x ~@19 x ~@2", I: "~@3 x ~@3 x", J: "~@11 x ~@15 x ~@4", K: "~@5 x ~@7 x ~@2",
  L: "~@9 x ~@15 x ~@6", M: "~@7 x ~@15 x ~@8", N: "~@3 x ~@11 x", O: "x!4 ~@7 x ~@4", P: "~@5 x ~@15 x ~@10",
  Q: "~@2 x ~@7 x ~@3 x!2", R: "x ~ x ~ x!2 ~@4 x ~@5", S: "~@3 x ~@15 x ~@12", T: "~ x ~@7 x ~@6",
  U: "~@11 x ~@3 x ~@6 x ~@3 x ~@5", V: "~@12 x!2 ~@2", W: "~@14 x ~@14 x ~@2", X: "~@13 x ~@15 x ~@2",
  Y: "~@13 x ~@14 x ~@3", Z: "~@12 x ~@14 x ~@4", AA: "~@11 x ~@14 x ~@5", AB: "~@23 x ~@8",
  AC: "~@15 x ~ x ~ x ~ x ~ x ~@8", AD: "~@3 x ~@7 x ~@4", AE: "~@5 x ~@7 x ~ x ~ x ~@3 x ~@3 x ~ x ~@4",
  AF: "~ x ~@3 x ~@2", AG: "~@3 x ~@28",
})).gain(0.54)

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@81
  [~@19 x ~@3 x ~@3 x ~@3 x]
  [~ x ~@14]
  ~@28
  [~@4 x ~@2 x ~@3 x ~@3 x ~@3 x ~@12]
  ~@9
>`).gain(0.24)

// drums · low tom
const low_tom = s("lt").struct("<~@73 A ~@3 B ~@4 C ~@19 D ~@3 E ~@4 F G ~@8>".pickRestart({
  A: "~@7 x ~@24", B: "~@13 x ~@18", C: "~@5 x ~ x ~ x ~ x ~@4", D: "~@3 x", E: "~@15 x", F: "~@27 x ~@3 x",
  G: "~@3 x ~@3 x ~@24",
})).gain(0.48)

// drums · hihat
const hihat = s("hh").struct("<~@24 A@6 ~@14 B@2 ~@15 C D A E F G H ~@23 I J K A L F M ~@23>".pickRestart({
  A: "~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2", B: "~ x ~ x ~ x ~ x", C: "~@29 x ~ x",
  D: "~@5 x ~ x ~@5 x ~ x ~@4 x ~ x ~@5 x ~ x ~", E: "~@4 x ~ x ~@5 x ~ x ~@4 x ~ x ~@5 x ~ x ~@2",
  F: "~@3 x ~ x ~@5 x ~ x ~@5 x ~ x ~@5 x ~ x ~@2", G: "~@3 x ~ x ~@5 x ~ x ~@4 x ~ x ~@5 x ~ x ~@3",
  H: "~ x!2 ~@2 x!2 ~@2 x!2 ~@5", I: "~@14 x ~ x ~@5 x ~ x ~@4 x ~ x", J: "~@5 x ~ x ~@5 x ~ x ~@5 x ~ x ~@5 x ~ x",
  K: "~@5 x ~ x ~@5 x ~ x ~@5 x!2 ~@5 x ~ x ~", L: "~@4 x ~ x ~@5 x ~ x ~@5 x!2 ~@5 x ~ x ~@2", M: "~@3 x ~ x ~@26",
})).gain(0.24)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@30 A B ~@7 C ~@3 D ~@23 E F G ~@7 H ~@3 I J K ~@7 L ~@5 M N O ~@6 P ~@3 D ~ Q ~@7 R
>`.pickRestart({
  A: "~@4 x ~@2 x!2 ~@2 x!2 ~@3", B: "~@4 x!2 ~@8 x ~", C: "~@11 x ~@4", D: "~@3 x", E: "~@15 x",
  F: "~@4 x ~ x ~@5 x!2 ~@15 x ~ x", G: "~@17 x ~@14", H: "~@5 x ~ x ~@5 x ~@18", I: "~@7 x ~@24", J: "~@13 x ~@2",
  K: "~@3 x ~ x ~@10", L: "~ x ~ x ~@12", M: "~@15 x ~@4 x ~ x ~@5 x ~ x ~", N: "~@7 x!2 ~@7", O: "~ x ~@14",
  P: "~@11 x!2 ~@2 x", Q: "~@11 x ~@11 x ~@3 x ~@4", R: "~@19 x ~@3 x ~@8",
})).gain(0.48)

// drums · open hat
// … 63 more lines

More by Bruce Hornsby