Strudelify

Point of No Return

Kansas

KeyF majorTempo132 bpm
0:00/0:00
// Point of No Return — Kansas
// 132 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, 3/4 at bar 12, 4/4 at bar 13, 3/4 at bar 16, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: Full arrangement: all 102 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(132/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 pick · "BASS"
const bass = note(`<
  A@2 B@2 C@5 ~@3 D E@2 F G H I J K L@2 M@4 N O P Q R I S@2 T@2 U V@3 W@2 X Y Z AA AB@2 AC@2 AD@2 AE AF AG@2 AH@2 AI@2
  AJ@2 AK@2 AL@2 J AM AN AO@3 N D E@2 F G H I J AP AQ AR AS AT Q AU AV@2 I J AM AS AT Q R I J K ~
>`.pickRestart({
  A: "[~@3 f1@5]/2", B: "[~@2 a1 c2 f2 ~ f1@8 ~@2, ~@3 f1@2 ~@27]/2",
  C: "[~@4 f1 ~@2 c2@2 ~@3 f1@24 f1@2 a1@2 c2@2 ~@2 f1@23 ~ f1@2 a1@2 c2@3 ~@5, ~@3 a1 ~@36]/5", D: "~@8 c2@6 ~ c2",
  E: "[c2@4 ~@2 c2@12 g1@2 a1@2 c2@2 bb1@5 ~ bb1 ~]/2", F: "a1@4 a1 ~ g1@4 ~@6",
  G: "~@4 db2@2 db2@2 db2@2 d2@2 ~@2 c3 ~", H: "c3@2 [g2,a2,b2] ~ f1@4 f2@5 ~@3",
  I: "f2@3 [a1,b1,c2,d2] f1@2 ~@2 f1@2 ~@2 f1@2 ~@2", J: "f1@4 f2@5 ~@3 f2@3 [a1,b1,c2,d2]", K: "f1 ~ f1 ~ f1 ~@3",
  L: "[c2@6 ~ c2 c2@4 ~@2 c2@12 g1@2 a1@2 c2@2]/2",
  M: "[bb1@5 ~ bb1 ~ a1@4 a1 ~ g1@4 ~@10 c2@6 ~ c2 c2@4 ~@2 c2@12 g1@2 a1@2 c2@2 bb1@4]/4",
  N: "~@2 bb1 ~ a1@4 a1 ~ g1@4 ~@2", O: "~@4 db2!3 d2", P: "~@2 c3 ~ c3@2 [g2,a2,b2] ~ f1@4 f2@4",
  Q: "~@4 f2@3 [a1,b1,c2,d2] f1@2 ~@2 f1@2 ~@2", R: "f1@2 ~@2 f1@4 f2@5 ~@3", S: "[d2 ~ d2@2 ~ c2 ~ bb1@3 ~ bb1@4 ~]/2",
  T: "[f1@7 ~]/2", U: "db2 ~@3 db2 ~@3 db2@2 ~@2 db2@2 ~@2", V: "db2 ~ db2 ~ db2 ~ db2 ~",
  W: "[b1@10 ~@2 b1@2 e2@11 ~@7]/2", X: "gb1@3 ~ gb1@2 ~@2 gb1@2 ~@2 gb1@2 ~@2", Y: "gb1 ~ gb1 ~ gb1 ~ gb1 ~",
  Z: "gb1 ~@3 gb1@2 ~@2 gb1@2 ~@2 gb1@2 ~@2", AA: "gb1@2 ~@2 gb1@2 ~@2 gb1@2 ~@2 gb1 ~@3",
  AB: "[e2@10 ~@2 e2@2 a1@10 d2@3 b1@2 a1@2 ~]/2", AC: "[g1@23 d2@3 b1@3 g1@3]/2", AD: "[f1@22 f1@4 a1@3 c2@3]/2",
  AE: "e1@7 ~", AF: "e2", AG: "[f1@24 f2@2 ~ e2@2 ~ d2 ~]/2", AH: "[g1@19 ~@4 g1@3 b1@3 d2@3]/2", AI: "f1/2",
  AJ: "[e2@27 e1@3 e2@2]/2", AK: "eb2/2", AL: "[bb1@25 ~@7]/2", AM: "f1 ~ f1 ~ f1 ~ f1@2",
  AN: "f2@5 ~@3 f2@3 [a1,b1,c2,d2] f1@3 ~", // D7
  AO: "[f1@2 ~@2 f1 ~@3 f1@2 ~@2 c2@6 ~ c2 c2@4 ~@2 c2@12 g1@2 a1@2 c2@2 bb1@4]/3", AP: "f1 ~ f1 ~ f1 ~ d2 ~",
  AQ: "d2@2 ~ c2 ~ bb1@3", AR: "~ bb1@4 ~ f1@2", AS: "f2@5 ~@3 f2@3 [a1,b1,c2,d2] f1@2 ~@2", AT: "f1 ~ f1 ~ f1@2 f2@2",
  AU: "f1 ~ d2 ~ d2@2 ~ c2", AV: "[~@2 bb1@6 ~@2 bb1@8 ~@2 f1@4 f2@5 ~@3]/2",
})).s("gm_electric_bass_pick").gain(0.32).pan(0.4)

