Strudelify

I Think I Love You

The Partridge Family

KeyE♭ minorTempo102 bpm
0:00/0:00
// I Think I Love You — The Partridge Family
// 102 bpm, 4/4, key Eb minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 1 "Melody Vocal" synth choir (copy of ch 2 "Melody Vocal" trombone)
// note: Full arrangement: all 73 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(102/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 · harpsichord
const harpsichord = note(`<
  ~@3 A B C D E F G@8 H@2 I@4 J@8 K L@5 M@8 N@2 O P Q R S K T U V D W@2 X Y Z AA AB@10
>`.pickRestart({
  A: "~@7 bb4", B: "b4@2 bb4@4 bb4@2 b4 ~ bb4!2 a4@2 bb4@2", C: "b4@2 bb4@4 bb4@2 b4 ~ bb4 ~ a4@2 bb4@2",
  D: "b4@2 bb4@4 bb4@2 b4 ~ bb4 ~ db5@2 b4@2", E: "bb4@2 ab4@2 ab4@2 g4 ab4@7 ab4@2",
  F: "bb4 ab4@2 ab4 bb4 ab4 bb4 ab4",
  G: "[~ g4@3 g4@2 gb4@2 g4@4 ~@2 g4@2 g4@2 f4@2 f4@2 f4@2 f4@4 f4@2 g4@2 f4@2 eb4@2 eb4@2 c4@2 eb4@2 c5@2 c5@2 c5@2 c5@2 bb4@8 ~@20 bb4@2 b4@2 bb4@4 bb4@2 b4@2 bb4@2 a4@2 bb4@2 b4@2 bb4@4 ~ bb4 b4!2 bb4@2 a4@2 bb4@2 b4@2 bb4@4 bb4@2 b4@2 bb4@2 db5@2 b4@2, ab4]/8",
  H: "[bb4@2 ab4@2 ~@2 g4@2 ab4@6 ~@2 bb4@2 ab4@2 ~@2 g4 ~ ab4@6 ab4@2, ~@2 ab4@2 ~@3 ab4@2 ~ ab4@2 ~@4]/2",
  I: "[~ g4!2 ~@2 g4!3 g4 f4!3 f4@2 f4 g4 f4 eb4!2 c4 eb4 c5!3 c5 bb4@4 ~@3, ab4 ab4@7]/4",
  J: "[~@10 f5@2 f5@2 f5@2 f5@2 eb5@4 eb5!2 f5@2 eb5@2 d5@2 eb5@2 f5@2 eb5@4 eb5!2 f5@2 eb5@2 d5@2 eb5@2 eb5@2 d5@4 bb4!2 eb5@2 d5@2 d5@2 bb4@2 d5@2 c5@4 ~@20 c5@2 c5@2 c5@2 c5@2 bb4@4 bb4@2 c5!2 bb4!2 a4@2 bb4@2 c5@2 bb4@4 bb4@2 ~@4 a4@2 bb4@2, ~@9 ab4@119]/8",
  K: "c5 b4@3 c5 b4@3 c5@3 ~ c5@2 db5@2",
  L: "[[ab4,c5,eb5]@4 [c5,eb5] ~ [c5,eb5] ~ [bb4,d5] ~ [bb4,d5] ~ [bb4,d5] ~ [bb4,d5] ~@5 f4 ~ c5 eb5 d5@2 f5@2 d5@3 eb4 eb5@2 f5@2 g5@2 ~ b5 c6@2 bb5 ~ ab5 [ab5,bb5] g5@2 ab5@2 ~ [c6,eb6]@2 f5 c6 [bb5,d6]@2 ~ [bb5,d6] [ab5,c6]@3 [ab5,c6]@2 bb5 f5 ab5@2 ~ [eb5,g5] c5@2 ~@2 g5 [eb5,f5] [g4,eb5]@2 [bb4,eb5] ~, ~@4 ab4@2 ab4@2 ab4@2 ab4@2 ab4@2 ab4@6 ~ ab4@59, ~@24 db5 ~@13 bb5@2 ~@26 g5 ~ bb5@2 ~@2 [bb4,eb5]@4 ~@4]/5", // Ab Cm Bb Absus2 Cm Bb Ab Eb …
  M: "[[c5,eb5]@4 f4 ~ c5 eb5 d5@2 d5@2 c5@2 bb4@2 ~@4 g5 eb5 bb4 ab5 eb5 bb4 ~ eb5 bb4 eb5 f5 g5 f5@2 ~ ab5 bb5 c6 ab5 bb5 g5@2 f5@2 eb5 [eb5,f5] d5@2 ~ bb4 eb5 g5 bb4 g5 eb5 bb4 g4@8 ~@58 f5@2 f5@2 f5@2, ~@5 ab4@123, ~@8 db5 ~ db5 ~@15 g5@5 ~@3 g5@4 ~@10 eb5@2 ~@78]/8", // Cm Ebsus2
  N: "f5@2 eb5@4 eb5!2 f5@2 eb5@2 d5@2 eb5@2", O: "eb5@2 d5@4 bb4!2 eb5@2 d5@2 d5@2 bb4@2", P: "d5 c5@2 ~@5",
  Q: "~@5 c5!3", R: "c5@2 bb4@4 bb4@2 c5!2 bb4!2 a4@2 bb4@2", S: "c5 bb4@2 bb4 ~@2 a4 bb4",
  T: "d5 db5 d5 db5 ~@3 bb4, ~ d5", U: "b4@2 bb4@4 bb4@2 b4!2 bb4 ~ a4@2 bb4@2",
  V: "b4@2 bb4@4 bb4@2 b4!2 bb4!2 a4@2 bb4@2",
  W: "[bb4 ab4@3 ~@2 g4@2 ab4@7 ~ bb4@2 ab4@2 ~ g4@2 ab4@3 ~@2 bb4@2 ab4@2, ~@4 ab4@4 ~@7 ab4@3 ~@2 ab4@3 ~@3 ab4@4 ~@2]/2",
  X: "~@2 g4@2 g4 ~ eb4@2 ab4@2 g4 ~ g4@2 g4@2, ab4 ~", Y: "g4 f4!3 f4@2 f4 g4", Z: "f4 eb4!2 c4 eb4 c5!3",
  AA: "c5@2 bb4@8 f5!2 f5@2 f5@2", AB: "f5 eb5@2 ~@2 f5!3",
})).s("gm_harpsichord").gain(0.34).pan(0.7)

