Strudelify

Spider Fingers

Bruce Hornsby

KeyF majorTempo124 bpm
0:00/0:00
// Spider Fingers — Bruce Hornsby
// 124 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: metre changes (4/4 at bar 1, 5/4 at bar 3, 4/4 at bar 5, 5/4 at bar 125, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: Full arrangement: all 189 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(124/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 E F E F E G H@2 I@4 J@2 K@3 L E F E F E F E F M N O P M Q M@2 R@2 S@2 I@2 T@2 H@2 S@2 I@2 U V K@3 L E F E
  F E F E W X Y Z AA X AB AC AD E F E AE M@3 AF M@4 AG AH AI AJ AK AL AM AN AO AP AQ AR K@3 L E F E F E F E W X Y Z AS X
  AT AC AD E F E AU AV AW AX AY AZ BA BB BC BD BE BF BG BH BI BJ@3 BK BL BM BL BM BN BO BP BQ@2 BR BS BT BU BV@2 BW BX@3
  BY BZ CA CB CA CB CA CB CA CC CD CE CF CG CD CE CF CG CD CE CF CG CH CI CJ CK CL CM
>`.pickRestart({
  A: "~@12 [eb4,g4,bb4,d5]@2 ~ [d4,f4,a4,c5]", // Ebmaj7 Dm7
  B: "~@4 [eb4,g4,bb4,d5]@2 ~ [d4,f4,a4,c5] ~@2 [d4,f4,a4,c5] ~@3 [d4,f4,a4,c5] ~", // Ebmaj7 Dm7
  C: "~@2 [d4,f4,a4,c5] ~ [eb4,g4,bb4,d5]@2 ~ [d4,f4,a4,c5] ~@4 [eb4,g4,bb4,d5]@2 ~ [d4,f4,a4,c5]", // Dm7 Ebmaj7 Dm7 Ebmaj7 Dm7
  D: "~@4 [eb4,g4,bb4,d5]@2 ~ [d4,f4,a4,c5] ~@8", // Ebmaj7 Dm7
  E: "[eb4,g4,bb4,d5]@2 ~ [d4,f4,a4,c5] ~@4 [eb4,g4,bb4,d5]@2 ~ [d4,f4,a4,c5] ~@2 [d4,f4,a4,c5] ~", // Ebmaj7 Dm7 Ebmaj7 Dm7
  F: "~@2 [d4,f4,a4,c5] ~@3 [d4,f4,a4,c5] ~ [eb4,g4,bb4,d5]@2 ~ [d4,f4,a4,c5] ~@4", // Dm7 Ebmaj7 Dm7
  G: "~@2 [d4,f4,a4,c5] ~@3 [d4,f4,a4,c5] ~ [eb4,g4,bb4,d5]@2 ~ [d4,f4,a4,c5] ~@2 bb4 ~", // Dm7 Ebmaj7 Dm7
  H: "[[bb3,f4]@2 ~ [c4,f4]@2 ~ [d4,f4] ~@9 a3@8 ~@6 [bb3,f4] ~, ~@8 [c4,f4]@11 ~@13]/2", // Bb5 F5 Dm Bb5 F5
  I: "[[bb3,f4]@2 ~ [c4,f4]@2 ~ [d4,f4] ~@9 f3@8 ~@6 [bb3,f4] ~, ~@8 [c4,f4]@11 ~@13]/2", // Bb5 F5 Dm Bb5 F5
  J: "[[bb3,f4]@2 ~ [c4,f4]@2 ~ [d4,f4] ~@9 d4@5 ~ [f3,c4]@3 ~ d3 ~ [f3,c4]@2 g4 a4, ~@8 [c4,f4]@11 ~@13, ~@6 f3@5 ~@5]/2", // Bb5 F5 Dm F5
  K: "[f3,bb3]@4 ~@2 [f3,bb3]@4 ~@2 [f3,bb3]@3 ~", L: "[f3,bb3]@4 ~@2 [f3,bb3]@3 ~@2 [f3,c4]@2 ~ [f3,d4] ~", M: "f4!16",
  N: "f4!5 c5 f4!6 f5 f4!3", O: "f4!3 f5 f4!7 c5 f4!3 f5", P: "f4!7 bb4 f4!3 f5 f4!4", Q: "f4!11 c5 f4!4",
  R: "[[bb3,f4]@2 ~ [c4,f4]@2 ~ [d4,f4] ~ [c4,f4]@11 ~@11 [bb3,f4] ~]/2", // Bb5 F5 Dm F5 Bb5
  S: "[[bb3,f4]@2 ~ [c4,f4]@2 ~ [d4,f4] ~@5 f3@3 ~ a3@8 ~@6 [bb3,f4] ~, ~@8 [c4,f4]@11 ~@13]/2", // Bb5 F5 Dm Bb5 F5
  T: "[[bb3,f4]@2 ~ [c4,f4]@2 ~ [d4,f4] ~@9 d4@5 ~@9 [bb3,f4] ~, ~@8 [c4,f4]@11 ~@13, ~@12 f3@11 ~@9]/2", // Bb5 F5 Dm Bb5 F5
  U: "[f4,eb5]@4 ~@2 [f4,d5] ~ [ab4,c5] ~ f4@4 ~@2", V: "[f3,c4,f4]@5 ~@3 [c4,f4]@3 ~ f3@3 ~",
  W: "~@2 [d4,f4,a4,c5] ~@3 [d4,f4,a4,c5] ~ [eb4,g4,bb4,d5]@2 ~ [d4,f4,a4,c5] ~@2 c4@2", // Dm7 Ebmaj7 Dm7
  X: "~@2 [f3,bb3] ~ [f3,c4] ~ [f3,d4] ~ [f3,eb4]@2 ~ [f3,d4]@2 ~ [f3,c4] ~", // Bb5 F5 Dm F7 Dm F5
  Y: "[f3,bb3]@2 ~ [f3,d4]@2 ~ [f3,c4]@4 ~@2 f3 ~ f4@2", // Bb5 Dm F5
  Z: "~@2 [f3,bb3] ~ [f3,c4] ~ [f3,d4] ~ [f3,eb4]@2 ~ [f3,f4]@2 ~ [f3,d4] ~", // Bb5 F5 Dm F7 F Dm
  AA: "[f3,bb3]@2 ~ [f3,d4]@2 ~ [f3,c4]@3 ~ c4 ~ a3 ~ c4@2", AB: "[f3,bb3]@2 ~ [f3,d4]@2 ~ [f3,c4]@4 ~@2 f3 ~ f4 ~",
  AC: "f3 ~ [f3,bb3] ~ [f3,c4] ~ [f3,d4] ~ eb4@2 ~ c4@2 ~ g4@2", AD: "~ eb4@2 ~ c4@2 ~ bb4@2 ~ g4@2 ~ d5 ~ bb4",
  AE: "~@2 [d4,f4,a4,c5] ~@3 [d4,f4,a4,c5] ~ [eb4,g4,bb4,d5]@2 ~ [d4,f4,a4,c5] c4@2 ~ f4", AF: "f4!4 g4 f4!11",
  AG: "a4!4 ~ g4 a4 bb4 ~ a4 ~ c5 ~ bb4 [a4,bb4] ~", AH: "a4!7 bb4 ~ d5 ~ c5 ~ a4 ~ bb4",
  AI: "a4!7 bb4 ~ a4 ~ c5 ~ bb4 a4 g4", AJ: "a4!2 g4!2 f4 eb4 g4 f4 ~@8", AK: "a4!4 ~ a4 ~ bb4 ~ a4 ~ c5 ~ a4 ~ a4",
  AL: "a4!4 ~ a4 ~ bb4 ~ d5 ~ c5 ~ a4 ~ bb4", AM: "bb4@2 ~ bb4 ~ bb4 ~ a4 g4@2 ~ bb4 ~ bb4 ~ a4",
  AN: "a4@2 ~ a4 ~ a4 ~ g4 f4@2 ~ [d4,bb4] ~ [d4,bb4] ~ a4", // Gm
  AO: "g4@2 ~ [c4,f4,a4] ~ [c4,f4,a4] ~ [bb3,eb4,g4] [a3,d4,f4]@2 ~ [c4,f4,a4] ~ [c4,f4,a4] ~ [bb3,eb4,g4]", // F Eb Dm F Eb
  AP: "f4@2 ~ [bb3,eb4,g4] ~ [bb3,eb4,g4] ~ [a3,d4,f4] [g3,c4,eb4]@2 ~ [d4,g4,bb4] ~ [d4,g4,bb4] ~ [c4,f4,a4]", // Eb Dm Cm Gm F
  AQ: "[bb3,eb4,g4]@2 ~ [d4,g4,bb4] ~ [d4,g4,bb4] ~ [c4,f4,a4] [c4,f4,a4]@2 ~ [bb3,eb4,g4] ~ [bb3,eb4,g4] ~ [a3,d4,f4]", // Eb Gm F Eb Dm
  AR: "[a3,d4,f4]@2 ~ [bb3,eb4] ~ [bb3,eb4] ~ [c4,f4] [c4,f4]@2 ~ [c4,f4]@2 ~ [c4,f4] ~", // Dm Eb5 F5
  AS: "[f3,bb3]@2 ~ [f3,d4]@2 ~ [f3,c4]@3 ~ c4 ~ a3 ~ c4@2, ~@3 a4@2 ~@3", // Bb5 Dm F5
  AT: "[f3,bb3]@2 ~ [f3,d4]@2 ~ [f3,c4,c5]@5 ~ f3 ~ f4 ~", // Bb5 Dm F5
  AU: "~@2 [d4,f4,a4,c5] ~@3 [d4,f4,a4,c5] ~ [eb4,g4,bb4,d5]@2 ~ [d4,f4,a4,c5] ~@2 [d4,f4,a4,c5] ~", // Dm7 Ebmaj7 Dm7
  AV: "[eb4,g4,bb4,d5]@2 ~ [d4,f4,a4,c5] ~@4 [eb4,g4,bb4,d5]@2 ~ [d4,f4,a4,c5] ~@4", // Ebmaj7 Dm7 Ebmaj7 Dm7
  AW: "~@4 [d4,eb4,g4,bb4]@2 ~ [c4,d4,f4,a4] ~@2 [c4,d4,f4,a4] ~ [d4,eb4,g4,bb4]@2 ~ [c4,d4,f4,a4]", // Ebmaj7 Dm7 Ebmaj7 Dm7
  AX: "~@2 [c4,d4,f4,a4] ~@3 [c4,d4,f4,a4] ~@3 [c4,d4,f4,a4] ~ [d4,eb4,g4,bb4]@2 ~ [c4,d4,f4,a4]", // Dm7 Ebmaj7 Dm7
  AY: "~@2 [c4,d4,f4,a4] ~ [d4,eb4,g4,bb4]@2 ~ [c4,d4,f4,a4] ~@2 [c4,d4,f4,a4] ~ [d4,eb4,g4,bb4]@2 ~ [c4,d4,f4,a4]", // Dm7 Ebmaj7 Dm7 Ebmaj7 Dm7
  AZ: "~@2 [c4,f4] ~ [d4,f4]@2 ~ [c4,f4] ~@2 [c4,f4] ~ [d4,f4]@2 ~ [c4,f4]", // F5 Dm F5 Dm F5
  BA: "~@2 [d4,f4] ~ [eb4,f4] ~ [d4,f4] [c4,f4] ~ [bb3,f4] ~ [c4,f4]@2 ~ [c4,f4] ~", // Dm Ebsus2 Dm F5 Bb5 F5
  BB: "[c4,f4]@3 ~ [a3,f4] c4 ~ a3 [c4,f4]@2 ~ [g3,c4] ~ [f3,c4] ~ [d3,c4]", // F5 Dm F5 C5 F5 D7
  BC: "~ [f3,c4] ~ d3 [g3,c4] ~ [d3,c4] [g3,c4] ~ [f3,c4] ~ d3 [f3,c4] ~ [f3,c4] ~", // F5 C5 D7 C5 F5
  BD: "[f3,c4]@3 ~ [a3,f4] c4 ~ a3 [c4,f4]@3 ~ [a3,f4] c4 ~ a3", // F5 Dm F5 Dm
  BE: "[d4,f4]@2 ~ [eb4,f4] ~ [d4,f4] ~ [c4,f4] ~ bb3 d4 [c4,f4] ~ [c4,f4] ~ a3", // Dm Ebsus2 Dm F5
  BF: "[c4,f4]@2 ~ [a3,f4] ~ [a3,c4] ~ f3 [g3,c4] ~ [g3,c4] [d3,c4] ~ [f3,c4] ~ [g3,c4]", // F5 Dm Am C5 D7 F5 C5
  BG: "~ [f3,c4] ~ [g3,c4]@2 ~ [f3,c4] ~ [d3,c4] ~ [f3,c4]@3 ~ [f3,c4] ~", // F5 C5 F5 D7 F5
  BH: "[f3,c4]@2 ~ [a3,f4] ~ [c4,f4] ~ [d4,g4]@2 ~ [c4,f4]@2 ~ [c4,f4]@2 ~", // F5 Dm F5 G5 F5
  BI: "[a3,d4,f4]@2 ~ [d4,f4] ~ [c4,f4] ~ [bb3,f4] ~ [d4,f4] ~ [c4,f4] ~ [c4,f4] ~ [c4,f4]", // Dm F5 Bb5 Dm F5
  BJ: "[~ [c4,f4]@2 ~@2 [a3,d4] ~ [a3,d4]@3 ~ [g3,c4] ~ [bb3,d4] ~ [d4,g4]@2 ~ [c4,f4] ~ [a3,d4]@2 ~ [a3,d4]@2 ~ [c4,f4]@2 ~ [c4,f4] ~ [c4,f4]@4 ~@2 [f3,c4,f4] ~ [f3,c4,f4] ~ [f3,c4,f4] ~ [f3,c4,f4] [f3,bb3,f4]@3 ~]/3", // F5 D5 C5 Bb G5 F5 D5 F5 …
  BK: "~@4 [bb3,d4,eb4,g4]@2 ~ [a3,c4,d4,f4] ~@2 [a3,c4,d4,f4] ~ [bb3,d4,eb4,g4]@2 ~ [a3,c4,d4,f4]", // Ebmaj7 Dm7 Ebmaj7 Dm7
  BL: "~@2 [a3,c4,d4,f4] ~@3 [a3,c4,d4,f4] ~@3 [a3,c4,d4,f4] ~ [bb3,d4,eb4,g4]@2 ~ [a3,c4,d4,f4]", // Dm7 Ebmaj7 Dm7
  BM: "~@2 [a3,c4,d4,f4] ~ [bb3,d4,eb4,g4]@2 ~ [a3,c4,d4,f4] ~@2 [a3,c4,d4,f4] ~ [bb3,d4,eb4,g4]@2 ~ [a3,c4,d4,f4]", // Dm7 Ebmaj7 Dm7 Ebmaj7 Dm7
  BN: "~@2 [d4,f4] ~ [d4,f4] ~ [c4,f4]!2 ~ [bb3,f4] ~ [c4,f4]@4 ~", // Dm F5 Bb5 F5
  BO: "~@2 [eb4,f4]!2 ~ [d4,f4] ~ [c4,f4] ~ [bb3,f4] ~ [a3,c4]@2 ~@2 [a3,c4]", // Ebsus2 Dm F5 Bb5 Am
  BP: "~ [g3,c4] ~ [f3,c4] ~ d3 [f3,c4] ~ [f3,c4] ~ [g3,c4] f3 ~@4", // C5 F5 C5
  BQ: "[~@3 [c4,eb4,ab4] ~ [bb3,d4,g4]@2 ~ [c4,f4] ~ bb3 [c4,f4] ~ [c4,f4] ~ [c4,f4]@2 ~ [c4,f4] [d4,f4] ~ [d4,eb4] ~ [d4,f4] ~ bb3 [c4,f4] ~ [a3,c4] ~@3]/2", // Ab Gm F5 Dm Ebmaj7 Dm F5 Am
  BR: "[f3,bb3,d4] ~ [f3,a3,c4]!2 ~ [f3,bb3,d4]@2 ~ [f3,bb3,d4] ~ [f3,a3,c4] [f3,bb3,d4] ~ [f3,a3,c4]@2 ~", // Bb F Bb F Bb F
  BS: "[f3,c4,f4] ~ [f3,a3,c4] [f3,bb3,d4] ~ [f3,a3,c4]@2 ~ [f3,a3,c4] ~ [f3,bb3,d4] ~ [f3,c4,f4]@3 ~", // F5 F Bb F Bb F5
  BT: "f3@2 ~ [a3,c4] ~ [bb3,d4] ~ f3 [bb3,d4] ~ [a3,c4] [bb3,d4] ~ [a3,c4]@2 ~", // Am Bb Am Bb Am
  BU: "[a3,c4] ~ [bb3,d4]!2 ~ [a3,c4] ~ f3 [a3,c4] ~ [bb3,d4] ~ [c4,f4]@3 ~", // Am Bb Am Bb F5
  BV: "[~@3 [eb4,f4] ~ [bb3,d4] ~ [a3,d4] ~ a3 ~ [c4,eb4,ab4] ~ [bb3,d4,g4] ~ [a3,c4,f4]@3 ~ [a4,c5] ~ [a4,c5] ~ [g4,c5] ~ [f4,c5] ~ d4 f4 ~ g4 f4]/2", // Ebsus2 Bb D5 Ab Gm F Am C5 …
  BW: "~ c4 ~ [a4,c5] [ab4,c5] a4 bb4 a4 f4 c4 g4 f4 c4 eb4 d4 ~", // Am Ab
  BX: "[c4 ~@2 [bb3,c4]@3 ~ [a3,c4] ~@4 [d3,f3,bb3,c4]@2 ~ [c3,f3,a3,c4]@2 ~ [c3,f3,a3,c4] ~@3 [c3,f3,c4] ~ [c3,f3,c4] ~ [c3,f3,c4] ~ [d3,f3,bb3,c4]@2 ~ [c3,f3,a3,c4]@2 ~ [c3,f3,a3,c4] ~ [d3,f3,bb3,c4]@2 ~ [c3,f3,a3,c4] ~ [c3,f3,a3,c4]@2 ~ [d3,f3,bb3,c4]@4]/3", // Bbsus2 Am Bb F F5 Bb F Bb …
  BY: "~@12 [f3,bb3,d4,f4]@2 ~ [f3,a3,c4,f4]", // Bb F
  BZ: "~@4 [bb3,d4,g4]@2 ~ [a3,c4,f4] ~@2 [a3,c4,f4] ~ [bb3,d4,g4]@2 ~ [a3,c4,f4]", // Gm F Gm F
  CA: "~@2 [a3,c4,f4] ~@3 [a3,c4,f4] ~@3 [a3,c4,f4] ~ [bb3,d4,g4]@2 ~ [a3,c4,f4]", // F Gm F
  CB: "~@2 [a3,c4,f4] ~ [bb3,d4,g4]@2 ~ [a3,c4,f4] ~@2 [a3,c4,f4] ~ [bb3,d4,g4]@2 ~ [a3,c4,f4]", // F Gm F Gm F
  CC: "~@2 [a3,c4,f4] ~ [bb3,c4,eb4,g4]@4 ~@2 [bb3,c4,d4,f4]@5 ~", CD: "~@4 [eb4,ab4,c5]@4 ~@2 [c4,f4,bb4]@5 ~",
  CE: "~@4 [eb4,ab4]@3 ~ [c4,f4]@8", CF: "~@6 [c4,f4]!2 ~@2 [c4,f4]!2 ~@2 [c4,f4]!2",
  CG: "~@2 [c4,f4]!2 [bb3,c4,eb4,g4]@4 ~@2 [bb3,c4,d4,f4]@5 ~", CH: "~@4 bb3 ~ c4 ~ d4@2 ~ eb4@2 c4@2 ~",
  CI: "g4@2 ~ eb4@2 ~ c4@2 ~@2 bb4@3 ~ g4@2", CJ: "~@2 d5@3 ~@3 bb4@4 ~@4", CK: "~@11 [f4,c5,f5]!5",
  CL: "[f4,c5,f5]!16", CM: "[f4,c5,f5] ~ [f4,c5,f5]!10 [f4,c5,f5]@3 ~",
})).s("gm_piano").gain(0.48)

// other · piano
const piano_2 = note(`<
  A B@2 C D E D E F G D H ~@12 D E D E F G D E ~@4 I J I K ~@20 D E D E F G D E L M N O L M P Q D E F G ~@4 I R I R ~@16
  D E D E F G D E L M N O L M P Q D E F G S T U@2 V W X Y Z W AA AB AC AD AE AF AG AH AI AJ AI AJ AK AL AM@10 AN AO AP
  AQ AR AS AT AS AT AS AT AS AU AV AW@3 AV AW@3 AV AW@3 AX AY AZ BA BB BC
