Strudelify

Killer

Seal

KeyB♭ minorTempo126 bpm
0:00/0:00
// Killer — Seal
// 126 bpm, 4/4, key A# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: Full arrangement: all 129 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(126/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 · synth strings 2 · "Synth String 2"
const synth_strings_2 = note(`<
  A B C D E ~ F ~ G B C H ~@14 I J ~@4 K L K M ~@6 I J N L O P K L K Q R S T U V W T X Y Z AA AB AC AD AE AF ~@4 AG AH
  AI AJ AK AL AM ~@11 AN AO AP ~@4 AQ AR AS AT ~@4 AQ AR AU AV ~ AW AX C AY AW AX C AY AW AX C AY AZ ~@3 BA BB@2
>`.pickRestart({
  A: "~@4 ab5 ~ a5@2 gb5@3 ~ f5@4", B: "f5 ~ eb5@4 ~@2 db5 ~ eb5 ~ eb5 ~@3", C: "bb3!6 ab3 bb3 db4 bb3!3 ab3 bb3!3",
  D: "ab3 bb3!3 ab3 bb3 db4 eb4 bb3 ~@7", E: "bb3!2 ~ bb3 ~ bb3 ~ bb3 ~@8", F: "bb4!2 ~ bb4 ~ bb4 ~ bb4 ~@8",
  G: "ab5@4 ~@2 a5@2 gb5@3 f5@5", H: "ab3 bb3!3 ab3 bb3 db4 eb4 ~@8", I: "~@6 db5@2 ~@4 bb4 ~ bb4@2, ~ c5",
  J: "bb4 ~ bb4@2 ab4@4 ab4@2 bb4@2 bb4@4, c5@5 ~@5 ab4 ~@5",
  K: "[bb4,db5,f5] ~@3 [bb4,db5,f5] ~@2 [bb4,db5,gb5] ~@2 [bb4,db5,gb5] ~ [bb4,db5,gb5]@3 ~", // Bbm Gb
  L: "[ab4,c5,eb5,f5] ~ [ab4,c5,eb5,f5] ~ [ab4,c5,eb5,f5]@2 ~ [ab4,c5,eb5,f5] ~@2 [ab4,c5,eb5,f5] ~ [ab4,c5,eb5] ~ [ab4,c5,eb5] ~", // Fm7 Ab
  M: "[bb4,bb5] ~ [bb4,bb5]!2 ~ [bb4,bb5]!2 ~@9", // Bb
  N: "[bb4,db5,f5] ~@3 [db5,f5] ~@2 [db5,gb5] ~@2 [bb4,db5,gb5] ~ [bb4,db5,gb5]@3 ~, ~@4 bb4@3 bb4@3 ~@6", // Bbm Db Gb5 Gb
  O: "[bb4,db5,f5] ~@3 [bb4,db5,f5] ~@2 [bb4,db5,gb5] ~ [bb4,db5,gb5] ~@2 [bb4,db5,gb5]@2 ~ [ab4,c5,eb5,f5]", // Bbm Gb Fm7
  P: "~@2 [ab4,c5,eb5,f5] ~ [ab4,c5,eb5,f5]@2 ~ [ab4,c5,eb5,f5] ~@2 [ab4,c5,eb5,f5] ~ [ab4,c5,eb5] ~ [ab4,c5,eb5] ~", // Fm7 Ab
  Q: "~@8 f5@3 ~ eb5@3 ~", R: "[bb4,db5]@15 f5", S: "[bb4,db5]@4 ~@4 bb4@3 ~ db5@3 ~, ~ eb5@2 ~", T: "[ab4,c5]",
  U: "[ab4,c5]@5 ~@4 db5 ~@2 [c5,f5]@3 ~, ~@8 ab4@3 ~@5", V: "[bb4,db5]@11 ~@5, f5@5 ~@11", W: "~@8 eb5@2 db5@4 bb4 ~",
  X: "[ab4,c5]@5 ~@7 [c5,f5]@3 ~", Y: "f5@5 ~@3 f5 ~ f5!3 gb5 ~ f5, [bb4,db5]",
  Z: "f5 ~ f5 ~@5 bb4@3 ~ db5@3 ~, [bb4,db5] eb5@2 ~", AA: "~@8 f5!2 ~ f5!2 gb5 ~ f5, [ab4,c5]",
  AB: "f5 eb5 ~ eb5!2 db5 ~ eb5!2 db5 ~ f5 [c5,f5]@3 ~, [ab4,c5]@5 ~@3 ab4@3 ~@5", // F5 Ab
  AC: "f5@5 ~@3 f5 ~ f5!3 gb5 ~ f5, [bb4,db5]@11 ~@5", AD: "f5 ~ f5@2 eb5@4 eb5@2 db5@4 bb4 ~",
  AE: "~@8 f5!2 ~ f5!3 ~ f5, [ab4,c5]", // Ab
  AF: "f5 eb5 ~ eb5!2 db5@2 ~ [ab4,c5,eb5]@3 ~ [ab4,bb4,db5]@3 ~, [ab4,c5]@5 ~@11", AG: "bb4 ~ db5 ~ f5@8 ~@4",
  AH: "bb4 ~ eb5 ~ f5@3 ~ bb4 ~ gb5 ~ f5@3 ~", AI: "bb4 ~ f5 ~ eb5@5 ~@3 gb5 ~ f5 ~",
  AJ: "bb4 ~ f5 ~ eb5@5 ~@3 gb5 ~ f5@2", AK: "~@12 [bb4,eb5,g5]@3 ~",
  AL: "[ab4,db5,f5] ~ ab4 ~ bb4 ~ ab4 ~ bb4 ~ ab4 ~ bb4 ~ db5 ~", AM: "bb4@3 ~@5 [db5,f5,bb5]@5 ~@3",
  AN: "db5 ~ db5 ~ eb5 ~ db5 ~ eb5 ~ db5 ~ f5 ~ db5@2", AO: "db5@3 ~@3 bb4 ~ eb5@2 ~ db5 bb4 ~ db5@2", AP: "bb4@5 ~@11",
  AQ: "~@14 [f4,f5] ~", AR: "[bb4,bb5] ~ [bb4,bb5]@3 ~ [bb4,bb5]@6 ~@2 [db5,f5,bb5]@2",
  AS: "[db5,f5,bb5]@3 ~ [g4,bb4,eb5] ~ [f4,ab4,db5]@2 [f4,ab4,db5] ~ [db4,f4,bb4] ~ [db4,f4,bb4] ~ ab4 ~", // Bbm Eb Db Bbm
  AT: "bb4@4 db5@2 bb4@2 bb4@2 db5@2 bb4@3 ~, [db4,f4]@11 ~@5", // Db
  AU: "[db5,f5,bb5]@3 ~ [g4,bb4,eb5] ~ [f4,ab4,db5]@3 ~ [db4,f4,bb4] ~ [db4,f4,bb4] ~ ab4 ~", // Bbm Eb Db Bbm
  AV: "bb4@2 db5 bb4!2 db5 ~@2, [db4,f4]@11 ~@5", AW: "ab5@4 ~@2 gb5@2 gb5@3 ~ f5@4",
  AX: "f5 ~ eb5@4 ~@2 db5 ~ eb5 ~ f5 ~@3", AY: "ab3 bb3!3 ab3 bb3 db4 eb4 bb3 ~ [eb4,g4] ~ [db4,f4] ~@3",
  AZ: "[db4,f4,bb4]@11 ~@5", BA: "~@6 [bb4,db5,f5]@5 [gb4,bb4,db5]@4 ~",
  BB: "[~ [f4,ab4,c5]@4 ~@2 [gb4,bb4,db5,f5]@15 ~@10]/2", // Fm Gbmaj7
})).s("gm_synth_strings_2").gain(0.44)

