Strudelify
Cat People cover art

1983 · Let's Dance

Cat People

David Bowie

KeyE♭ majorTempo121 bpm
0:00/0:00
// Cat People — BOWIE DAVID
// 121 bpm, 4/4, key Eb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: ch 2 "mid bass" named as a bass, played on electric bass finger (its piano patch is not one); ch 1 "mid guitar" named as a guitar, played on electric guitar clean (its piano patch is not one)
// note: Full arrangement: all 111 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(121/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.

// bass · electric bass finger · "mid bass"
const bass = note(`<
  A@3 B@2 C@3 D@4 E F G@2 H I@2 J K@2 L M@2 N O@2 P@2 Q R@3 S@2 T U@2 V@3 W X Y Z AA AB AC V AC V AD Z AE AB AF AG AH AI
  AG AJ AK AL AM AN AO AP AQ AR Z AA AS Y Z AH AI AT AU AE AV Y AU AW AI Y AX AY AJ AK AZ BA V AD V AD AX AY BB BC BD V
  BD BE BF Z BG@2 BH V Y
>`.pickRestart({
  A: "[~@4 c3@6 ~@2 c3@2 g3@7 g3@2 ~ c3@6 ~ c3@2 g3@7 ~ c3 ~ f3@5]/3",
  B: "[~@2 f3@2 ~ c3@7 c3@2 f3@6 ~@2 f3@2 c3@7 f3]/2",
  C: "[~@2 c3@6 ~ c3@2 g3@10 c3@6 ~ c3@2 ~ g3@5 c3 ~ c3 ~ f3@6 ~@2]/3",
  D: "[f3@2 c4@6 ~ c4 ~@2 f3@6 ~ f3@2 c3@7 ~ f3!2 c3@6 ~ c3@2 ~ g3@10 c3@6 ~ c3@2 g3@4]/4",
  E: "~ c3 ~ c3 ~@2 c3@6 ~ c3@2 ~", F: "c3 ~ c3@3 ~@2 c3 ~ c3@6 ~", G: "[~ c3 ~ c3@7 c3 ~@2 f3@7 f3 ~ f3@6 ~@2 f3 ~]/2",
  H: "f3@6 ~ f3 ~@2 f3@6", I: "[~ f3 ~ c3@7 ~ c3 ~ c3@6 ~ c3 ~@2 c3@6 ~ c3 ~]/2", J: "c3@6 ~@2 c3 ~ bb2@6",
  K: "[~ bb2@2 ~ bb2 ~ bb2@3 ~@2 bb2 ~ bb2@6 ~@2 bb2 ~ bb2@7 bb2 ~]/2", L: "~ c3@7 c3 ~ c3@6",
  M: "[~@2 c3 ~ c3@6 ~ c3 ~@2 c3@7 c3 ~ f3@7 ~ f3]/2", N: "~ f3@7 f3@2 ~ f3@5",
  O: "[~@2 f3 ~@2 bb2@4 bb2@3 ~@2 c3@6 ~ c3 ~@2 c3@6 ~ c3]/2", P: "[~@2 c3@6 ~ c3 ~ c3@7 ~ c3 ~ c3@6 ~ c3 ~@2 c3]/2",
  Q: "~ c3@3 ~@2 c3 ~ c3@6 ~@2", R: "[c3 ~ c3@7 c3 ~@2 c3@7 c3 ~ c3@6 ~@2 c3 ~ c3@6 ~ c3 ~@2 c3@7]/3",
  S: "[c3 ~ c3@7 ~ c3 ~ c3@7 c3@2 ~ c3@6 ~ c3 ~ c3]/2", T: "~@2 c3@4 ~ c3@2 c3 ~@2 c3@2 c3 ~",
  U: "[c3@2 ~ c3 ~ c3@2 ~ c3 ~ c3@2 c3 ~@2 c3@2 c3 ~@2 c3@2 c3 ~@2 c3@2 c3 ~ c3@2 ~]/2",
  V: "c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3@2", W: "f3 ~ f3 ~ f3 ~ f3 ~ f3 ~ f3 ~ f3@2 a2 ~",
  X: "bb2 ~ bb2 ~ bb2 ~ bb2 ~ bb2 ~ bb2 ~ bb2 ~ bb2@2", Y: "c3 ~ c3 ~ c3 ~ c3 c2 c3 ~ c3 ~ c3@2 b2 ~",
  Z: "c3 ~ c3 ~ c3 ~ c3@2 c3 ~ c3 ~ c3 ~ c3 c2", AA: "f3 ~ f3 ~ f3 ~ f3 ~ f3 ~ f3 f2 f3 f2 f3!2",
  AB: "bb2 ~ bb2 ~ bb2 ~ bb2@2 bb2 ~ bb2 ~ bb2 ~ bb2 bb1", AC: "c3 ~ c3@2 c3 ~ c3 c2 c3 ~ c3 ~ bb2 ~ bb2 ~",
  AD: "c3 ~ c3 ~ c3 ~ c3@2 c3 ~ c3@2 c3 ~ c3 ~", AE: "f3 ~ f3 ~ f3 ~ f3@2 f3 ~ f3 ~ f3 ~ f3 f2",
  AF: "c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3@2 b2 ~", AG: "c3 ~ c3 ~ c3 ~ c3@2 c3 ~ c3 ~ c3 ~ c3 ~",
  AH: "f3 ~ f3 ~ f3 ~ f3 f2 f3 ~ f3 ~ f3@2 a2 ~", AI: "bb2 ~ bb2 ~ bb2 ~ bb2 bb1 bb2 ~ bb2 ~ bb2@2 b2 ~",
  AJ: "c3 ~ c3@2 c3 ~ c3@2 c3 ~ c3@2 c3 ~ c3@2", AK: "c3 ~ c3@2 c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~",
  AL: "c3 ~ c3@2 c3@2 c3 c2 c3 ~ c3 ~ c3 ~ c3@2", AM: "c3 ~ c3 ~ c3 ~ c3 c2 c3 ~ c3 c2 c3 ~ c3 ~",
  AN: "eb3 ~ eb3@2 eb3@2 eb3 eb2 eb3 ~ eb3 ~ eb3 ~ eb3@2", AO: "eb3 ~ eb3 ~ eb3 ~ eb3 eb2 eb3 ~ eb3 eb2 eb3 ~ eb3 ~",
  AP: "eb3 ~ eb3 ~ eb3 ~ eb3 eb2 eb3 ~ eb3 ~ eb3 ~ eb3 ~", AQ: "eb3 ~ eb3 ~ eb3 ~ eb3 ~ eb3 ~ eb3 ~ eb3 ~ eb3 ~",
  AR: "eb3 ~ eb3 ~ eb3 ~ eb3 ~ eb3 ~ eb3 ~ eb3 ~ eb3@2", AS: "bb2 ~ bb2 ~ bb2 ~ bb2 ~ bb2 ~ bb2 bb1 bb2 bb1 bb2!2",
  AT: "c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 c2 c3 c2 c3!2", AU: "c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3@2 e3 ~",
  AV: "bb2 ~ bb2 ~ bb2 ~ bb2 ~ bb2 ~ bb2 ~ bb2@2 b2 ~", AW: "f3 ~ f3 ~ f3 ~ f3 ~ f3 ~ f3 ~ f3 ~ f3@2",
  AX: "c3 ~ c3@2 c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 c2", AY: "c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ b2 ~",
  AZ: "c3 ~ c3 ~ c3 ~ c3 c2 c3 ~ c3 ~ c3 ~ c3@2", BA: "c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~",
  BB: "c3 ~ c3@2 c3 ~ c3 c2 bb2 bb1 bb2 ~ bb2 ~ bb2 ~", BC: "c3 c2 c3 ~ c3 ~ c3 ~ bb2 ~ bb2@2 bb2 ~ bb2 bb1",
  BD: "c3 c2 c3 ~ c3 ~ c3 ~ bb2 bb1 bb2 ~ bb2 ~ bb2 ~", BE: "c3 c2 c3 ~ c3 ~ c3 ~ bb2 ~ bb2@2 bb2 ~ g3 ~",
  BF: "c3 c2 c3 ~ c3 ~ c3 ~ bb2 ~ bb2@2 bb2 ~ b2 ~", BG: "c3 ~ c3@2 c3 ~ a2 ~ bb2 bb1 bb2 ~ bb2 ~ bb2 ~",
  BH: "c3 ~ c3@2 c3 ~ c3 c2 bb2 ~ bb2@2 bb2 ~ bb2 bb1",
})).s("gm_electric_bass_finger").gain(0.41)