>`.pickRestart({
  A: "~@12 f3!4", B: "f3!16", C: "f3!8 ~@8", D: "f2 ~ f3 f2 ~ f3!3 f2 ~ f3 f2 ~ f3!3", E: "f3!8 f2 ~ f3 f2 ~ f3!3",
  F: "eb2 ~ eb3 eb2 ~ eb3!3 eb2 ~ eb3 eb2 ~ eb3!3", G: "c3!8 c2 ~ c3 c2 ~ c3!3", H: "f3!8 f2 ~ f3 f2@2 ~ eb2 ~",
  I: "[f3,c4]@2 ~ [d3,bb3]@2 ~ [eb3,bb3]@2", J: "~@2 [d3,bb3]@4 ~@2 [eb3,bb3]@5 ~@3",
  K: "~@2 [f3,c4]@4 ~@2 [f3,c4]@4 ~@2 [f3,c4] ~", L: "~@2 g2 ~ a2 ~ bb2 ~ c3@2 ~ bb2@2 ~ a2 ~",
  M: "g2@2 ~ bb2@2 ~ ab2@4 ~@6", N: "~@2 g2 ~ a2 ~ bb2 ~ c3@2 ~ d3@2 ~ bb2 ~", O: "g2@2 ~ bb2@2 ~ f2@4 ~@6",
  P: "~@2 g2 ~ a2 ~ bb2 ~ c3@2 ~ ab2@2 ~ eb3@2", Q: "~ c3@2 ~ a2@2 ~ g3@2 ~ eb3@2 ~ bb3 ~ g3",
  R: "~@2 [d3,bb3]@4 ~@2 [f3,c4]@5 ~@3", S: "f3!12 ~@4", T: "~@4 f2 ~ f3 f2 ~ c3 f3 c3 f2 ~ f3 f2",
  U: "~ c3 f3 c3 f2 ~ f3 f2 ~ c3 f3 c3 f2 ~ f3 f2", V: "~ c3 f3 c3 f2 c3 f3 f2 c3 f3 c3 f3 f2 c3 f3 f2",
  W: "c3 f3 c3 f3 bb2 f3 bb3 bb2 eb2 bb2 eb3 bb2 f2 c3 f3 f2", X: "c3 f3 c3 f3 f2 c3 f3 f2 c3 f3 c3 f3 f2 ~ c3 ~",
  Y: "c3 ~ c3 ~ bb2@3 ~ eb2 ~ bb2 ~ f2 c3 ~ c3", Z: "~ c3 ~ c3 f2 c3 f3 f2 c3 f3 c3 f3 f2 c3 f3 f2",
  AA: "c3 f3 c3 f3 bb2 ~ bb2 ~ eb2 ~ eb2 ~ f2 ~ c3 ~", AB: "f2 ~ c3 ~ bb2!2 ~ eb2 ~ eb2 ~ f2 ~ c3 ~ c3",
  AC: "c3 ~ c3 ~ f2 c3 f3 f2 c3 f3 c3 f3 f2 c3 f3 f2", AD: "c3 f3 c3 f3 bb2 ~ bb2 ~ eb2 ~ d2 ~ f2 c3 f3 f2",
  AE: "c3 f3 c3 f3 f2 c3 f3 f2 c3 f3 c3 f3 f2 c3 f3 f2",
  AF: "c3 f3 c3 f3 [bb2,g3]@2 ~ [bb2,g3]@2 ~ [f2,c3,f3]@3 ~ [f2,c3,f3] ~", // Eb F5
  AG: "[f2,c3,f3]@3 ~ eb2 bb2 eb3 eb2 bb2 eb3 bb2 eb3 eb2@3 ~", AH: "~@4 f2 ~ f3 f2 ~ f3!3 f2 ~ f3 f2",
  AI: "~ f3!11 f2 ~ f3 f2", AJ: "~ f3!3 f2 ~ f3 f2 ~ f3!3 f2 ~ f3 f2",
  AK: "d1 d2 d1 d2 eb1 eb2 e1 e2 f1 f2 f1 f2 f1 f2 f1 f2", AL: "f1 f2 d1 d2 d1 d2 d1 d2 eb1 eb2 e1 e2 f1 f2 f1 f2",
  AM: "f1 f2 d1 d2 d1 d2 d1 [d1,d2] eb1 eb2 e1 e2 f1 f2 f1 f2", AN: "f1 f2 d1 d2 f1 f2 f1 f2 f1 f2 f1 f2 f1 f2 f1 f2",
  AO: "f1 f2 f1 f2 f1 f2 f1 f2 f1 f2 f1 f2 f1 f2 f1 f2", AP: "f1 f2 f1 f2 f1 f2 f1 f2 f1 f2 f1 f2 f1 f2 g1 ab1",
  AQ: "a1 c2 d2 c2 f2 ~ g2 ab2 a2 c3 d3 f3 bb2@2 ~ g2", AR: "~@4 bb2@2 ~ f2 ~ f3 f2 ~ bb2@2 ~ f2",
  AS: "~ f3 f2 ~ f3 ~ f2 ~ f2 ~ f2 ~ bb2@2 ~ f2", AT: "~ f3 f2 ~ bb2@2 ~ f2 ~ f3 f2 ~ bb2@2 ~ f2",
  AU: "~ f3 f2 ~ eb2@4 ~@2 d2@5 ~", AV: "~@4 c2@4 ~@2 bb1@5 ~",
  AW: "[~@4 f2 ~ f2 ~ f2 ~ f2 ~ bb2@2 ~ f2@3 ~@2 f2 ~ f2 ~ f2 ~ f2 ~ bb2@2 ~ f2@3 ~@2 eb2@4 ~@2 d2@5 ~]/3",
  AX: "~@4 g2 ~ a2 ~ bb2@2 ~ c3@2 a2@2 ~", AY: "eb3@2 ~ c3@2 ~ ab2@2 ~@2 g3@3 ~ eb3@2", AZ: "~@2 bb3@3 ~@3 g3@4 ~@4",
  BA: "~@11 [f2,f3]!5", BB: "[f2,f3]!16", BC: "[f2,f3] ~ [f2,f3]!10 [f2,f3]@3 ~",
})).s("gm_piano").gain(0.4)

// chords · synth brass 1
const synth_brass_1 = note(`<
  ~@4 A B A B A B A B ~@12 A B A B A B A B ~@28 A B A B A B A B ~@8 A B A B ~@8 C@12 ~@4 A B A B A B A B ~@8 A B A D E F
  G H ~@13 F G H G H ~@16 F G H G H G H G I@3 J K@3 J K@3 J L@2 M N O@3