// chords · percussive organ
const percussive_organ = note(`<
  A B C D E ~ F ~ G B C H I J K L M N O P Q R O S M T U V ~@4 W X W Y Q R O S M T U V Z X AA AB W X W AC ~@8 AD AE AF AG
  AH AI AJ AK ~@4 AL AM AN AO AP AQ AR AS AT AU AV AW AX AY AZ BA BB BC ~@28 BD BE ~@9
>`.pickRestart({
  A: "~@4 ab5 ~ a5@2 gb5@3 ~ f5@4", B: "f5 ~ eb5@4 ~@2 db5 ~ eb5 ~ eb5 ~@3", C: "bb3!6 ab3 bb3 db4 bb3!3 ab3 bb3!3",
  D: "ab3 bb3!3 ab3 bb3 db4 eb4 bb3 ~@7", E: "bb3!2 ~ bb3 ~ bb3 ~ bb3 ~@8", F: "bb4!2 ~ bb4 ~ bb4 ~ bb4 ~@8",
  G: "ab5@4 ~@2 a5@2 gb5@3 f5@5", H: "ab3 bb3!3 ab3 bb3 db4 eb4 [bb4,f5]@3 ~ eb5@3 ~",
  I: "[f4,d5]@5 ~@3 [f4,bb4]@3 ~ bb4@2 [bb4,eb5,bb5]@2", J: "bb5 ~ f5@4 ~@2 f4@4 eb5@3 ~, [bb4,eb5]@5 ~@3 d5@3 ~@5",
  K: "[f4,d5]@5 ~@3 [f4,db5]@3 ~ bb4 ~ [f4,bb4,eb5]@2", // Dm Db Ebsus2
  L: "eb5 ~ d5 ~ f5 ~@3 f5@3 ~ eb5@2 f5 ~, f4@11 ~@5, bb4@6 bb4@5 ~@5",
  M: "[f4,d5]@5 ~@3 [f4,db5]@3 ~ bb4 ~ [bb4,eb5,bb5]@2", // Dm Db Eb5
  N: "bb5 ~ f5@3 ~ bb4 ~ eb5 ~ d5 ~ eb5 ~ eb5 ~, [bb4,eb5]@4 ~@4 f4@5 ~@3", // Eb5
  O: "[f4,d5]@5 ~@3 [f4,db5]@3 ~ bb4 ~ [ab4,eb5]@2", P: "eb5 ~ d5@3 ~ f5@2 f5@3 ~ eb5@3 ~, ab4@11 ~@5",
  Q: "[f4,db5]@4 [db5,bb5]@2 [c5,ab5]@2 [c5,ab5]@3 ~ bb4 ~ [bb4,eb5,bb5]@2", // Db Gb Fm Eb5
  R: "[bb4,eb5]@4 f5@3 ~ f4@4 eb5@3 ~, bb5@3 ~@5 d5@3 ~@5", S: "eb5 ~ d5 ~ f5@3 ~ f5@3 ~ eb5 ~ f5 ~, ab4@11 ~@5",
  T: "bb5 ~ f5@3 ~ bb4 ~ f4@4 eb5@3 ~, [bb4,eb5]@4 ~@4 d5@3 ~@5", U: "~@6 db5@2 ~@4 bb4 ~ bb4@2, ~ c5",
  V: "bb4 ~ bb4@2 ab4@4 ab4@2 bb4@2 bb4@4, c5@5 ~@5 ab4 ~@5",
  W: "[bb4,db5,f5] ~@3 [bb4,db5,f5] ~@2 [bb4,db5,gb5] ~@2 [bb4,db5,gb5] ~ [bb4,db5,gb5]@3 ~", // Bbm Gb
  X: "[ab4,c5,eb5,f5] ~ [ab4,c5,eb5,f5] ~ [ab4,c5,eb5,f5]@2 ~ [ab4,c5,eb5,f5] ~@2 [ab4,c5,eb5,f5] ~ [ab4,c5,eb5] ~ [ab4,c5,eb5] ~", // Fm7 Ab
  Y: "[bb4,bb5] ~ [bb4,bb5]!2 ~ [bb4,bb5]!2 ~ f5@3 ~ eb5@3 ~", // Bb
  Z: "[bb4,db5,f5] ~@3 [db5,f5] ~@2 [db5,gb5] ~@2 [bb4,db5,gb5] ~ [bb4,db5,gb5]@3 ~, ~@4 bb4@3 bb4@3 ~@6", // Bbm Db Gb5 Gb
  AA: "[bb4,db5,f5] ~@3 [bb4,db5,f5] ~@2 [bb4,db5,gb5] ~ [bb4,db5,gb5] ~@2 [bb4,db5,gb5]@2 ~ [ab4,c5,eb5,f5]", // Bbm Gb Fm7
  AB: "~@2 [ab4,c5,eb5,f5] ~ [ab4,c5,eb5,f5]@2 ~ [ab4,c5,eb5,f5] ~@2 [ab4,c5,eb5,f5] ~ [ab4,c5,eb5] ~ [ab4,c5,eb5] ~", // Fm7 Ab
  AC: "[bb4,bb5] ~ [bb4,bb5]!2 ~ [bb4,bb5]!2 ~@9", AD: "f5@5 ~@3 f5 ~ f5!3 gb5 ~ f5, [bb4,db5]",
  AE: "f5 ~ f5 ~@5 bb4@3 ~ db5@3 ~, [bb4,db5] eb5@2 ~", AF: "~@8 f5!2 ~ f5!2 gb5 ~ f5, [ab4,c5]",
  AG: "f5 eb5 ~ eb5!2 db5 ~ eb5!2 db5 ~ f5 [c5,f5]@3 ~, [ab4,c5]@5 ~@3 ab4@3 ~@5", // F5 Ab
  AH: "f5@5 ~@3 f5 ~ f5!3 gb5 ~ f5, [bb4,db5]@11 ~@5", AI: "f5 ~ f5@2 eb5@4 eb5@2 db5@4 bb4 ~",
  AJ: "~@8 f5!2 ~ f5!3 ~ f5, [ab4,c5]", // Ab
  AK: "f5 eb5 ~ eb5!2 db5@2 ~ [ab4,c5,eb5]@3 ~ [ab4,bb4,db5]@3 ~, [ab4,c5]@5 ~@11", AL: "bb4 ~ db5 ~ f5@8 ~@4",
  AM: "bb4 ~ eb5 ~ f5@3 ~ bb4 ~ gb5 ~ f5@3 ~", AN: "bb4 ~ f5 ~ eb5@5 ~@3 gb5 ~ f5@2", AO: "f5@11 ~@5",
  AP: "~@12 [bb4,eb5,g5]@3 ~", AQ: "[ab4,db5,f5] ~ ab4 ~ bb4 ~ ab4 ~ bb4 ~ ab4 ~ bb4 ~ db5 ~",
  AR: "bb4@3 ~@5 [db5,f5,bb5]@5 ~@3", AS: "~@2 ab4 ~ bb4 ~ ab4 ~ bb4 ~ ab4 ~ bb4 ~ eb5@2",
  AT: "eb5 ~ db5@4 ~@4 bb4@3 ~ bb4 ~", AU: "bb4@3 ~ [bb4,db5,f5]!2 ~@4 ab4 ~ bb4@3 ~",
  AV: "db5 ~ eb5 ~ f5 ~ db5@2 db5@3 ~ [bb4,eb5,g5]@3 ~", AW: "[ab4,db5,f5] ~ ab4 ~ bb4@3 ~ db5@2 bb4 ~ bb4 ~ bb4@2",
  AX: "bb4@3 ~ [bb4,db5,f5]!2 ~@6 [bb4,eb5,g5]@3 ~", AY: "[ab4,db5,f5]@3 ~ [bb4,db5,f5]!2 ~@6 [bb4,eb5,g5] ~ bb4 ~",
  AZ: "f5 ~ db5 ~ eb5 ~ db5 ~ eb5@3 ~ bb4 ~ db5@2", BA: "db5 ~ eb5@3 ~ f5@2 f5@3 ~@3 db5 ~",
  BB: "bb4@3 ~ bb4 ~ db5 ~ bb4@3 ~ bb4 ~ db5@2", BC: "db5 ~ eb5 ~ f5 ~ db5@2 db5 ~ bb4@4 ~@2",
  BD: "ab5@4 ~@2 gb5@2 gb5@3 ~ f5@4", BE: "f5 ~ eb5@4 ~@2 db5 ~ eb5 ~ f5 ~@3",
})).s("gm_percussive_organ").gain(0.18)