// chords · piano · "mid piano"
const piano = note(`<
  A B@3 C D E@5 F G H I@2 J K@2 L@2 M N@5 O P@3 Q@3 R S@4 T U V W X V Y Z AA AB Y ~ AC@2 U AD X AE AF AG AH V AI@4 AJ@2
  AK@2 AL AM AN AO AM AP AQ AO AE@2 AD AH V@2 AR AA AS AT@2 AU@2 AV AW AX@2 AT@2 AY@2 AZ BA BB AE BC BD BE AM BF BG BH
  AS U
>`.pickRestart({
  A: "~ [g3,c4,eb4]@3", // Cm
  B: "[c3@3 [g3,c4,eb4]@4 ~ [g3,c4,eb4]@2 [g3,c4,eb4]@2 ~@3 [g3,c4,eb4]@10 ~@2 [a3,c4,f4]@12 f3@3 [a3,c4,f4]@4 [a3,c4,f4]@2]/3", // Cm F
  C: "~ [a3,c4,f4]@2 ~@3 [a3,c4,f4]@10", D: "~@2 [g3,c4,eb4]@13 ~",
  E: "[[g3,c4,eb4]@4 ~@4 [g3,c4,eb4]@2 ~@5 [g3,c4,eb4]@8 ~ [a3,c4,f4]@31 ~@3 a4@3 c5@2 [g3,c4,eb4]@10 ~@2 [g3,c4,eb4]@5, ~@56 f4@7 ~@17]/5", // Cm F Cm
  F: "~@3 [g3,c4,eb4]@13", G: "~ [g3,c4,eb4]@2 ~@5 [g3,c4,eb4]@6 ~@2",
  H: "[g3,c4,eb4]@8 ~ [g3,c4,eb4]@2 ~ [g3,c4,eb4]@2 ~@2", // Cm
  I: "[~ [g3,c4,eb4]@9 ~@3 [a3,c4,f4]@12 f3@2 [a3,c4,f4]@4 ~]/2", J: "[a3,c4,f4]@2 [a3,c4,f4]@2 ~@3 [a3,c4,f4]@9",
  K: "[~@23 [g3,c4,eb4] ~ [g3,c4,eb4] ~@4 [g3,c4,eb4]@2, ~@3 [g3,c4,eb4]@19 ~@10, ~@20 c2@11 ~]/2", // Cm
  L: "[~@3 c2@2 [g3,c4,eb4]@2 ~@5 [bb3,d4,f4]@6 ~@2 [bb3,d4,f4]@8 ~ [bb3,d4,f4]@2 ~]/2", // Cm Bb
  M: "[bb3,d4,f4]@2 ~@3 [bb3,d4,f4]@9 ~@2", // Bb
  N: "[~ c4@9 ~@5 g4@3 c5@2 [g3,c4,eb4] ~@2 [g3,c4,eb4]@2 ~@2 [g3,c4,eb4]@10 ~@5 [a3,c4,f4]@2 ~@3 f3@2 [a3,c4,f4]@3 ~@2 [a3,c4,f4]@2 ~@3 [a3,c4,f4]@9 ~ [bb3,d4,f4]@9 ~@2, ~ g3@17 ~@62, ~ eb4@12 eb4@5 ~@62, ~@10 c4@7 ~@63]/5", // Cm F Bb
  O: "~ [g3,c4,eb4]@6 ~ [g3,c4,eb4]@8", // Cm
  P: "[~@2 [g3,c4,eb4]@2 [g3,c4,eb4]@2 ~@3 [g3,c4,eb4]@9 ~@3 [g3,c4,eb4]@13 ~ [g3,c4,eb4]@4 ~@4 [g3,c4,eb4]@2 ~@3]/3", // Cm
  Q: "[~@2 [g3,c4,eb4]@8 ~@2 [g3,c4,eb4]@12 c3@2 [g3,c4,eb4]@3 ~@2 c4@12 c4@3 eb4@2, ~@31 [g3,eb4]@14 ~@3]/3", // Cm
  R: "~@2 [g3,c4,eb4]@8 c3@2 [g3,c4,eb4]@3 ~", // Cm
  S: "[~ [g3,c4,eb4]@2 ~@3 c4@9 c4@3 eb4@2 g4@2 ~ c5 ~ [g4,c5,eb5,g5]@12 c3@3 [g4,c5,eb5,g5]@2 ~@2 [a4,c5,f5,a5]@18 ~@2, ~@3 [g3,eb4]@6 ~@23]/4", // Cm F Cm
  T: "[f4,bb4,d5,f5]@5 c3 [f4,bb4,d5,f5] ~", U: "~@3 g5@4 ~, ~ g4@6 ~, ~@2 c5@5 ~",
  V: "[g4,c5,eb5,g5]@5 c3 [g4,c5,eb5,g5] ~", W: "[a4,c5,f5,a5]@5 f2 [a4,c5,f5,a5] ~",
  X: "[f4,bb4,d5,f5]@5 bb2 [f4,bb4,d5,f5] ~", Y: "[g4,c5,eb5,g5]@15 ~",
  Z: "[c5,f5]@10 ~@4 f5 c5, a4, a5@9 ~ a5@2 c5@2 ~@2, ~@11 f5@2 a5@2 ~", // F5
  AA: "[bb4,d5]@10 ~@4 d5 bb4, f4, f5@9 ~ f5@2 bb4@2 ~@2, ~@11 d5@2 f5@2 ~", AB: "[g4,eb5,g5]@7 ~@9",
  AC: "[[c5,g5]@25 ~ c3!2 [g4,c5,eb5,g5]@2 c3 ~]/2", AD: "~@3 a5@4 ~, ~ a4@6 ~, ~@2 c5@5 ~",
  AE: "[c5,eb5]@10 ~@4 eb5 c5, g4, g5@9 ~ g5@2 c5@2 ~@2, ~@11 eb5@2 g5@2 ~", AF: "[eb5,g5,c6] ~@2 [c5,eb5,g5,c6]@4 ~",
  AG: "[a4,c5,f5,a5]@15 ~", AH: "[d5,bb5] ~@2 [bb4,d5,f5,bb5]@4 ~, f5 ~@15",
  AI: "[~@7 c6@6 ~ [eb5,g5,c6] ~, ~@2 g4@23 ~ g4@4 ~@2, ~@2 c5@13 ~, ~@6 [eb5,g5]@21 ~@5]/2", // Cm Eb
  AJ: "[[eb5,g5]@25 ~ eb2!2 [g4,bb4,eb5,g5]@2 eb2@2]/2", // Eb
  AK: "[[bb4,eb5,g5]@13 ~@5 bb3 ~ [bb4,eb5,g5] ~ bb3 ~ [bb4,eb5,f5]@4 [bb4,eb5,g5] ~@3, ~@7 [bb4,eb5,f5]@3 ~@6]/2", // Eb Bbsus4 Eb Bbsus4
  AL: "[bb4,eb5]@10 ~@4 eb5 bb4, g4, g5@9 ~ g5@2 bb4@2 ~@2, ~@11 eb5@2 g5@2 ~", // Eb5
  AM: "[g4,c5,eb5,g5]@9 ~ [g4,c5,eb5,g5] ~ c3 [g4,c5,eb5,g5] ~@2", // Cm
  AN: "[a4,c5,f5,a5]@9 ~ [a4,c5,f5,a5] ~ f2 [a4,c5,f5,a5] ~@2", // F
  AO: "[f4,bb4,d5,f5]@9 ~ [f4,bb4,d5,f5] ~ bb2 [f4,bb4,d5,f5] ~@2", // Bb
  AP: "g4 ~@5 c6@7 ~@3, eb5@13 ~@3, ~ g4@6 ~, ~@4 g5@9 ~@3", AQ: "a4 ~@5 c6@7 ~@3, f5@13 ~@3, ~ a4@6 ~, ~@4 a5@9 ~@3",
  AR: "[f5,a5,c6] ~@2 [c5,f5,a5,c6]@4 ~", AS: "[eb5,c6] ~@2 [c5,eb5,g5,c6]@4 ~, g5 ~@15",
  AT: "[[g4,c5,eb5,g5]@9 ~ [g4,c5,eb5,g5] ~@3 [c5,eb5,g5]@9 ~@4 g5@2 ~ g5 ~, ~@14 g4@8 ~ g4@9, ~@12 g5 c5 ~@2, ~@25 eb5@2 ~@5]/2", // Cm
  AU: "[[g4,c5,eb5,g5]@7 ~ [g4,c5,eb5,g5] ~@3 [g4,eb5,g5] ~ [g4,c5,eb5,g5]@5 ~ [eb5,g5] ~ [g4,c5,eb5,g5]@4 c3 ~ [g4,c5,eb5,g5]@2 ~@2]/2", // Cm Eb Cm
  AV: "[eb5,g5]@13 ~ [c5,eb5,g5] ~", AW: "~@2 c3!2 [c5,eb5,g5]@2 ~@2 [c5,eb5,g5] ~ [c5,eb5,g5]@3 ~@3",
  AX: "[~@2 [g4,c5,eb5] ~@3 c3 ~ [g4,c5,eb5]@2 ~@2 c3 ~@5 c3 ~ [g4,c5,eb5] ~ c3 ~ [c5,d5] ~ c3 ~ [g4,c5,eb5] ~@3, ~@7 [g4,c5,d5]@3 ~@6]/2", // Cm Csus2 Cm Gsus4
  AY: "[[eb5,g5,c6]@23 ~ eb5!2 ~ c3 [c5,eb5,g5]!2 ~@2, ~@12 g5 ~@3]/2", AZ: "[g4,eb5,g5]@7 ~ [f4,d5,f5]@7 ~",
  BA: "[g4,eb5,g5]@7 ~ [f4,bb4,d5,f5]@8", BB: "[c5,ab5,c6]@7 ~@3 [bb4,d5]@2 ~@4",
  BC: "[g4,eb5,g5]@7 ~@3 [bb4,d5]@2 ~@4", BD: "~ [c5,eb5] ~@3 [bb4,d5] ~@2", BE: "[c5,eb5,ab5,c6]@4 ~ [bb4,d5] ~@2",
  BF: "~ [f4,d5]", BG: "[c5,ab5,c6]@7 ~@9", BH: "[c5,eb5,ab5,c6] [f4,bb4,d5,f5]",
})).s("gm_piano").gain(0.26)