>`.pickRestart({
  A: "[bb4,d5]@2 ~ [a4,c5] ~@4 [bb4,d5]@2 ~ [a4,c5] ~@2 [a4,c5] ~", // Bb Am Bb Am
  B: "~@2 [a4,c5] ~@3 [a4,c5] ~ [bb4,d5]@2 ~ [a4,c5] ~@4", C: "f4 ~ f4!2 ~ f4 ~ f4!2 ~ f4!2 ~ f4 ~ f4",
  D: "~@2 [a4,c5] ~@3 [a4,c5] ~ [bb4,d5]@2 ~ [a4,c5] ~@2 [a4,c5] ~", // Am Bb Am
  E: "[bb4,d5]@2 ~ [a4,c5] ~@4 [bb4,d5]@2 ~ [a4,c5] ~@4", F: "~@4 [bb4,d5]@2 ~ [a4,c5] ~@4 [bb4,d5]@2 ~ [a4,c5]",
  G: "~@2 [a4,c5] ~@3 [a4,c5] ~@3 [a4,c5] ~ [bb4,d5]@2 ~ [a4,c5]", // Am Bb Am
  H: "~@2 [a4,c5] ~ [bb4,d5]@2 ~ [a4,c5] ~@4 [bb4,d5]@2 ~ [a4,c5]", // Am Bb Am Bb Am
  I: "[~@2 [a4,c5] ~ [eb4,g4]@4 ~@2 [d4,f4]@8 ~@2 [ab4,c5]@4 ~@2 [f4,bb4]@8 ~@2 [eb4,ab4]@3 ~ [c4,f4]@8]/3", // Am Eb Dm Ab Bb5 Ab5 F5
  J: "~@6 [c4,f4]!2 ~@2 [c4,f4]!2 ~@2 [c4,f4]!2", // F5
  K: "[~@2 [c4,f4]!2 [eb4,g4]@4 ~@2 [d4,f4]@8 ~@2 [ab4,c5]@4 ~@2 [f4,bb4]@8 ~@2 [eb4,ab4]@3 ~ [c4,f4]@8]/3", // F5 Eb Dm Ab Bb5 Ab5 F5
  L: "[~@2 [c4,f4]!2 [eb4,g4]@4 ~@2 [d4,f4]@8 ~@2 [g3,bb3] ~ [a3,c4] ~ [bb3,d4]@2 ~ [d4,eb4]@2 [a3,c4]@2 ~]/2", // F5 Eb Dm Gm Am Bb Ebmaj7 Am
  M: "[eb4,g4]@2 ~ [c4,eb4]@2 ~ [ab3,c4]@2 ~@2 [g4,bb4]@3 ~ [eb4,g4]@2", N: "~@2 [bb4,d5]@3 ~@3 [g4,bb4]@4 ~@4",
  O: "[~@11 [c5,f5]@33 [c5,f5]@3 ~]/3", // F5
})).s("gm_synth_brass_1").gain(0.29)

// chords · drawbar organ
const drawbar_organ = note(`<
  ~@4 A@4 B C A@2 D@8 E@4 A@4 B C A@2 ~@4 F@2 G@2 D@16 E@4 A@4 B C A@2 ~@8 A@2 B C ~@20 E@4 A@4 B C A@2 ~@8 A@2 H C I
  J@4 ~@12 K@5 ~@16 L@8 M@8 N@6 O P Q@3