// chords · trumpet
const trumpet = note(`<
  ~@52 A B C D A E F G H I J K L M N O ~@4 P Q R S ~@2 T ~@2 U V W X Y ~@2 Z AA ~@2 AB AC AD AE AF AG AH AI AJ ~@2 AE
  ~@2 AH AK AL ~@3 AM AN ~@2 AM AN ~@2 AM AN AO ~@6
>`.pickRestart({
  A: "~@8 f4 ~ f4!3 gb4 ~ f4", B: "f4 ~ f4 ~ eb4@8 ~@4", C: "~@8 f4!2 ~ f4!2 gb4 ~ f4",
  D: "f4 eb4 ~ eb4!2 db4 ~ eb4!2 db4 ~ f4 f4@3 ~", E: "f4 ~ f4@2 eb4@4 ~@8", F: "~@8 f4!2 ~ f4!3 ~ f4",
  G: "f4 eb4 ~ eb4!2 db4 ~ eb4!2 db4 ~ f4 [c4,f4]@3 ~", H: "f4@5 ~@3 f4 ~ f4!3 gb4 ~ f4, [bb3,db4]",
  I: "f4 ~ f4 ~@5 bb3@3 ~ db4@3 ~, [bb3,db4] eb4@2 ~", J: "~@8 f4!2 ~ f4!2 gb4 ~ f4, [ab3,c4]",
  K: "f4 eb4 ~ eb4!2 db4 ~ eb4!2 db4 ~ f4 [c4,f4]@3 ~, [ab3,c4]@5 ~@3 ab3@3 ~@5", // F5 Ab
  L: "f4@5 ~@3 f4 ~ f4!3 gb4 ~ f4, [bb3,db4]@11 ~@5", M: "f4 ~ f4@2 eb4@4 eb4@2 db4@4 bb3 ~",
  N: "~@8 f4!2 ~ f4!3 ~ f4, [ab3,c4]", O: "f4 eb4 ~ eb4!2 db4@2 ~ [ab3,c4,eb4]@3 ~ [ab3,bb3,db4]@3 ~, [ab3,c4]@5 ~@11",
  P: "bb3 ~ db4 ~ f4@8 ~@4", Q: "bb3 ~ eb4 ~ f4@3 ~ bb3 ~ gb4 ~ f4@3 ~", R: "bb3 ~ f4 ~ eb4@5 ~@3 gb4 ~ f4@2",
  S: "f4@11 ~@5", T: "~@8 [db4,f4,bb4]@5 ~@3", U: "~@4 [bb3,db4,f4]!2 ~@10", V: "~@12 [bb3,eb4,g4]@3 ~",
  W: "[ab3,db4,f4] ~@15", X: "~@4 [bb3,db4,f4]!2 ~@6 [bb3,eb4,g4]@3 ~",
  Y: "[ab3,db4,f4]@3 ~ [bb3,db4,f4]!2 ~@6 [bb3,eb4,g4] ~@3", Z: "~@7 db4", AA: "db4 ~ eb4 ~ f4 ~ db4@2 db4 ~ bb3@4 ~@2",
  AB: "~@12 db4 ~ eb4 db4", AC: "eb4 ~ eb4 ~ db4 ~ eb4 ~ db4 ~ f4@2 eb4@3 ~",
  AD: "[ab3,db4,f4] ~ [bb3,db4,f4] ~ [bb3,db4,f4] ~ [bb3,c4,f4] ~ [bb3,db4,f4]@3 ~ [bb3,db4,f4] ~ [db4,f4,bb4]@2", // Db Bbm Bbsus2 Bbm
  AE: "[db4,f4,bb4]@3 ~ [bb3,db4,f4]!2 ~@2 [bb3,db4,f4]@3 ~ [bb3,db4,f4]!2 ~@2", // Bbm
  AF: "~@6 [bb3,db4,f4] ~@3 [db4,f4,ab4] ~ [bb3,db4,f4] ~@3", // Bbm Db Bbm
  AG: "~@2 [db4,f4,ab4] ~ [bb3,db4,f4] ~@3 [db4,f4,ab4]@3 ~@5", AH: "~@7 [db4,f4,bb4]",
  AI: "[db4,f4,bb4]@3 ~ [g3,bb3,eb4] ~ [f3,ab3,db4]@2 [f3,ab3,db4] ~ [db3,f3,bb3] ~ [db3,f3,bb3] ~ ab3 ~", // Bbm Eb Db Bbm
  AJ: "bb3@4 db4@2 bb3@2 bb3@2 db4@2 bb3@3 ~, [db3,f3]@11 ~@5", // Db
  AK: "[db4,f4,bb4]@3 ~ [g3,bb3,eb4] ~ [f3,ab3,db4]@3 ~ [db3,f3,bb3] ~ [db3,f3,bb3] ~ ab3 ~", // Bbm Eb Db Bbm
  AL: "bb3@2 db4 bb3!2 db4 ~@2, [db3,f3]@11 ~@5", AM: "bb2!6 ab2 bb2 db3 bb2!3 ab2 bb2!3",
  AN: "ab2 bb2!3 ab2 bb2 db3 eb3 bb2 ~ [eb3,g3] ~ [db3,f3] ~@3", AO: "[db3,f3,bb3]@11 ~@5",
})).s("gm_trumpet").gain(0.45)