// chords · piano · "mid piano" · soft notes
const piano_soft = note(`<
  ~@40 A ~@7 B ~ C D@2 A E ~@2 F ~ G ~@5 H@2 ~ I ~@10 E G ~@2 F ~ F ~ J K L M N ~ O ~ J ~ P ~@2 Q ~ R S Q ~ T U ~ F A
>`.pickRestart({
  A: "~@5 eb5@9 ~@2", B: "~@2 eb5 d5", C: "~ [c5,eb5] ~@2 eb5@2 d5@2", D: "[[g4,eb5]@13 ~@3]/2", E: "~@5 f5@9 ~@2",
  F: "c5 ~@7", G: "bb4 ~@7", H: "[[g4,bb4]@25 ~@7]/2", I: "~@12 f5 ~@3", J: "~@12 eb5 c5@2 ~", K: "~@12 c5 ~@3",
  L: "~@4 [g4,c5] ~@11", M: "c5@13 ~@3", N: "~@6 g3 ~@2 g3 ~@6", O: "~@4 d5 ~@3 g4@2 ~@2 [ab4,d5] ~@3",
  P: "~@7 c3 c5@2 ~@6", Q: "~@7 bb3", R: "~@14 bb3 ~", S: "~@6 c4 ~@7 bb3 ~", T: "~ [c5,eb5] ~@6",
  U: "~@5 [bb4,d5] ~@2", // Bb
})).s("gm_piano").gain(0.15)