// bass · electric bass pick · "BASS" · soft notes
const bass_soft = note("<~@17 A B C ~@9 D E ~ B ~@34 C ~ F ~@9 A B C ~@3 F ~ E ~@3 B C ~ F ~ E ~ B C ~@2>".pickRestart({
  A: "~@3 f2 ~@12", B: "~@2 e2 ~@13", C: "~@14 e2 ~", D: "~@7 f2 ~@8", E: "~@6 e2 ~@9", F: "~@10 e2 ~@5",
})).s("gm_electric_bass_pick").gain(0.16).pan(0.4)

// chords · rock organ · "ORGAN"
const rock_organ = note(`<
  A@7 B@2 ~@8 C D E F ~@8 G H I D J@2 K@2 ~@12 L@2 M@2 N@2 O@2 L@2 M@2 N@2 ~@4 E P Q R ~@8 C D E S T@2 Q U H V W@2 D E P
  Q U H I D E F ~
>`.pickRestart({
  A: "[~@12 [f4,c5,f5,a5]@6 [f4,c5,eb5,g5]@8 [f4,bb4,eb5,g5]@4 [f4,bb4,f5]@6 [f4,a4,d5,f5]@5 ~@3 [f4,c5,f5,a5]@6 [f4,c5,eb5,g5]@8 [f4,bb4,eb5,g5]@4 [f4,bb4,f5]@6 [f4,a4,d5,f5]@5 ~@3 [f4,c5,f5,a5]@6 [f4,c5,eb5,g5]@8 [f4,bb4,eb5,g5]@4 [f4,bb4,f5]@6 [f4,a4,d5,f5]@5 ~@3 [f4,c5,f5,a5]@4]/7", // F Cm Eb Bb5 Dm F Cm Eb …
  B: "[~ [f4,c5,eb5,g5]@4 [f4,bb4,eb5,g5]@2 [f4,bb4,f5]@3 [f4,a4,d5,f5]@2 ~@4]/2", // Cm Eb Bb5 Dm
  C: "~@4 [d5,f5,bb5]@4 [c5,f5,a5]@4 ~@2 d6 bb5", D: "f5 bb5 d6 bb5 e6 c6 g5 c6 e6 c6 f6 c6 a5 c6 f6 ~",
  E: "[d5,f5,bb5]@4 [c5,f5,a5]@4 ~@2 d6 bb5 f5 bb5 d6 bb5", F: "e6 c6 g5 c6 e6 c6 f6 c6 a5 c6 f6 ~@5",
  G: "~@2 [d5,f5,bb5] [c5,f5,a5]", H: "~@2 d6 bb5 f5 bb5 d6 bb5 e6 c6 g5 c6 e6 c6 f6 c6",
  I: "a5 c6 f6 ~ [d5,f5,bb5]@4 [c5,f5,a5]@4 ~@2 d6 bb5", // Bb F
  J: "[[d4,a4,d5,f5,a5]@3 ~ [d4,a4,d5,f5,a5]@4 ~@2 [c4,g4,c5,e5,g5]@2 ~@2 [bb3,f4,bb4,d5,f5]@16 ~@2]/2", // Dm C Bb
  K: "[[f4,c5,f5,a5]@6 [f4,c5,eb5,g5]@8 [f4,bb4,eb5,g5]@4 [f4,bb4,f5]@6 [f4,a4,d5,f5]@5 ~@3]/2", L: "[g5,d6,g6]/2",
  M: "[f5,c6,f6]/2", N: "[[e5,e6], c6 ~@31]/2", O: "[[f5,f6]@22 ~@2 [f5,f6] ~@2 [e5,e6] ~ [d5,d6] ~@2, c6 ~@31]/2",
  P: "e6 c6 g5 c6 e6 c6 f6 c6 a5 c6 f6 ~ [d5,f5,bb5]@4", Q: "[c5,f5,a5]@4 ~@2 d6 bb5 f5 bb5 d6 bb5 e6 c6 g5 c6",
  R: "e6 c6 f6 c6 a5 c6 f6 ~@9", S: "e6 c6 g5 c6 e6 c6 f6 c6 a5 c6 f6 ~ [d4,a4,d5,f5,a5]@3 ~",
  T: "[[d4,a4,d5,f5,a5]@2 ~ [c4,g4,c5,e5,g5] ~ [bb3,f4,bb4,d5,f5]@8 ~ [d5,f5,bb5]@2]/2", // Dm C Bb
  U: "e6 c6 f6 c6 a5 c6 f6 ~ [d5,f5,bb5]@4 [c5,f5,a5]@4", // Bb F
  V: "a5 c6 f6 ~ [d4,a4,d5,f5,a5]@3 ~ [d4,a4,d5,f5,a5]@4 ~@2 [c4,g4,c5,e5,g5]@2", // Dm C
  W: "[~@2 [bb3,f4,bb4,d5,f5]@16 ~@2 [d5,f5,bb5]@4 [c5,f5,a5]@4 ~@2 d6 bb5]/2", // Bb F
})).s("gm_rock_organ").gain(0.54).pan(0.6)