// bass · electric bass finger
const bass = note(`<
  ~@76 A ~ B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B ~ B C B C B C B C B C B C B C B C ~@3
>`.pickRestart({
  A: "bb1 ~ bb2 ~@2 bb1 ~ bb1!2 ~@7", B: "bb1 ~ bb2 ~@2 bb1 ~@2 bb1 ~@7",
  C: "bb1 ~ bb2 ~@2 bb1 ~@2 g2 ab2 ~@2 bb2 ab2 ~@2",
})).s("gm_electric_bass_finger").gain(0.32)

// bass · synth bass 1
const bass_2 = note(`<
  ~@4 A B A C A D A ~ E B A F G D H C A I A J A D K L ~@4 M D M N A I A J A D K L M B M C M D M N A O A P A O A Q A O A
  P A O A R A O A P A O A P ~@9 S T U T U ~ S ~@8 T U T U T U T U T ~@3 T U ~@2 T U ~@2 T U ~ U ~@5
>`.pickRestart({
  A: "bb2 ~@3 bb2 ~@2 bb2 f2 ~ f2 ~ gb2 ~ ab2 ~", B: "~@2 eb2 ~@3 eb2 ~@3 eb2 ~ f2 ~ f2 ~",
  C: "~@2 eb2 ~@2 eb2 ~ eb2 eb3 eb2 eb3 ~ db3 db2 db3 ~", D: "~@2 eb2 ~@2 eb2 ~ eb2!2 ~ eb2 ~ f2 ~ f2 ~",
  E: "bb2 ~@3 bb2 ~ bb2 ~ f2 ~ f2 ~ gb2 ~ ab2 ~", F: "~@2 eb2 ~@2 eb2 ~ eb2 eb3 eb2 eb3 ~ c3 c2 db3 ~",
  G: "bb2 ~@3 bb2 ~@2 bb2 eb2 ~ eb2 ~ f2 ~ f2 ~", H: "bb2 ~@2 bb2 ~@2 bb2 ~ f2 ~ f2 ~ gb2 ~ ab2 ~",
  I: "~@2 eb2 ~@2 eb2 ~@4 eb2 ~ f2 ~ f2 ~", J: "~@2 eb2 ~@2 eb2 ~ eb2 db3 eb2 eb3 ~ db3 db2 db3 ~",
  K: "bb2@3 ~ bb2@3 ~ bb2@3 ~ bb2 ~ ab2 ~", L: "~@2 eb2 ~ eb3@3 ~ db3 bb2 ab2 f2 db3 bb2 ab2 f2",
  M: "bb2 ~@3 bb2 ~@2 bb2 f2 ~ gb2 ~ gb2 ~ ab2 ~", N: "bb2!2 ~@14", O: "~@2 eb2 ~@3 eb2 ~ eb3 ~ eb2 ~ db3 ~ eb2 ~",
  P: "~@2 eb2 ~@2 eb2 ~ eb2!2 ~ eb2 ~ f2 ~ ab2 ~", Q: "~ eb2 ~ eb2 ~@3 db3 ~ db3 eb3 ~ f3 ~ ab3 ~",
  R: "~@2 eb2 ~ eb2@3 ~ db4 ~ bb3 ~ ab3 ~ f3 ~", S: "~@5 bb2 ~@2 g3 ab3 ~@2 bb3 ab3 ~@2",
  T: "bb2 ~ bb3 ~@2 bb2 ~@2 bb2 ~@7", U: "bb2 ~ bb3 ~@2 bb2 ~@2 g3 ab3 ~@2 bb3 ab3 ~@2",
})).s("gm_synth_bass_1").gain(0.44).pan(0.6)