// chords · acoustic guitar steel · "Guitar High"
const acoustic_guitar_steel = note(`<
  A B C D E F G H@2 I J K L M N O P Q R S T U L@2 V W X Y Z AA AB AC AD AE AF AG AH AI AJ AK AL AM AN AO AP AQ AR AS Y
  AT AA AB AC AD N O P AU AV AW AX AY L AZ BA AZ BA ~@6
>`.pickRestart({
  A: "eb4@4 ~@2 gb4 ~ a4@4 gb4@4", B: "f4 ~ f4@4 gb4@2 f4@4 bb3@4", C: "eb4@6 gb4 ~ a4@4 b4@4", D: "bb4@14 [bb3,bb4]!2",
  E: "[b3,b4]!2 [bb3,bb4]!14", F: "[bb3,bb4]!12 [a3,a4]!2 [bb3,bb4]!2", G: "[bb3,bb4]!16", H: "[ab3,ab4]!16",
  I: "[g3,g4]!2 ~ [g3,g4]!13, ~ [bb3,g4] ~@6", J: "[g3,g4]!2 [f3,f4]!14",
  K: "[f3,f4]!2 [eb3,eb4]!4 ~ [eb3,eb4]!9, ~@3 [c3,c4] ~@4", L: "eb3!2 [bb3,eb4,g4] bb2 eb3!2 [bb3,eb4,g4] bb2",
  M: "eb3!2 [bb3,eb4,g4] bb2 eb3!2 [bb3,eb4,g4] [bb2,bb5]", // Eb Bb
  N: "[gb3,bb3,eb4,b5]@2 [gb3,bb3,eb4]@2 [bb3,eb4,gb4] ~ [gb3,bb3,eb4,bb5]@2 [gb3,bb3,eb4,b5]@2 [gb3,bb3,eb4,bb5]@2 [bb3,eb4,gb4,a5] ~ [gb3,bb3,eb4,bb5]@2, ~ bb5@2 ~@5", // Bmaj7 Ebm Bmaj7 Ebm
  O: "[f3,bb3,d4,b5]@2 [f3,bb3,d4]@2 [bb3,d4,f4] ~ [f3,bb3,d4,bb5]@2 [f3,bb3,d4,b5]@2 [f3,bb3,d4,bb5]@2 [bb3,d4,f4,a5] ~ [f3,bb3,d4,bb5]@2, ~ bb5@2 ~@5", // Bb Bbmaj7 Bb
  P: "[e3,bb3,db4,b5]@2 [e3,bb3,db4]@2 [bb3,db4,e4] ~ [e3,bb3,db4,bb5]@2 [e3,bb3,db4,b5]@2 [e3,bb3,db4,bb5]@2 [bb3,db4,e4,db6] ~ [e3,bb3,db4,b5]@2, ~ bb5@2 ~@5", // Bbdim
  Q: "[eb3,ab3,c4,bb5]@2 [eb3,ab3,c4,ab5]@2 [ab3,c4,eb4,ab5] ~ [eb3,ab3,c4,g5]@2 [eb3,ab3,c4]@2 [eb3,ab3,c4]@2 [ab3,c4,eb4] ~ [eb3,ab3,c4,ab5]@2, ~@4 ab5@3 ~", // Ab Abmaj7 Ab
  R: "[eb3,ab3,b3,bb5]@2 [eb3,ab3,b3,ab5]@2 [ab3,b3,eb4,ab5] ~ [eb3,ab3,b3,g5]@2 [eb3,ab3,b3]@2 [eb3,ab3,b3]@2 [ab3,b3,eb4] ~ [eb3,ab3,b3,ab5]@2, ~@4 ab5@3 ~", // Abm
  S: "[eb3,g3,bb3,ab5]@2 [eb3,g3,bb3,g5]@2 [g3,bb3,eb4,g5] ~@3 [eb3,g3,bb3]@2 [eb3,g3,bb3,g5]@2 [g3,bb3,eb4,g4,g5] ~ [eb3,g3,bb3,g5]@2, ~@3 [eb3,g3,bb3,eb5] ~@4, ~@7 ab5@3 ~@6", // Eb
  T: "[f3,ab3,db4,g4,g5]@2 [f3,ab3,db4,f4,f5]@2 [f3,ab3,db4,f4,f5] ~ [f3,ab3,db4,f4,f5]@2 [f3,ab3,db4]@2 [f3,ab3,db4]@2 [f3,ab3,db4,f4,f5] ~ [f3,ab3,db4,g4,g5]@2, ~@2 [f4,f5] ~", // Db F
  U: "[eb3,ab3,c4,f4,f5]@2 [eb3,ab3,c4,eb4,eb5]@2 [eb3,ab3,c4,eb4,eb5] ~ [eb3,ab3,c4,c5]@2 [eb3,ab3,c4]@2 [eb3,ab3,c4]@2 [eb3,ab3,c4] ~ [eb3,ab3,c4]@2, ~ [eb4,eb5]", // Fm7 Ab Eb
  V: "~@4 [e3,b3,eb4,ab4] ~@7 [e3,b3,eb4,ab4] ~@3", W: "~@4 [bb3,eb4,gb4] ~@7 [bb3,eb4,gb4] ~@3",
  X: "~@4 [f3,b3,db4,ab4] ~@7 [f3,b3,db4,ab4] ~@3", // Db7
  Y: "[eb4,g4,c5] ~ [eb4,g4,c5]@4 [eb4,g4,c5] ~ [eb4,g4,c5]@4 [eb4,g4,c5] ~@3", // Cm
  Z: "[eb4,g4,c5,eb5] ~ [eb4,g4,c5,eb5]@4 [eb4,g4,c5,eb5] ~ [eb4,g4,c5]@4 [eb4,g4,c5]@4", // Cm
  AA: "[f3,bb3,d4]@2 [f3,bb3,d4]@2 [bb3,d4,f4,ab4] ~ [f3,bb3,d4]@2 [f3,bb3,d4]@2 [f3,bb3,d4]@2 [bb3,d4,f4,ab4] ~ [f3,bb3,d4]@2", // Bb Bb7 Bb Bb7 Bb
  AB: "[eb3,g3,bb3]@2 [eb3,g3,bb3]@2 [g3,bb3,eb4,g4] ~ [eb3,g3,bb3]@2 [eb3,g3,bb3]@2 [eb3,g3,bb3]@2 [g3,bb3,eb4,g4] ~ [eb3,g3,bb3]@2", // Eb
  AC: "[a3,c4,f4]@2 [a3,c4,f4]@2 [c4,eb4,a4] ~ [a3,c4,f4]@2 [a3,c4,f4]@2 [a3,c4,f4]@2 [c4,eb4,a4] ~ [a3,c4,f4]@2", // F Adim F Adim F
  AD: "[f3,bb3,d4]@2 [f3,bb3,d4]@2 [bb3,d4,f4,ab4] ~ [f3,bb3,d4]@2 [f3,bb3,d4]@2 [f3,bb3,d4]@2 [bb3,d4,f4,ab4] ~ [f3,bb3,d4,bb5]@2", // Bb Bb7 Bb Bb7 Bb
  AE: "[f3,ab3,c4]@2 [f3,ab3,c4]@2 [f3,ab3,c4] ~ [f3,ab3,c4]@2 [bb3,d4,f4]@2 [bb3,d4,f4]@2 [bb3,d4,f4]@2 [bb3,d4,f4]@2", // Fm Bb
  AF: "[eb4,g4,bb4]@2 [eb4,g4,bb4]@2 [eb4,g4,bb4]@2 [eb4,g4,bb4]@2 [c4,eb4,g4]@2 [c4,eb4,g4] ~ [c4,eb4,g4] ~ [c4,eb4,g4] ~", // Eb Cm
  AG: "[f3,ab3,c4]!2 [bb3,d4,f4]!2", AH: "[eb4,g4,bb4]@2 [eb4,g4,bb4]!2 [eb4,g4,bb4]@2 ~@2",
  AI: "[f3,ab3,c4]@3 ~ [f3,ab3,c4]@3 ~ [bb3,d4,f4]@3 ~ [bb3,d4,f4]@3 ~", // Fm Bb
  AJ: "[eb4,g4,bb4]@3 ~ [eb4,g4,bb4]@3 ~ [c4,eb4,g4]@2 [c4,eb4,g4]@2 [c4,eb4,g4]@3 ~", // Eb Cm
  AK: "[f3,ab3,c4]@3 ~ [f3,ab3,c4]@3 ~ [bb3,d4,f4]@2 [bb3,d4,f4]@2 [bb3,d4,f4]@3 ~", // Fm Bb
  AL: "[eb4,g4,bb4]@2 [eb4,g4,bb4]@2 [eb4,g4,bb4]@2 [eb4,g4,bb4]@2 [eb4,g4,bb4]@6 ~ d3", // Eb
  AM: "g2@2 g2 ~ b2@2 b2 ~ c3!3 ~@4 c3", AN: "f2@2 f2 ~ a2@2 a2 ~ bb2!3 ~@4 f3", AO: "bb2@2 bb2 ~ d3@2 d3 ~ eb3!3 ~@5",
  AP: "[f3,bb3,d4,ab4]!8", AQ: "~@4 [eb3,c4,eb4,ab4] ~@7 [eb3,c4,eb4,ab4] ~@3",
  AR: "~@4 [bb3,eb4,g4] ~@7 [bb3,eb4,g4] ~@3", AS: "~@4 [f3,bb3,d4,ab4] ~@7 [f3,bb3,d4,ab4] ~@3",
  AT: "[eb4,g4,c5,eb5] ~ [eb4,g4,c5,eb5]@4 [eb4,g4,c5,eb5] ~ [eb4,g4,c5]@4 ~@4", // Cm
  AU: "~@2 [eb3,ab3,c4]@2 [ab3,c4,eb4,ab5] ~ [eb3,ab3,c4,g5]@2 [eb3,ab3,c4]@2 [eb3,ab3,c4]@2 [ab3,c4,eb4] ~@2 ab5, [eb3,ab3,c4,bb5] ~@6 [eb3,ab3,c4], ~ ab5@2 ~@5 ab5@4 ~@4", // Ab Abmaj7 Ab
  AV: "[eb3,ab3,b3,bb5]@2 [eb3,ab3,b3,ab5]@2 [ab3,b3,eb4,ab5] ~@3 [eb3,ab3,b3]@2 [eb3,ab3,b3,ab5]@2 [ab3,b3,eb4,bb5] ~ [eb3,ab3,b3,ab5]@2, ~@5 g5@2 ab5@3 ~@6, ~@3 [eb3,ab3,b3] ~@4", // Abm
  AW: "[eb3,g3,bb3,ab5]@2 [eb3,g3,bb3,g5]@2 [g3,bb3,eb4,g5] ~ [eb3,g3,bb3,eb5]@2 [eb3,g3,bb3,ab5]@2 [eb3,g3,bb3,g5]@2 [g3,bb3,eb4,g5] ~ [eb3,g3,bb3,g5]@2", // Eb
  AX: "[f3,ab3,db4,g5]@2 [f3,ab3,db4,f5]@2 [f3,ab3,db4,f5] ~ [f3,ab3,db4,f5]@2 [f3,ab3,db4]@2 [f3,ab3,db4]@2 [f3,ab3,db4,f5] ~ [f3,ab3,db4,g5]@2, ~@2 f5 ~", // Db
  AY: "[eb3,ab3,c4,f5]@2 [eb3,ab3,c4,eb5]@2 [eb3,ab3,c4,eb5] ~ [eb3,ab3,c4,c5]@2 [eb3,ab3,c4]@2 [eb3,ab3,c4]@2 [eb3,ab3,c4] ~ [eb3,ab3,c4]@2, ~ eb5", // Fm7 Ab
  AZ: "eb3!2 [bb3,eb4,g4] ~ eb3!2 [bb3,eb4,g4] ~", // Eb
  BA: "[ab3,c4]@2 [ab3,c4]@2 [ab3,c4,eb4,ab4] ~@3 c4@2 c4@2 [ab3,c4,eb4,ab4] ~@3", // Ab
})).s("gm_acoustic_guitar_steel").gain(0.33).pan(0.2)