// chords · rock organ · "ORGAN" · soft notes
const rock_organ_soft = note("<~@37 A@2 B@2 C@2 D@2 E@2 F@2 ~@14 G@2 H@2 ~@35>".pickRestart({
  A: "[[db4,b4,eb5,gb5]@2 ~@2 [db4,db5,f5,ab5]@2 ~@2 [db4,db5,gb5,bb5]@2 ~@2 [db4,b4,eb5,gb5]@2 [db4,db5,f5,ab5]@4 [db4,b4,eb5,gb5]@2 [db4,b4,eb5,gb5]@3 ~ [db4,b4,eb5,gb5]@2 [db4,b4,eb5,gb5]@3 ~ [db4,db5,f5,ab5]@2]/2", // B Db Gb B Db B Db
  B: "[[b4,eb5,gb5]@2 ~@2 [db4,db5,f5,ab5]@2 ~@2 [db4,db5,gb5,bb5]@2 ~@2 [db4,b4,eb5,gb5]@2 [db4,db5,f5,ab5]@4 [db4,db5,gb5,bb5]@3 ~ db4@2 [db4,b4,eb5,gb5]@2 ~ [db4,db5,f5,ab5]@2 [db4,db5,gb5,bb5]@2 ~, db4 ~@31]/2", // B Db Gb B Db Gb B Db …
  C: "[[b3,b4,eb5,gb5]@5 ~ [b3,b4,eb5,gb5] [e4,b4,e5,ab5]@5 ~@4]/2", // B E
  D: "[[gb4,e5,ab5,b5]@3 ~ [gb4,gb5,bb5,db6]@3 ~ [gb4,gb5,b5,eb6]@3 ~ [gb4,e5,ab5,b5]@2 [gb4,gb5,bb5,db6]@4 [gb4,e5,ab5,b5]@2 [gb4,e5,ab5,b5]@4 [gb4,e5,ab5,b5]@2 [gb4,e5,ab5,b5]@4 [gb4,gb5,bb5,db6]@2]/2", // E Gb B E Gb E Gb
  E: "[[e5,ab5,b5]@3 ~ [gb4,gb5,bb5,db6]@3 ~ [gb4,gb5,b5,eb6]@3 ~ [gb4,e5,ab5,b5]@2 [gb4,gb5,bb5,db6]@4 [gb4,gb5,b5,eb6]@6 [gb4,e5,ab5,b5]@3 [gb4,gb5,bb5,db6]@2 [gb4,gb5,b5,eb6]@3, gb4 ~@31]/2", // E Gb B E Gb B E Gb …
  F: "[[e4,e5,ab5]@10 ~@2 [e4,e5,ab5,b5]@2 [a4,e5,a5,db6]@10 [eb5,eb6]@3 [b4,b5]@2 [a4,a5]@3, b5 ~@31]/2", // E A Eb B A
  G: "[[eb5,bb5,eb6]@3 [eb5,bb5,eb6]@3 [eb5,bb5,eb6]@10]/2", // Eb5
  H: "[[bb4,d5,f5]@6 [bb4,d5,f5]@6 [bb4,d5,f5]@6 [bb4,d5,f5] ~ [bb4,d5,f5] ~ [bb4,d5,f5] ~ [bb4,d5,f5]@4 [c5,e5,g5]@4]/2", // Bb C
})).s("gm_rock_organ").gain(0.3).pan(0.6)