// chords · electric guitar clean · "mid guitar"
const electric_guitar_clean = note(`<
  ~@36 A B@2 C D E F G H E I J K D K L M N O P E D O Q R S@2 L M T@2 U@2 V W X Y Z AA AB Y W R F J D H O Q D AC@2 AD@2
  AE@2 AF@2 AG@2 AH@2 AI AJ AK Z AL AM AN AA AO AP AQ D@2
>`.pickRestart({
  A: "~@6 [c3,g3] ~, ~@9 c2@6 ~", // C5
  B: "[~@3 c3@2 g3@3 ~@2 g3@2 ~@3 [c3,c4]@2 ~@5 [c3,c4]@8 ~@2, c2@12 ~@8 c2@11 ~, ~@3 c4@7 ~@22, ~@8 c3@5 ~@19]/2", // C
  C: "~ [c3,f3] ~@2 c3 f3 ~ f3, c2@5 ~ c2@10, ~@4 bb3@3 ~, ~@3 c3", D: "~@2 [c3,g3]@2 ~@4 [c3,g3]@7 ~, ~@6 c2@9 ~",
  E: "~@2 [c3,g3] ~@5 c3@2 g3@2 ~@2 g3@2, c2@5 ~ c2@10, ~@4 c4@3 ~, ~@3 c3", // C5
  F: "~@2 [f3,c4]@2 ~@4 [f3,c4]@7 ~, ~@6 f2@9 ~", // F5
  G: "~@2 [bb2,f3] ~@5 bb2@2 f3@2 ~@2 f3 ~, bb1@5 ~ bb1@10, ~@4 bb3@3 ~, ~@3 bb2", // Bb5
  H: "~@2 [c3,g3] ~@3 c2@2 [c3,g3]@6 ~@2", I: "~@2 [f3,c4] ~@3 f2@2 [f3,c4]@6 ~@2",
  J: "~@2 [bb2,f3] ~@3 bb1@2 [bb2,f3]@6 ~@2", K: "[c3,g3]@6 c2@2 [c3,g3,c4]@3 ~ [bb2,f3,bb3]@3 ~",
  L: "~@4 [c3,g3]@2 ~@4 [c3,g3]@3 ~ [c3,g3]@2", M: "~@2 [c3,g3]@3 ~ c2@2 [c3,g3]@2 c2@2 g3 ~ g3 ~, ~@3 c3",
  N: "~@2 [c3,g3] ~@5 c3@2 g3@2 ~@2 g3 ~, c2@5 ~ c2@10, ~@4 c4@3 ~, ~@3 c3", // C5
  O: "~@2 [f3,c4] ~@3 f2@2 ~@2 f2@2 ~@2 c4 ~, ~@2 [f3,c4] f3", P: "~@2 [bb2,f3]@2 ~@4 [bb2,f3]@7 ~, ~@6 bb1@9 ~",
  Q: "~@2 [bb2,f3] ~@3 bb1@2 ~@2 bb1@2 ~@2 f3 ~, ~@2 [bb2,f3] bb2", // Bb5
  R: "~@2 [c3,g3] ~@3 c2@2 ~@2 c2@2 ~@2 g3 ~, ~@2 [c3,g3] c3", // C5
  S: "[~@2 [c3,g3,c4] ~@5 [c3,g3,c4]@4 g2@2 [c3,g3,c4]@4 ~@2 c3@2 ~@2 g3@2 ~@2 c3@2 g3 ~]/2", // C5
  T: "[~@2 [eb3,bb3,eb4] ~@5 [eb3,bb3,eb4]@4 bb2@2 [eb3,bb3,eb4]@4 ~@2 eb3@2 ~@2 bb3@2 ~@2 eb3@2 bb3 ~]/2", // Eb5
  U: "[[eb3,bb3,eb4]@2 ~@4 [eb3,bb3,eb4]@2 ~@2 [eb3,bb3,eb4]@2 eb2 ~ [eb3,bb3,eb4]@4 eb2@2 eb3@2 eb2@2 [eb3,bb3,eb4]@2 eb2@2 eb3@2 bb3 ~]/2", // Eb5
  V: "~@2 [eb3,bb3] ~@3 eb2@2 ~@2 eb2@2 ~@2 bb3 ~, ~@2 [eb3,bb3] eb3", // Eb5
  W: "~@2 [c3,g3,c4] ~ [c3,g3,c4]@2 ~@2 [c3,g3,c4] ~ [c3,g3,c4] ~ [c3,g3,c4] ~ [c3,g3,c4] ~, ~@3 c2@5", // C5
  X: "~@2 c4 ~@2 f2 ~ c4, f2@9 ~@3 f3@4, ~@2 f3@4 [c4,f4]@7 ~@3", // F5
  Y: "~@2 [bb2,f3,bb3] ~ [bb2,f3,bb3]@2 ~@2 [bb2,f3,bb3] ~ [bb2,f3,bb3] ~ [bb2,f3,bb3] ~ [bb2,f3,bb3] ~, ~@3 bb1@5", // Bb5
  Z: "~@2 [c3,g3] ~ [c3,g3]@2 c2@2 ~@4 c3@2 g3 ~, c2@5 ~@3 [c3,g3]@4 ~@4, ~@5 c2@2 ~", // C5
  AA: "~@2 [c3,g3,c4] ~@3 c2@2 [c3,g3,c4]@2 c2@4 [c3,g3,c4]@2", // C5
  AB: "~@2 [f3,c4,f4] ~ [f3,c4,f4]@2 ~@2 [f3,c4,f4] ~ [f3,c4,f4] ~ [f3,c4,f4] ~ [f3,c4,f4] ~, ~@3 f2@5", // F5
  AC: "[~@2 c2@2 ~@2 c2@2 ~@6 g3@3 ~ [c3,g3,c4] ~@9 [c3,c4]@3 ~, ~@4 c3@6 c2@10 ~@2 c2@4 c2@5 ~, ~@8 g3@4 c3@5 ~@7 [c3,g3]@4 ~@4]/2", // C5 C C5
  AD: "[~@2 [c3,g3]@2 ~@4 [c3,g3]@4 ~@2 [c3,g3]@3 c4 g3 ~@2 g3 ~@5 g3 c3 c4 ~ c3, ~@6 c2@5 ~ c2@20, ~@8 d3 ~@10 c3@2 ~ c3@2 g3@2 c4@2 ~@2 g3@2, ~@20 c4@2 ~ c4@2 c3@2 ~@5]/2", // C5
  AE: "[[c3,g3] ~@13 g3@4 c3@2 g3@2 c3@2 ~@2 c3@2 g3@2 c3@2, ~@4 c2@5 ~ c2@22, ~@3 c3@4 ~@9, ~@3 g3@3 ~@6 c4@2 ~@2]/2", // C5
  AF: "[~@2 [c3,g3] ~ [c3,g3]@2 c2@2 [c3,g3] ~ [c3,g3]@2 ~@2 [c3,g3]@3 ~ [c3,g3]@2 ~@2 [c3,g3]@3 c4 g3 c3 c4 g3 c3 g3, ~@3 c2@2 c2@3]/2", // C5
  AG: "[~@2 [c3,g3] ~ [c3,g3]@2 c2@2 [c3,g3] ~ [c3,g3]@2 ~@2 [c3,g3]@3 ~ [c3,g3]@2 ~@2 [c3,g3]@3 c4 g3 ~ c4 g3 ~ g3, ~@3 c2@2 c2@3, ~@27 c3@2 ~ c3@2]/2", // C5
  AH: "[~@2 [c3,g3] ~@5 g3@6 ~@6 g3@2 ~@8 g3@2, c2@5 ~ c2@7 ~ c2@11 ~ c2@6, ~@8 c3@8 c4@5 ~ c4@8 ~@2, ~@18 c3@9 ~ c3@4]/2", // C5
  AI: "[c3,g3,c4]@6 c2@2 [bb2,f3,bb3] ~ bb1@2 [bb2,f3,bb3]@2 [bb2,f3,bb3] ~", // C5 Bb5
  AJ: "c4 g3 c3 ~ g3 c3 c4 g3 [bb2,f3,bb3] ~ bb1@2 [bb2,f3,bb3]@2 [bb2,f3,bb3] ~, ~@3 c4@2 ~@11", // Bb5
  AK: "[c2,eb3,ab3] ~ c2@2 [eb3,ab3]@2 [c2,eb3,ab3] ~ bb3 f3 bb2 ~ f3 bb2 bb3 f3, ~@11 bb3@2 ~@3", // Ab Ab5 Ab
  AL: "[c3,g3,b3,c4] c2 [c3,g3,c4] ~ [bb2,f3,a3,bb3] bb1 [bb2,f3,bb3] ~", // Cmaj7 C5 Bbmaj7 Bb5
  AM: "[c3,g3,c4] ~ c2@2 [c3,g3,c4]@2 [c3,g3,c4] ~ bb3 f3 bb2 ~ f3 bb2 bb3 f3, ~@11 bb3@2 ~@3", // C5
  AN: "[c2,eb3,ab3]@3 ~ [bb2,f3,a3,bb3] bb1 [bb2,f3,bb3] ~", // Ab Bbmaj7 Bb5
  AO: "[c3,c4] ~@3 g3@2 [g3,c4]@2 ~@2 [bb2,f3,bb3]@2 ~@2 [bb2,f3,bb3]@2, g3 c3@3 ~@4", // C C5 Bb5
  AP: "[c2,eb3]@3 ~ [bb2,f3]@3 bb1", AQ: "~ [c2,eb3,ab3] ~ [c2,eb3,ab3] [bb2,f3] ~ [bb2,f3] ~",
})).s("gm_electric_guitar_clean").gain(0.41)