// chords · clavinet
const clavinet = note(`<
  A B C D E F G H I J K L M@2 N O P Q R S T U M@2 V M W X Y Z AA AB AC AD AE AF AG AH AI AJ AK ~@3 AL AM AN O X AO O AN
  AP O N O P AQ AR AS T AT AU AV V AW AX AY AZ ~@4
>`.pickRestart({
  A: "~@2 [eb4,gb4,bb4] ~ [eb4,gb4,bb4]@4 ~@2 [eb4,gb4,bb4]@2 ~@2 [eb4,gb4,bb4]@2", // Ebm
  B: "~@2 [d4,f4,bb4] ~ [d4,f4,bb4]@4 ~@2 [d4,f4,bb4]@2 ~@2 [d4,f4,bb4]@2", // Bb
  C: "~@2 [eb4,gb4,bb4] ~ [eb4,gb4,bb4]@4 ~@2 [f4,ab4,db5]@2 ~@2 [eb4,gb4,a4]@2", // Ebm Db Ebdim
  D: "~@2 [d4,f4,bb4] ~ [d4,f4,bb4]@4 [d4,f4,bb4]@2 ~@4 bb3@2, ~@3 [d4,f4,bb4]", // Bb
  E: "[eb4,gb4,bb4] ~ [eb4,gb4,bb4]@6 ~@8", // Ebm
  F: "[d4,f4,bb4] ~ [d4,f4,bb4]@6 [d4,f4,bb4] ~ [d4,f4,bb4] ~ [d4,f4,bb4] ~ [d4,f4,bb4] ~", // Bb
  G: "[db4,e4,bb4] ~ [db4,e4,bb4]@6 [db4,e4,bb4] ~ [db4,e4,bb4] ~ [db4,e4,bb4] ~ [db4,e4,bb4] ~", // Bbdim
  H: "[c4,eb4,ab4] ~ [c4,eb4,ab4]@6 [c4,eb4,ab4] ~ [c4,eb4,ab4] ~ [c4,eb4,ab4] ~ [c4,eb4,ab4] ~", // Ab
  I: "[b3,eb4,ab4] ~ [b3,eb4,ab4]@6 [b3,eb4,ab4] ~ [b3,eb4,ab4] ~ [b3,eb4,ab4] ~ [b3,eb4,ab4] ~", // Abm
  J: "[bb3,eb4,g4] ~ [bb3,eb4,g4]@6 [bb3,eb4,g4] ~ [bb3,eb4,g4] ~ [bb3,eb4,g4] ~ [bb3,eb4,g4] ~", // Eb
  K: "[ab3,db4,f4] ~ [ab3,db4,f4]@6 [ab3,db4,f4] ~ [ab3,db4,f4] ~ [ab3,db4,f4] ~ [ab3,db4,f4] ~", // Db
  L: "[ab3,db4,f4] ~ [ab3,c4,eb4]@6 [ab3,c4,eb4] ~ [ab3,c4,eb4] ~ [ab3,c4,eb4] ~ [ab3,c4,eb4] ~", // Db Ab
  M: "~ [g4,bb4,eb5,g5] ~ [g4,bb4,eb5,g5] ~ [g4,bb4,eb5,g5] ~ [g4,bb4,eb5,g5]", // Eb
  N: "[eb4,gb4,bb4] ~ [eb4,gb4,bb4] ~ [eb4,gb4,bb4] ~ [eb4,gb4,bb4] ~ [eb4,gb4,bb4] ~ [eb4,gb4,bb4] ~ [eb4,gb4,bb4] ~ [eb4,gb4,bb4] ~", // Ebm
  O: "[d4,f4,bb4] ~ [d4,f4,bb4] ~ [d4,f4,bb4] ~ [d4,f4,bb4] ~ [d4,f4,bb4] ~ [d4,f4,bb4] ~ [d4,f4,bb4] ~ [d4,f4,bb4] ~", // Bb
  P: "[db4,e4,bb4] ~ [db4,e4,bb4] ~ [db4,e4,bb4] ~ [db4,e4,bb4] ~ [db4,e4,bb4] ~ [db4,e4,bb4] ~ [db4,e4,bb4] ~ [db4,e4,bb4] ~", // Bbdim
  Q: "[c4,eb4,ab4] ~ [c4,eb4,ab4] ~ [c4,eb4,ab4] ~ [g3,c4,eb4,ab4] ~ [c4,eb4,ab4] ~ [c4,eb4,ab4] ~ [c4,eb4,ab4] ~ [c4,eb4,ab4] ~, bb3@2 ab3@2 ab3@2 ~ ab3@7 ab3@2", // Ab Abmaj7 Ab
  R: "[b3,eb4,ab4] ~ [b3,eb4,ab4] ~ [b3,eb4,ab4] ~ [b3,eb4,ab4] ~ [b3,eb4,ab4] ~ [b3,eb4,ab4] ~ [b3,eb4,ab4] ~ [b3,eb4,ab4] ~, bb3 ab3@2 ab3 bb3 ab3 bb3 ab3", // Abm
  S: "[bb3,eb4,g4] ~ [bb3,eb4,g4] ~ [bb3,eb4,g4] ~ [bb3,eb4,g4] ~ [bb3,eb4,g4] ~ [bb3,eb4,g4] ~ [bb3,eb4,g4] ~ [bb3,eb4,g4] ~, ab3 g3@4 ~@3", // Eb
  T: "[ab3,db4,f4] ~ [ab3,db4,f4] ~ [ab3,db4,f4] ~ [ab3,db4,f4] ~ [ab3,db4,f4] ~ [ab3,db4,f4] ~ [ab3,db4,f4] ~ [ab3,db4,f4] ~", // Db
  U: "[ab3,db4] ~ [ab3,c4,eb4] ~ [ab3,c4,eb4] ~ [ab3,c4,eb4] ~ [ab3,c4,eb4] ~ [ab3,c4,eb4] ~ [ab3,c4,eb4] ~ [ab3,c4,eb4] ~", // Db5 Ab
  V: "~ [ab4,c5,eb5,ab5] ~ [ab4,c5,eb5,ab5] ~ [ab4,c5,eb5,ab5] ~ [ab4,c5,eb5,ab5]", // Ab
  W: "~ [bb4,d5,f5,ab5] ~ [bb4,d5,f5,ab5] ~ [bb4,d5,f5,ab5] ~ [bb4,d5,f5,ab5]", // Bb7
  X: "[eb4,g4,c5] ~ [eb4,g4,c5]@4 [eb4,g4,c5] ~ [eb4,g4,c5]@4 [eb4,g4,c5] ~@3", // Cm
  Y: "[eb4,g4,c5,eb5] ~ [eb4,g4,c5,eb5]@4 [eb4,g4,c5,eb5] ~ [eb4,g4,c5]@4 [eb4,g4,c5]@4", // Cm
  Z: "~ [f4,bb4,d5] ~ [f4,bb4,d5] ~ [f4,bb4,d5] ~ [f4,bb4,d5]", // Bb
  AA: "~ [g4,bb4,eb5] ~ [g4,bb4,eb5] ~ [g4,bb4,eb5] ~ [g4,bb4,eb5]", // Eb
  AB: "~ [f4,a4,eb5] ~ [f4,a4,eb5] ~ [f4,a4,eb5] ~ [f4,a4,eb5]", // F7
  AC: "[ab4,c5,eb5]@4 [ab4,c5,eb5] ~ [ab4,c5,eb5] ~ [ab4,bb4,d5] ~ [ab4,bb4,d5] ~ [ab4,bb4,d5] ~@3", // Ab Bb7
  AD: "~@4 f4 ab4 c5 eb5 d5@2 f5@2 d5@3 eb4, ~@8 db5 ~@7",
  AE: "eb5@2 f5@2 g5@2 ~ b5 c6@2 bb5 ~ ab5 [ab5,bb5] g5@2, ~@3 bb5 ~@4", // Absus2
  AF: "ab5@2 ~ [c6,eb6]@2 f5 c6 [bb5,d6]@2 ~ [bb5,d6] [ab5,c6]@3 [ab5,c6]@2", // Cm Bb Ab
  AG: "bb5 f5 ab5@2 ~ [eb5,g5] c5@2 ~@2 g5 [eb5,f5] [g4,eb5]@2 [bb4,eb5] ~, ~@2 g5 ~ bb5@2 ~@2 [bb4,eb5]@4 ~@4", // Eb Ebsus2 Cm Eb5
  AH: "[c5,eb5]@4 f4 ab4 c5 eb5 d5@2 d5@2 c5@2 bb4@2, ~@8 db5 ~ db5 ~@5", // Cm
  AI: "~@4 g5 eb5 bb4 ab5 eb5 bb4 ~ eb5 bb4 eb5 f5 g5, ~@10 g5@5 ~",
  AJ: "f5@2 ~ ab5 bb5 c6 ab5 bb5 g5@2 f5@2 eb5 [eb5,f5] d5@2, ~ g5@2 ~@5", // Ebsus2
  AK: "~ bb4 eb5 g5 bb4 g5 eb5 bb4 g4@8, eb5 ~@7", AL: "[d4,f4,ab4,bb4]!8",
  AM: "[eb4,ab4,c5] ~ [eb4,ab4,c5] ~ [eb4,ab4,c5] ~ [eb4,ab4,c5] ~ [eb4,ab4,c5] ~ [eb4,ab4,c5] ~ [eb4,ab4,c5] ~ [eb4,ab4,c5] ~", // Ab
  AN: "[eb4,g4,bb4] ~ [eb4,g4,bb4] ~ [eb4,g4,bb4] ~ [eb4,g4,bb4] ~ [eb4,g4,bb4] ~ [eb4,g4,bb4] ~ [eb4,g4,bb4] ~ [eb4,g4,bb4] ~", // Eb
  AO: "[eb4,g4,c5,eb5] ~ [eb4,g4,c5,eb5]@4 [eb4,g4,c5,eb5] ~ [eb4,g4,c5]@4 ~@4", // Cm
  AP: "[eb4,a4,c5] ~ [eb4,a4,c5] ~ [eb4,a4,c5] ~ [eb4,a4,c5] ~ [eb4,a4,c5] ~ [eb4,a4,c5] ~ [eb4,a4,c5] ~ [eb4,a4,c5] ~", // Adim
  AQ: "[c4,eb4,ab4] ~ [c4,eb4,ab4] ~ [c4,eb4,ab4] ~ [c4,eb4,ab4] ~ [c4,eb4,ab4] ~ [c4,eb4,ab4] ~ [c4,eb4,ab4] ~ [c4,eb4,ab4] ~", // Ab
  AR: "[b3,eb4,ab4] ~ [b3,eb4,ab4] ~ [b3,eb4,ab4] ~ [b3,eb4,ab4] ~ [b3,eb4,ab4] ~ [b3,eb4,ab4] ~ [b3,eb4,ab4] ~ [b3,eb4,ab4] ~", // Abm
  AS: "[bb3,eb4,g4] ~ [bb3,eb4,g4] ~ [bb3,eb4,g4] ~ [bb3,eb4,g4] ~ [bb3,eb4,g4] ~ [bb3,eb4,g4] ~ [bb3,eb4,g4] ~ [bb3,eb4,g4] ~", // Eb
  AT: "[ab3,db4,f4] ~ [ab3,c4,eb4] ~ [ab3,c4,eb4] ~ [ab3,c4,eb4] ~ [ab3,c4,eb4] ~ [ab3,c4,eb4] ~ [ab3,c4,eb4] ~ [ab3,c4,eb4] ~", // Db Ab
  AU: "[g4,bb4,eb5,g5] ~ [g4,bb4,eb5,g5]@2 ~@2 [g4,bb4,eb5,g5]@2 ~@2 [g4,bb4,eb5,g5]@2 ~@2 [g4,bb4,eb5,g5]@2", // Eb
  AV: "~ [g4,bb4,eb5,g5] ~ [g4,bb4,eb5,g5] ~ [g4,bb4,eb5,g5] ~ [ab4,c5,eb5,ab5]", // Eb Ab
  AW: "[g4,bb4,eb5,g5] ~ [g4,bb4,eb5,g5]@2 ~@2 [g4,bb4,eb5,g5]@2 ~@2 [ab4,c5,eb5,ab5]@2 ~@2 [ab4,c5,eb5,ab5]@2", // Eb Ab
  AX: "~ [ab4,c5,eb5,ab5] ~ [ab4,c5,eb5,ab5] ~ [ab4,c5,eb5,ab5] ~ [g4,bb4,eb5,g5]", // Ab Eb
  AY: "~ [g4,bb4,eb5,g5] ~ [g4,bb4,eb5,g5] ~ [ab4,c5,eb5,ab5] ~ [ab4,c5,eb5,ab5]", // Eb Ab
  AZ: "~ [ab4,c5,eb5,ab5] ~ [ab4,c5,eb5,ab5] ~ [ab4,c5,eb5,ab5] ~@2", // Ab
})).s("gm_clavinet").gain(0.19).pan(0.7)