// chords · piano
const piano = note(`<
  ~@8 A B@2 C D E@2 F G H ~ I ~ J K L@2 B@2 C M N ~ O ~@31 P Q R S I T U A B@2 C D E@2 F G H ~ I ~@2 T U V ~@3 O ~ I T U
  V ~ O ~ I ~@2
>`.pickRestart({
  A: "~@3 [c3,g3,c4,e4]", // C
  B: "[~@2 [c3,a3,c4,f4] ~ [c3,a3,c4,f4]@5 ~ [bb3,c4,g4]@3 ~ [a3,c4,f4]@4 [g3,c4,e4]@4 g2@2 a2@2 c3@2 [bb2,f3,bb3,d4]@4]/2", // F C7 F C Bb
  C: "~@2 [bb2,f3,bb3,d4] ~ [a2,f3,a3,c4]@4 ~@2 [g2,f3,bb3,d4]@4 f2@2", // Bb F Gm7
  D: "[g3,c4] a3 f3@2 [c4,a4]@2 g4 f4 [c3,g3,c4,e4]@5 ~ [c3,a3,c4,f4] ~", // C5 F C F
  E: "[[c3,a3,c4,f4]@5 ~ [bb3,c4,g4]@3 ~ [a3,c4,f4]@4 [g3,c4,e4]@4 g2@2 a2@2 c3@2 [bb2,f3,bb3,d4]@5 ~ [bb2,f3,bb3,d4] ~]/2", // F C7 F C Bb
  F: "[a2,f3,a3,c4]@2 ~ [g2,f3,bb3,d4]@2 f2 a3 f2", // F Gm7
  G: "[c4,f4,a4]@4 [db4,a4] ~ [db4,a4] ~ [db4,a4] ~ [d4,a4] ~@3 [c4,g4,c5,e5,g5] ~", // F Gbm D5 C
  H: "[c4,g4,c5,e5,g5] ~@3 [d5,f5,bb5]@4 [c5,f5,a5]@4 ~@4", I: "[d5,f5,bb5] [c5,f5,a5] ~@2",
  J: "[c3,g3,c4,e4]@5 ~ [c3,a3,c4,f4] ~ [c3,a3,c4,f4]@5 ~ [bb3,c4,g4]@2", K: "~ [a3,c4,f4]@2 [g3,c4,e4]@2 g2 a2 c3",
  L: "[[bb2,f3,bb3,d4]@5 ~ [bb2,f3,bb3,d4] ~ [a2,f3,a3,c4]@4 ~@2 [g2,f3,bb3,d4]@4 f2@2 [g3,c4] a3 f3@2 [c4,a4]@2 g4 f4 [c3,g3,c4,e4]@4]/2", // Bb F Gm7 C5 F C
  M: "a3@2 f2@2 [c4,f4,a4]@4 [db4,a4] ~ [db4,a4] ~ [db4,a4] ~ [d4,a4] ~", // F Gbm D5
  N: "~@2 [c4,g4,c5,e5,g5] ~ [c4,g4,c5,e5,g5] ~@3 [d5,f5,bb5]@4 [c5,f5,a5]@4", O: "~ [d5,f5,bb5] [c5,f5,a5] ~",
  P: "f4 ~ eb4 ~ bb3 ~ f4 ~ eb4 ~ bb3 ~ f4 ~ eb4 ~", Q: "bb3 ~ f4 ~ eb4 ~ bb3@4 ~@2 bb3@4",
  R: "f4 ~ d4 ~ bb3 ~ f4 ~ d4 ~ bb3 ~ f4 ~ d4 ~",
  S: "bb3 ~ [d4,f4,bb4] ~ [d4,f4,bb4] ~ [d4,f4,bb4] ~ [d4,f4,bb4]@4 [c4,e4,g4]@4", T: "~@3 [d5,f5,bb5]",
  U: "[c5,f5,a5] ~@3", V: "~@2 [d5,f5,bb5] [c5,f5,a5]",
})).s("gm_piano").gain(0.64).pan(0.3)