// chords · electric guitar clean · "mid guitar" · soft notes
const electric_guitar_clean_2 = note(`<
  ~@37 A@2 ~ B ~ C ~ D ~ E F ~ B ~ G ~@2 H I ~ B H J K L M G ~ N O P Q R B S I T U C I B K C F B D H J B V W X ~ Y Z AA
  ~ AA ~@2 AB ~@3 T ~@3 U ~@2 AC B@2
>`.pickRestart({
  A: "[~@6 c2@3 ~@7]/2", B: "c2@5 ~@11", C: "f2@5 ~@11", D: "~@2 gb3 ~@13", E: "~@2 b3 ~@13", F: "~@2 e3 ~@13",
  G: "~@4 c2 ~@3", H: "f2 ~@11 c4 ~@3", I: "bb1@5 ~@11", J: "bb1 ~@11 f3 ~@3", K: "c2 ~@11 g3 ~@3", L: "~@6 g2 ~@9",
  M: "~@2 g2 ~@3 g2@2 c3@2 g2@2 ~@4", N: "~@6 bb2 ~@9", O: "~@2 bb2 ~@3 bb2@2 eb3@2 bb2@2 ~@4", P: "eb2@2 ~@2 eb2 ~@11",
  Q: "~@2 bb3 ~@5", R: "eb2 ~@11 bb3 ~@3", S: "~@6 f3@5 ~@5", T: "~@13 g3 ~@2", U: "c2@3 ~@9 c3 ~@3", V: "~@12 ab3 ~@3",
  W: "~@12 g3 ~@3", X: "c2 ~@15", Y: "~@7 c3", Z: "~@6 ab3 ~@9", AA: "~@9 c2 ~@6", AB: "~@10 g2 ~@5",
  AC: "~@11 bb1 ~@4",
})).s("gm_electric_guitar_clean").gain(0.2)