// chords · clavinet · soft notes · Ebm Eb Ab Eb Ab
const clavinet_soft = note(`<
  ~@4
  [~@8 [eb4,gb4,bb4] ~ [eb4,gb4,bb4] ~ [eb4,gb4,bb4] ~ [eb4,gb4,bb4] ~]
  ~@64
  [~ [g4,bb4,eb5,g5] ~ [g4,bb4,eb5,g5] ~ [ab4,c5,eb5,ab5] ~ [ab4,c5,eb5,ab5]]
  [~ [ab4,c5,eb5,ab5] ~ [ab4,c5,eb5,ab5] ~ [ab4,c5,eb5,ab5] ~@2]
  [~ [g4,bb4,eb5,g5] ~ [g4,bb4,eb5,g5] ~ [ab4,c5,eb5,ab5] ~ [ab4,c5,eb5,ab5]]
  [~ [ab4,c5,eb5,ab5] ~ [ab4,c5,eb5,ab5] ~ [ab4,c5,eb5,ab5] ~@2]
>`).s("gm_clavinet").gain(0.13).pan(0.7)

// chords · reed organ · "organ"
const reed_organ = note("<~@4 A B C D E F G H ~@2 A B C D E F I@2 ~@32 A B C D E F I@2 J ~@2 K ~@7>".pickRestart({
  A: "[gb3,bb3,eb4]", B: "[f3,bb3,d4]", C: "[e3,bb3,db4]", D: "[eb3,ab3,c4]", E: "[eb3,ab3,b3]", F: "[eb3,g3,bb3]",
  G: "[db3,f3,ab3]", H: "[c3,eb3,ab3]@7 ~", I: "[ab3@9 [c3,eb3,ab3]@7, [db3,f3]@5 ~@3]/2", J: "~@5 eb2 ~@2",
  K: "ab3 ~@15",
})).s("gm_reed_organ").gain(0.22).pan(0.4)