// chords · cello · "CELLOS"
const cello = note("<~@37 A@2 B@2 C@2 D@2 E@2 F@2 ~@25 G ~@27>".pickRestart({
  A: "[[db4,b4,eb5,gb5]@2 ~@2 [db4,db5,f5,ab5]@2 ~@2 [db4,db5,gb5,bb5]@2 ~@2 [db4,b4,eb5,gb5]@2 [db4,db5,f5,ab5]@4 [db4,b4,eb5,gb5]@2 [db4,b4,eb5,gb5]@3 ~ [db4,b4,eb5,gb5]@2 [db4,b4,eb5,gb5]@3 ~ [db4,db5,f5,ab5]@2]/2", // B Db Gb B Db B Db
  B: "[[b4,eb5,gb5]@2 ~@2 [db4,db5,f5,ab5]@2 ~@2 [db4,db5,gb5,bb5]@2 ~@2 [db4,b4,eb5,gb5]@2 [db4,db5,f5,ab5]@4 [db4,db5,gb5,bb5]@3 ~ db4@2 [db4,b4,eb5,gb5]@2 ~ [db4,db5,f5,ab5]@2 [db4,db5,gb5,bb5]@2 ~, db4 ~@31]/2", // B Db Gb B Db Gb B Db …
  C: "[[b3,b4,eb5,gb5]@5 ~ [b3,b4,eb5,gb5] [e4,b4,e5,ab5]@5 ~@4]/2", // B E
  D: "[[gb4,e5,ab5,b5]@3 ~ [gb4,gb5,bb5,db6]@3 ~ [gb4,gb5,b5,eb6]@3 ~ [gb4,e5,ab5,b5]@2 [gb4,gb5,bb5,db6]@4 [gb4,e5,ab5,b5]@2 [gb4,e5,ab5,b5]@4 [gb4,e5,ab5,b5]@2 [gb4,e5,ab5,b5]@4 [gb4,gb5,bb5,db6]@2]/2", // E Gb B E Gb E Gb
  E: "[[e5,ab5,b5]@3 ~ [gb4,gb5,bb5,db6]@3 ~ [gb4,gb5,b5,eb6]@3 ~ [gb4,e5,ab5,b5]@2 [gb4,gb5,bb5,db6]@4 [gb4,gb5,b5,eb6]@6 [gb4,e5,ab5,b5]@2 ~ [gb4,gb5,bb5,db6]@2 [gb4,gb5,b5,eb6]@2 ~, gb4 ~@31]/2", // E Gb B E Gb B E Gb …
  F: "[[e4,e5,ab5,b5]@10 ~@2 [e4,e5,ab5,b5]@2 [a4,e5,a5,db6]@10 [eb5,eb6]@2 ~ [b4,b5]@2 [a4,a5]@2 ~]/2", // E A Eb B A
  G: "~ [c5,a5] ~@2", // F
})).s("gm_cello").gain(0.4).pan(0)