// chords · piano
const piano = note(`<
  ~@16 A B C D E F C G A H I J K L M N O P O Q E F C G A H I R S P T U O P O V ~@16 W X Y Z ~@9 AA AB AC AD AE ~@5 AF AG
  AH AI AJ AK AL AM AN AO AP AI AJ AK AQ AR AS AO AT ~@2 AU AV ~@2 AU AV ~@2 AU AV AW AX@2 AY AZ BA@2
>`.pickRestart({
  A: "[f3,d4]@5 ~@3 [f3,db4]@3 ~ bb3 ~ [bb3,eb4,bb4]@2", // Dm Db Eb5
  B: "bb4 ~ f4@3 ~ bb3 ~ eb4 ~ d4 ~ eb4 ~ eb4 ~, [bb3,eb4]@4 ~@4 f3@5 ~@3", // Eb5
  C: "[f3,d4]@5 ~@3 [f3,db4]@3 ~ bb3 ~ [ab3,eb4]@2", D: "eb4 ~ d4@3 ~ f4@2 f4@3 ~ eb4@3 ~, ab3@11 ~@5",
  E: "[f3,db4]@4 [db4,bb4]@2 [c4,ab4]@2 [c4,ab4]@3 ~ bb3 ~ [bb3,eb4,bb4]@2", // Db Gb Fm Eb5
  F: "[bb3,eb4]@4 f4@3 ~ f3@4 eb4@3 ~, bb4@3 ~@5 d4@3 ~@5", G: "eb4 ~ d4 ~ f4@3 ~ f4@3 ~ eb4 ~ f4 ~, ab3@11 ~@5",
  H: "bb4 ~ f4@3 ~ bb3 ~ f3@4 eb4@3 ~, [bb3,eb4]@4 ~@4 d4@3 ~@5", I: "~@6 db4@2 ~@4 bb3 ~ bb3@2, ~ c4",
  J: "[bb2,bb3] ~ bb3@2 [ab2,ab3]@4 ab3@2 [bb2,bb3]@2 [bb2,bb3]@4, c4@5 ~@11, ~@2 bb2 ~@5 ab2 ~ [ab2,ab3] ~@5", // Bb Ab Bb Ab
  K: "[bb2,bb3]@4 [bb2,bb3]@3 [bb2,bb3]@3 [bb2,bb3,db4,gb4] ~ [bb2,db3,gb3,bb3,db4,gb4]@3 ~, [db4,f4] ~@3 [db4,f4] ~@2 [db4,gb4] ~@8", // Bb Gb Db Gb5
  L: "[ab2,c3,eb3,f3,ab3,c4,eb4,f4] ~ [ab2,c3,eb3,f3,ab3,c4,eb4,f4] ~ [ab2,c3,eb3,f3,ab3,c4,eb4,f4]@2 ~ [ab3,c4,eb4,f4] ~@2 [ab3,c4,eb4,f4] ~ [ab2,c3,eb3,ab3,c4,eb4] ~ [ab2,c3,eb3,ab3,c4,eb4] ~", // Fm7 Ab
  M: "[bb2,db3,f3,bb3,db4,f4] ~@3 [bb2,bb3,db4,f4] ~@2 [bb2,bb3,db4,gb4] ~ [bb2,bb3,db4,gb4] ~@2 [bb2,db3,gb3,bb3,db4,gb4]@2 ~ [ab3,c4,eb4,f4]", // Bbm Gb Fm7
  N: "~@2 [ab2,c3,eb3,f3,ab3,c4,eb4,f4] ~ [ab2,c3,eb3,f3,ab3,c4,eb4,f4]@2 ~ [ab2,ab3,c4,eb4,f4] ~@2 [ab2,ab3,c4,eb4,f4] ~ [ab2,c3,eb3,ab3,c4,eb4] ~ [ab2,c3,eb3,ab3,c4,eb4] ~", // Fm7 Ab
  O: "[bb3,db4,f4] ~@3 [bb3,db4,f4] ~@2 [bb3,db4,gb4] ~@2 [bb3,db4,gb4] ~ [bb3,db4,gb4]@3 ~", // Bbm Gb
  P: "[ab3,c4,eb4,f4] ~ [ab3,c4,eb4,f4] ~ [ab3,c4,eb4,f4]@2 ~ [ab3,c4,eb4,f4] ~@2 [ab3,c4,eb4,f4] ~ [ab3,c4,eb4] ~ [ab3,c4,eb4] ~", // Fm7 Ab
  Q: "[bb3,bb4] ~ [bb3,bb4]!2 ~ [bb3,bb4]!2 ~ f4@3 ~ eb4@3 ~", // Bb
  R: "bb3 ~ bb3@2 ab3@4 ab3@2 bb3@2 bb3@4, c4@5 ~@5 ab3 ~@5",
  S: "[db4,f4] ~@3 [db4,f4] ~@2 [db4,gb4] ~@2 [bb3,db4,gb4] ~ [bb3,db4,gb4]@3 ~, bb3@4 bb3@3 bb3@3 ~@6", // Db Gb5 Gb
  T: "[bb3,db4,f4] ~@3 [bb3,db4,f4] ~@2 [bb3,db4,gb4] ~ [bb3,db4,gb4] ~@2 [bb3,db4,gb4]@2 ~ [ab3,c4,eb4,f4]", // Bbm Gb Fm7
  U: "~@2 [ab3,c4,eb4,f4] ~ [ab3,c4,eb4,f4]@2 ~ [ab3,c4,eb4,f4] ~@2 [ab3,c4,eb4,f4] ~ [ab3,c4,eb4] ~ [ab3,c4,eb4] ~", // Fm7 Ab
  V: "[bb3,bb4] ~ [bb3,bb4]!2 ~ [bb3,bb4]!2 ~@9", W: "bb3 ~ db4 ~ bb3@8 f4 ~ gb4@2, f4 ~",
  X: "bb3 ~ eb4 ~ bb3@3 ~ f4@2 [gb3,eb4] ~ [gb3,eb4]@4, f4@8 bb3 ~@7", Y: "bb3 ~ f3 ~ bb3@8 ~@4, eb4@11 ~@5",
  Z: "[ab3,c4,f4]@11 ~@5", AA: "bb2@3 ~ [bb2,db3,f3]!2 ~@10", AB: "~@6 db3@2 db3@3 ~ [bb2,eb3,g3]@3 ~",
  AC: "[ab2,db3,f3] ~@9 bb2 ~ bb2 ~ bb2@2", AD: "bb2@3 ~ [bb2,db3,f3]!2 ~@6 [bb2,eb3,g3]@3 ~",
  AE: "[ab2,db3,f3]@3 ~ [bb2,db3,f3]!2 ~@6 [bb2,eb3,g3] ~@3", AF: "~@6 bb3 ~ eb4@2 ~ db4 bb3 ~ db4@2",
  AG: "bb3@5 ~@7 db4 ~ eb4 db4", AH: "eb4 ~ eb4 ~ db4 ~ eb4 ~ db4 ~ f4@2 eb4@3 ~",
  AI: "[ab3,db4,f4] ~ [bb3,db4,f4] ~ [bb3,db4,f4] ~ [bb3,c4,f4] ~ [bb3,db4,f4]@3 ~ [bb3,db4,f4] ~ [db4,f4,bb4]@2", // Db Bbm Bbsus2 Bbm
  AJ: "[db4,f4,bb4]@3 ~ [bb3,db4,f4]!2 ~@2 [bb3,db4,f4]@3 ~ [bb3,db4,f4]!2 ~@2", // Bbm
  AK: "~@2 [db4,f4,ab4] ~ [db4,f4,ab4] ~ [bb3,db4,f4] ~ [db4,f4,ab4] ~ [db4,f4,ab4] ~ [bb3,db4,f4] ~ [db4,f4,ab4] ~", // Db Bbm Db Bbm Db
  AL: "~@2 [db4,f4,ab4] ~ [bb3,db4,f4] ~ [db4,f4,ab4]@2 [db4,f4,ab4]@3 ~@5", AM: "~@7 [db4,f4,bb4]",
  AN: "[db4,f4,bb4]@3 ~ [g3,bb3,eb4] ~ [f3,ab3,db4]@2 [f3,ab3,db4] ~ [db3,f3,bb3] ~ [db3,f3,bb3] ~ ab3 ~", // Bbm Eb Db Bbm
  AO: "bb3@4 db4@2 bb3@2 bb3@2 db4@2 bb3@3 ~, [db3,f3]@11 ~@5", // Db
  AP: "[f3,bb3,db4] ~ eb4 ~ [f3,bb3,db4] ~ eb4 ~ [f3,bb3,db4] ~ eb4@2 [f3,bb3,db4] ~ f4 ~", // Bbm
  AQ: "~@2 [db4,f4,ab4] ~ [bb3,db4,f4] ~ [db4,f4,ab4]@2 [db4,f4,ab4]@3 ~@3 [f3,f4] ~", // Db Bbm Db F
  AR: "[bb3,bb4] ~ [bb3,bb4]@3 ~ [bb3,bb4]@6 ~@2 [db4,f4,bb4]@2", // Bb Bbm
  AS: "[db4,f4,bb4]@3 ~ [g3,bb3,eb4] ~ [f3,ab3,db4]@3 ~ [db3,f3,bb3] ~ [db3,f3,bb3] ~ ab3 ~", // Bbm Eb Db Bbm
  AT: "[bb3,db4,f4]@3 ~ [bb3,db4,f4]!2 ~@2 [bb3,db4,f4]@3 ~ [bb3,db4,f4]!2 ~@2", // Bbm
  AU: "bb2!6 ab2 bb2 db3 bb2!3 ab2 bb2!3", AV: "ab2 bb2!3 ab2 bb2 db3 eb3 bb2 ~ [eb3,g3] ~ [db3,f3] ~@3",
  AW: "[db3,f3,bb3]@11 ~@5", AX: "~@2 [ab3,db4,f4] ~@2 [f3,ab3,db4] ~@2 [db3,f3,bb3] ~ [db3,f3,bb3] ~@5",
  AY: "~@2 [ab3,db4,f4] ~@2 [f3,ab3,db4] ~@2 [db3,f3,bb3] ~@5 c4 ~, ~@5 db4@3", // Db Bbm
  AZ: "db4@6 [bb3,db4,f4]@5 [gb3,bb3,db4]@4 ~", BA: "[~ [f3,ab3,c4]@4 ~@2 [gb3,bb3,db4,f4]@15 ~@10]/2",
})).s("gm_piano").gain(0.24)

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

// drums · snare
const snare = s("sd").struct("<~@32 [~ x ~ x]!3 [~ x ~@2] ~@8 [~ x ~ x]!7 ~@78>").gain(0.44)
// … 126 more lines

More by Seal