// bass · fretless bass · "bass"
const bass = note(`<
  A B C D E F G H I J K@2 L@2 E F G H M J K@2 L@2 N O P Q R S L T U ~@7 V W X Y Z N O P Q AA S L T U E F AB H I AC K@2
  AD ~@10
>`.pickRestart({
  A: "eb2@6 gb2 ~ a2@4 gb2@4", B: "f2@2 ~ gb2 f2@2 bb1@2", C: "eb2@6 gb2 ~ a2@4 b2@4", D: "bb2@2 ~ bb1 bb1@2 ~@2",
  E: "eb2@2 ~ bb1 eb2@2 ~ bb1", F: "d2@2 ~ bb1 d2@2 ~ bb1", G: "db2@3 gb1 db2@2 ~ ab1", H: "c2@2 ~ ab1 c2@2 ~ ab1",
  I: "b1@2 ~ ab1 b1@2 ~ ab1", J: "bb1@3 bb1 bb1@2 ~ bb1", K: "ab1@3 ab1 ab1@2 ~ ab1", L: "eb2@3 bb1 eb2@3 bb1",
  M: "b1@2 ~ ab1 b1@2 ~ bb1", N: "ab1@3 eb2 ab2@2 ab1@2", O: "g1@3 eb2 g2@2 g1@2", P: "f1@5 ab1 c2@2 bb1@4 bb1@4",
  Q: "c2!2 ~ c2!2 g1 c2 g1", R: "c2 c2@2 c2 c2@2 ~ f1", S: "bb1@3 f1 bb1!2 c2 d2", T: "f1@3 f1 a1@2 ~ a1",
  U: "bb1@3 bb1 bb1@2 bb1@2", V: "~@15 d2", W: "g1@2 g1 ~ b1@2 b1 ~ c2!3 ~@4 c2", X: "f1@2 f1 ~ a1@2 a1 ~ bb1!3 ~@4 f2",
  Y: "bb1@2 bb1 ~ d2@2 d2 ~ eb2!3 ~@5", Z: "bb1!8", AA: "c2 c2@2 c2 c2@2 ~@2", AB: "db2@3 gb1 db2@2 ~ bb1",
  AC: "bb1@3 bb1 bb1@2 ~ ab1", AD: "eb2@3 bb1 eb2!3 ~",
})).s("gm_fretless_bass").gain(0.58)