// chords · violin · "VIOLINS" · Abm A E5 Ebm E F
const violin = note("<~@42 [~@10 [ab5,b5] [a5,db6] [b5,e6] [eb6,gb6] [e6,ab6]@2] ~@31 [~ [c5,a5] ~@2] ~@27>")
  .s("gm_violin").gain(0.36).pan(0.6)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note(`<
  ~@37 A@2 B@2 C@2 D@2 E@2 F@2 G@2 H I J@2 K L M@2 N O P Q ~@7 R S T U V W X Y@2 ~@23
>`.pickRestart({
  A: "[[db4,b4,eb5,gb5]@2 ~@2 [db4,db5,f5,ab5]@2 ~@2 [db4,db5,gb5,bb5]@2 ~@2 [db4,b4,eb5,gb5]@2 [db4,db5,f5,ab5]@4 [db4,b4,eb5,gb5]@2 [db4,b4,eb5,gb5]@3 ~ [db4,b4,eb5,gb5]@2 [db4,b4,eb5,gb5]@3 ~ [db4,db5,f5,ab5]@2]/2", // B Db Gb B Db B Db
  B: "[[b4,eb5,gb5]@2 ~@2 [db4,db5,f5,ab5]@2 ~@2 [db4,db5,gb5,bb5]@2 ~@2 [db4,b4,eb5,gb5]@2 [db4,db5,f5,ab5]@4 [db4,db5,gb5,bb5]@3 ~ db4@2 [db4,b4,eb5,gb5]@2 ~ [db4,db5,f5,ab5]@2 [db4,db5,gb5,bb5]@2 ~, db4 ~@31]/2", // B Db Gb B Db Gb B Db …
  C: "[[b3,b4,eb5,gb5]@5 ~ [b3,b4,eb5,gb5] [e4,b4,e5,ab5]@5 ~@4]/2", // B E
  D: "[[gb4,e5,ab5,b5]@3 ~ [gb4,gb5,bb5,db6]@3 ~ [gb4,gb5,b5,eb6]@3 ~ [gb4,e5,ab5,b5]@2 [gb4,gb5,bb5,db6]@4 [gb4,e5,ab5,b5]@2 [gb4,e5,ab5,b5]@4 [gb4,e5,ab5,b5]@2 [gb4,e5,ab5,b5]@4 [gb4,gb5,bb5,db6]@2]/2", // E Gb B E Gb E Gb
  E: "[[e5,ab5,b5]@3 ~ [gb4,gb5,bb5,db6]@3 ~ [gb4,gb5,b5,eb6]@3 ~ [gb4,e5,ab5,b5]@2 [gb4,gb5,bb5,db6]@4 [gb4,gb5,b5,eb6]@6 [gb4,e5,ab5,b5]@2 ~ [gb4,gb5,bb5,db6]@2 [gb4,gb5,b5,eb6]@2 ~, gb4 ~@31]/2", // E Gb B E Gb B E Gb …
  F: "[[e4,e5,ab5,b5]@10 ~@2 [e4,e5,ab5,b5]@2 [a4,e5,a5,db6]@10 [eb5,eb6]@2 ~ [b4,b5]@2 [a4,a5]@2 ~]/2", G: "b4/2",
  H: "b4 ~@15", I: "a4", J: "g4/2", K: "b4", L: "a4 ~",
  M: "[g5 d5 b4 g4 d4 b3 g3@7 b3 d4 g4@4 ~@4 d4 g4 b4 ~ c5 ~ d5 ~@2]/2", N: "d5 ~@2 c5 ~ b4@3 b4 ~@2 a4@4 ~", O: "f4",
  P: "c5 ~@2 b4 ~ a4 ~@2 b4 ~@2 a4 ~ g4 ~@2", Q: "e4@3 ~ e4@4", R: "~@3 [g4,c5,e5]",
  S: "~@2 [a4,c5,f5] ~ [a4,c5,f5]@4 ~@2 [bb4,c5,g5]@2 ~@2 [a4,c5,f5]@2", // F C7 F
  T: "~ [g4,c5,e5] ~ [e4,g4,c5]@2 ~ [f4,bb4,d5]@2", U: "~@2 [f4,bb4,c5] ~ [f4,a4,c5]@6 [g4,b4,d5]@4 [f4,a4,c5]@2",
  V: "[a4,c5,f5]@4 ~@4 [g4,e5]@4 ~@2 [a4,c5,e5] ~", W: "[a4,c5,e5]@2 ~ [bb4,c5,g5] ~ [a4,f5] ~ [g4,c5,e5], ~@10 c5 ~@5",
  X: "~@2 [e4,g4,c5]@4 ~@2 [f4,bb4,d5]@4 ~@2 [f4,bb4,c5] ~", // C Bb Fsus4
  Y: "[[f4,a4,c5]@4 ~@2 [g4,bb4,d5]@4 [f4,a4,c5]@4 [a4,c5,f5]@5 ~@13]/2", // F Gm F
})).s("gm_string_ensemble_1").gain(0.48).pan(1)

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

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@16 [~@2 x!3 ~@3] ~@11 [~@4 x!3 ~] ~@49 [~@2 x!3 ~@3] ~@23>").gain(0.07)