>`.pickRestart({
  A: "[[eb4,g4,bb4,d5]@3 [d4,f4,a4,c5]@5 [eb4,g4,bb4,d5]@3 [d4,f4,a4,c5]@13 [eb4,g4,bb4,d5]@3 [d4,f4,a4,c5]@5]/2", // Ebmaj7 Dm7 Ebmaj7 Dm7 Ebmaj7 Dm7
  B: "[eb4,f4,bb4]", C: "[c4,eb4,a4]", D: "[[bb3,f4]@3 [c4,f4]@3 [d4,f4]@2 [c4,f4]@24]/2", E: "[f4,bb4]",
  F: "[[c4,f4]@3 [bb3,d4]@3 [bb3,eb4]@3 [bb3,d4]@3 [bb3,eb4]@4]/2", G: "[[c4,f4]@3 [bb3,d4]@3 [bb3,eb4]@3 [c4,f4]@7]/2",
  H: "[eb4,f4,c5]", I: "[eb4,f4,c5]@3 ~",
  J: "[~@4 [eb4,g4,bb4,d5]@3 [d4,f4,a4,c5]@5 [eb4,g4,bb4,d5]@3 [d4,f4,a4,c5]@13 [eb4,g4,bb4,d5]@3 [d4,f4,a4,c5]@5 [eb4,g4,bb4,d5]@3 [d4,f4,a4,c5]@5 [eb4,g4,bb4,d5]@3 [d4,f4,a4,c5]@5 ~@12]/4", // Ebmaj7 Dm7 Ebmaj7 Dm7 Ebmaj7 Dm7 Ebmaj7 Dm7 …
  K: "[~@4 [eb4,g4,bb4,d5]@3 [d4,f4,a4,c5]@5 [eb4,g4,bb4,d5]@3 [d4,f4,a4,c5]@13 [eb4,g4,bb4,d5]@3 [d4,f4,a4,c5]@5 [eb4,g4,bb4,d5]@3 [d4,f4,a4,c5]@5 [eb4,g4,bb4,d5]@3 [d4,f4,a4,c5]@13 [eb4,g4,bb4,d5]@3 [d4,f4,a4,c5]@5 [eb4,g4,bb4,d5]@3 [d4,f4,a4,c5]@5 [eb4,g4,bb4,d5]@3 ~]/5", // Ebmaj7 Dm7 Ebmaj7 Dm7 Ebmaj7 Dm7 Ebmaj7 Dm7 …
  L: "[~@4 [bb3,d4,g4]@3 [a3,c4,f4]@5 [bb3,d4,g4]@3 [a3,c4,f4]@12 [bb3,d4,g4]@3 [a3,c4,f4]@5 ~ [bb3,d4,g4]@3 [a3,c4,f4]@5 [bb3,d4,g4]@3 [a3,c4,f4]@12 [bb3,d4,g4]@3 [a3,c4,f4]@5 ~ [bb3,d4,g4]@3 [a3,c4,f4]@5 [bb3,d4,g4]@3 [a3,c4,f4]@12 [bb3,d4,g4]@3 [a3,c4,f4]@5 ~ [bb3,d4,g4]@3 [a3,c4,f4]@5 [bb3,d4,g4]@3 [a3,c4,f4]@12 [bb3,d4,g4]@3 [a3,c4,f4]@2]/8", // Gm F Gm F Gm F Gm F …
  M: "[~@2 [bb3,c4]@3 [bb3,c4]@5 [eb4,ab4]@3 [c4,f4]@5 [c4,f4]@16 [bb3,c4]@3 [bb3,c4]@5 [eb4,ab4]@3 [c4,f4]@5 [c4,f4]@14]/8", // Bbsus2 Ab5 F5 Bbsus2 Ab5 F5
  N: "[~@4 [bb3,c4]@6 [bb3,c4]@10 [eb4,ab4]@6 [c4,f4]@10 [c4,f4]@32 [bb3,c4]@6 [bb3,c4]@10 [g3,bb3] ~ [a3,c4] ~ [bb3,d4]@2 ~ [d4,eb4]@2 [a3,c4]@2 ~]/6", // Bbsus2 Ab5 F5 Bbsus2 Gm Am Bb Ebmaj7 …
  O: "[eb4,g4]@2 ~ [c4,eb4]@2 ~ [ab3,c4]@2 ~@2 [g4,bb4]@3 ~ [eb4,g4]@2", P: "~@2 [bb4,d5]@3 ~@3 [g4,bb4]@4 ~@4",
  Q: "[~@11 [f4,c5,f5]@33 [f4,c5,f5]@3 ~]/3", // F5
})).s("gm_drawbar_organ").gain(0.1)

// bass · electric bass finger
const bass = note(`<
  ~@4 A B A B C D A E F G H I F G H I J K J L A B A B C D A B M N@2 O P Q P R F G H I F G H S F G H I F G H I J K J L A
  B A B C D A B T U V W T U X Y A B C D ~@4 P Z P Z AA@6 AB@6 J K J L A B A B C D A B T U V W T U X Y A B C D AC AD AE@2
  ~@13 AF AG AH AG AH ~@16 AI AJ AK AJ AK AJ AK AJ AL AM AN@3 AM AN@3 AM AN@3 AO AP AQ AR AS AT