// bass · electric bass finger · "bass"
const bass_2 = note("<~@63 A B A B A B A C ~@2>".pickRestart({
  A: "eb2@6 bb1@2 g1!3 ab1@2 bb1@2 ~", B: "~@3 c2@2 ~ d2@2 eb2@2 g2@2 g2 ab2 a2 bb2, ab1@3 ~@5",
  C: "~@3 c2@2 ~ d2@2 eb2@2 g2@2 g2 ab2 ~@2, ab1@3 ~@5",
})).s("gm_electric_bass_finger").gain(0.52)

// bass · electric bass finger · "bass" · soft notes
const bass_soft = note(`<
  ~@70
  [~@14 a2 bb2]
  [eb2@6 bb1@2 g1!3 ab1@2 bb1@2 ~]
  [~@3 c2@2 ~ d2@2 eb2@2 g2@2 g2 ab2 a2 bb2, ab1@3 ~@5]
>`).s("gm_electric_bass_finger").gain(0.19)

// drums · kick
const kick = s("bd").struct(`<
  ~@11 A B C ~@7 A B C@4 D E C@4 ~@11 F B C@2 D E C@4 ~@7 A G B@2 F B@2 F B H ~@2
>`.pickRestart({
  A: "~@4 x!4", B: "x!2 ~ x", C: "~ x ~ x", D: "x ~ x ~@3 x ~ x ~@5 x!2", E: "~@14 x!2", F: "x ~ x ~ x ~ x ~ x ~@5 x!2",
  G: "x ~ x ~@2 x!3", H: "x!3 ~@5",
})).gain(0.42)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@70 [~@6 x ~ x ~@5 x!2] [x!2 ~ x] [x ~ x ~ x ~ x ~ x ~@5 x!2]>").gain(0.12)

// drums · snare
const snare = s("sd").struct("<~@12 A@2 ~@8 A@5 B@2 C A@3 ~@11 D A@3 B E A@4 ~@8 F A@2 D A@2 D A ~@3>".pickRestart({
  A: "~ x ~ x", B: "x ~ x ~@3 x ~ x ~ x!4 ~@2", C: "x!2 ~ x", D: "~@10 x!4 ~@2", E: "x ~ x ~@3 x ~ x ~ x!6",
  F: "~ x ~@2",
})).gain(0.48)
// … 42 more lines