// drums · rim
const rim = s("rim").struct("<~@9 [x!2]!3 [x ~@2 x] [~ x ~ x]!3 ~@86>").gain(0.36)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@8 A ~@7 B ~@4 C@3 D E@3 F ~@42 E@3 G C@3 B ~@23>".pickRestart({
  A: "~ x", B: "~@2 x!3 ~@3", C: "~ x ~ x", D: "~@4 x ~@3 x!3 ~@5", E: "x!2", F: "x ~@3 x!3 ~",
  G: "x ~@3 x!3 ~@5 x ~@3",
})).gain(0.36)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@2 A ~ A B C ~ D ~@25 E ~ F ~@5 A ~@5 G ~@6 H I ~@5 J ~@21 K ~@4 L M ~@11
>`.pickRestart({
  A: "~@3 x!2 ~@3", B: "~@7 x", C: "x", D: "~ x ~@2", E: "~@11 x ~ x ~@2", F: "~@2 x!2 ~@12", G: "~@6 x ~@4 x ~ x ~@2",
  H: "~@3 x ~@2 x ~", I: "~@13 x ~@2", J: "~@3 x", K: "~@7 x ~ x ~@6", L: "~@15 x", M: "~ x ~@14",
})).gain(0.5)

// drums · hihat
const hihat = s("hh").struct("<~@8 A B@3 C D@2 E ~@5 D@3 F B@3 G ~@27 G ~@13 A B@3 H D@2 E ~@24>".pickRestart({
  A: "~@3 x", B: "x!3 ~ x!3 ~", C: "x!3 ~ x ~ x!2", D: "x ~ x!3 ~ x!2", E: "x ~ x!3 ~ x ~", F: "x ~ x!2 ~@2 x ~",
  G: "x", H: "x!2 ~@2 x ~ x!2",
})).gain(0.36)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@2 A ~ A ~ A ~ B ~@25 C ~ D ~@11 E ~@6 F G ~@5 H ~ I ~ J ~@17 K ~@4 L ~@12
>`.pickRestart({
  A: "~ x!2 ~@5", B: "x!2 ~@6", C: "~@9 x ~@6", D: "~ x ~@2", E: "~ x", F: "~@3 x!2 ~@3 x ~ x ~@5",
  G: "~@6 x ~ x ~@2 x ~ x ~@2", H: "~ x ~@2 x!2 ~@2", I: "~@3 x ~ x!2 ~", J: "~ x ~ x!2 ~@3", K: "~@5 x ~@10",
  L: "~@13 x ~@2",
})).gain(0.5)

// drums · open hat
const open_hat = s("oh").struct("<~@55 [~@7 x] ~@46>").gain(0.57)

// drums · high tom
const high_tom = s("ht").struct("<~ A ~ A B ~ C A ~@47 D E ~@7 F ~ B ~@35>".pickRestart({
  A: "~@7 x", B: "x", C: "~@3 x!2 ~@3", D: "x!2 ~@6", E: "~@8 x ~@2 x ~@4", F: "~ x ~@2",
})).gain(0.5)

// drums · crash
const crash = s("cr").struct(`<
// … 21 more lines

More by Kansas