>`.pickRestart({
  A: "f2 ~ f3 f2 ~ f3!3 f2 ~ f3 f2 ~ f3!3", B: "f3!8 f2 ~ f3 f2 ~ f3!3",
  C: "eb2 ~ eb3 eb2 ~ eb3!3 eb2 ~ eb3 eb2 ~ eb3!3", D: "c3!8 c2 ~ c3 c2 ~ c3!3", E: "f3!8 f2 ~ f3 f2@2 ~ eb2 ~",
  F: "eb2@2 ~ f2@2 ~ bb2 ~ f2@4 ~@2 f2 ~", G: "f2@4 ~@2 f2 ~ f2@4 ~@2 eb2 ~", H: "eb2@2 ~ f2@2 ~ bb2 ~ bb1@4 ~@2 bb2 ~",
  I: "bb1@4 ~@2 bb2 ~ bb1@4 ~@2 eb2 ~", J: "eb2@4 ~@2 eb2@3 ~ eb3 ~ eb2@3 ~", K: "c2@4 ~@2 c2@3 ~ c3 ~ c2@3 ~",
  L: "c2@4 ~@2 c2@3 ~ c3 ~@5", M: "f3!8 ~ f3 ~ f3 f3@2 ~ f3", N: "~ f3 ~ f3 f3@2 ~ f3 ~ f3 ~ f3 f3@2 ~ f3",
  O: "~ f3 ~ f3 f3@2 ~ f3 ~ f3 ~ f3 f3@3 ~", P: "f3@2 ~ d3@2 ~ eb3@2", Q: "~@2 d3@4 ~@2 eb3@5 ~@3",
  R: "~@2 f3@4 ~@2 f3@4 ~@2 f3 ~", S: "bb1@4 ~@2 bb2 bb1@4 ~@3 eb2 ~", T: "~@2 g2 ~ a2 ~ bb2 ~ c3@2 ~ bb2@2 ~ a2 ~",
  U: "g2@2 ~ bb2@2 ~ ab2@7 ~@3", V: "~@2 g2 ~ a2 ~ bb2 ~ c3@2 ~ d3@2 ~ bb2 ~", W: "g2@2 ~ bb2@2 ~ f2@7 ~@3",
  X: "~@2 g2 ~ a2 ~ bb2 ~ c3@2 ~ ab2@2 ~ eb3@2", Y: "~ c3@2 ~ a2@2 ~ g3@2 ~ eb3@2 ~ bb3 ~ g3",
  Z: "~@2 d3@4 ~@2 f3@5 ~@3", AA: "c3@5 ~@3 bb2@5 ~@3", AB: "c3@5 ~@3 c3@5 ~@3", AC: "f3!12 ~@4",
  AD: "~@4 f2 ~ f3 f2 ~ c3 f3 c3 f2 ~ f3 f2", AE: "~ c3 f3 c3 f2 ~ f3 f2 ~ c3 f3 c3 f2 ~ f3 f2",
  AF: "~@4 f2 ~ f3 f2 ~ f3!3 f2 ~ f3 f2", AG: "~ f3!11 f2 ~ f3 f2", AH: "~ f3!3 f2 ~ f3 f2 ~ f3!3 f2 ~ f3 f2",
  AI: "~@4 bb2@2 ~ f2 ~ f3 f2 ~ bb2@2 ~ f2", AJ: "~ f3 f2 ~ f3 ~ f2 ~ f2 ~ f2 ~ bb2@2 ~ f2",
  AK: "~ f3 f2 ~ bb2@2 ~ f2 ~ f3 f2 ~ bb2@2 ~ f2", AL: "~ f3 f2 ~ eb2@4 ~@2 d2@5 ~", AM: "~@4 c2@4 ~@2 bb1@5 ~",
  AN: "[~@4 f2 ~ f2 ~ f2 ~ f2 ~ bb2@2 ~ f2@3 ~@2 f2 ~ f2 ~ f2 ~ f2 ~ bb2@2 ~ f2@3 ~@2 eb2@4 ~@2 d2@5 ~]/3",
  AO: "~@4 g2 ~ a2 ~ bb2@2 ~ c3@2 a2@2 ~", AP: "eb3@2 ~ c3@2 ~ ab2@2 ~@2 g3@3 ~ eb3@2", AQ: "~@2 bb3@3 ~@3 g3@4 ~@4",
  AR: "~@11 f2!5", AS: "f2!16", AT: "f2 ~ f2!10 f2@3 ~",
})).s("gm_electric_bass_finger").gain(0.4)

// drums · kick
const kick = s("bd").struct(`<
  ~@4 A B A B A B A B C B C B C B C B A@5 B A B A B A B D@8 C B C B C B C B C B C B C B C B A@5 B A B A B A B C@8 A B A
  B D@20 A@5 B A B A B A B C@8 A B A B E F G H I J@11 K F G H G H J@7 L@8 M H G H G H G H G ~@2 H@2 ~@2 H@2 ~@2 H@2 ~ N
  O P ~@3
>`.pickRestart({
  A: "x ~@2 x!2 ~@3", B: "~ x ~ x!2 ~@3", C: "x ~@4 x ~ x", D: "x ~@3 x!2 ~@2", E: "x ~@5 x ~ x ~@2 x ~@4",
  F: "x ~ x ~@2 x!2 ~", G: "~@3 x ~ x!2 ~", H: "~@2 x ~@2 x!2 ~", I: "~ x", J: "x!2", K: "x ~@7 x ~@3 x ~@2 x",
  L: "x!4", M: "x ~@3 x ~@3 x ~@3 x ~@2 x", N: "~ x ~@2", O: "~@3 x ~@12", P: "~@13 x ~@2",
})).gain(0.48)

// drums · rim
const rim = s("rim").struct("<~@68 A B@6 C ~@36 A B@6 C ~@69>".pickRestart({
// … 57 more lines

More by Bruce Hornsby