// drums · kick
const kick = s("bd").struct(`<
  A B C D E F G H I J K L M N O P Q R S T U V W X Y Z D AA F G AB I AC K AD M AE AF AG AH@30 AI AH@7 AI AH@7 AJ AH@19 AK
  AH@3 AL AI
>`.pickRestart({
  A: "~@2 x ~@3 x!2", B: "~@5 x ~@2 x ~@6 x", C: "~ x ~@2 x ~@4 x ~ x ~@4", D: "~@2 x ~@2 x ~@6 x ~ x ~",
  E: "~@6 x ~ x ~ x ~@4 x", F: "~@2 x ~@6 x ~ x ~@4", G: "~@3 x ~ x ~@6 x ~@2 x", H: "~ x ~@4 x ~ x ~@7",
  I: "x ~ x ~@6 x ~@2 x ~@3", J: "~@3 x ~ x ~@2 x ~@4 x ~ x", K: "~@6 x ~@2 x ~@6", L: "x ~@2 x ~@6 x ~ x ~@3",
  M: "~@6 x ~@6 x ~@2", N: "x ~@8 x ~@6", O: "~ x ~ x ~@6 x ~@2 x ~@2", P: "~@2 x!2 ~@4", Q: "x ~@6 x ~@2 x ~@5",
  R: "~ x ~ x ~@7 x ~ x ~@2", S: "~@7 x ~@6 x ~", T: "x ~@3 x!2 ~@2", U: "~ x ~@2 x ~@8 x ~@2", V: "~@5 x ~ x ~@6 x ~",
  W: "~ x ~@6 x ~ x ~@5", X: "~@4 x ~@6 x ~@2 x ~", Y: "~@5 x ~ x ~@7 x", Z: "~ x ~@9 x ~@4", AA: "~@5 x ~@2 x ~@7",
  AB: "~ x", AC: "~@3 x ~ x ~@9 x", AD: "x!2 ~@3 x!2 ~", AE: "~@9 x ~@2 x ~@3", AF: "x ~@2 x ~ x ~@4 x ~ x ~@2 x",
  AG: "~@4 x ~ x ~@2 x ~@3 x ~@2", AH: "x!2 ~ x!3 ~ x", AI: "~@2 x!2 ~@2 x!2 ~@2 x!2 ~@4",
  AJ: "x ~ x ~@3 x ~@3 x!2 ~@4", AK: "~ x!2 ~ x!2 ~@2", AL: "x ~ x ~@3 x ~ x ~ x ~@3 x!2",
})).gain(0.41)

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

// drums · clap
const clap = s("cp").struct("<~@21 [~@2 x ~@2 x ~@10] ~@8 [~@13 x ~@2] x ~@79>").gain(0.41)

// drums · low tom
const low_tom = s("lt").struct("<~@5 A ~@6 B ~@18 C ~@4 D ~@32 E ~@7 E ~@23 F ~@3 F ~@4 E>".pickRestart({
  A: "~@7 x", B: "~@3 x ~@12", C: "~@7 x ~@8", D: "~@5 x ~ x ~@8", E: "~@12 x!4", F: "~@3 x",
// … 70 more lines

More by David Bowie