Strudelify

paranoid android

Ben Schrier

KeyB♭ majorTempo86 bpm
0:00/0:00
// paranoid android — Ben Schrier
// 86 bpm, 4/4, key Bb 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 (1/4 at bar 1, 4/4 at bar 2, 7/8 at bar 29, 4/4 at bar 31, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/1380911; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 106 bars on a 32-step grid, each part at one level. Source detail keeps the original performance.
setcpm(86/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 · glockenspiel
const glockenspiel = note(`<
  ~@3 A B C D E@4 C D E@4 F G H F G H I ~@4 J K L M@2 N@2 O P@2 Q@2 R S R T U V W X Y Z AA@4 AB@5 AC@2 AD AE@3 AF@8 AG
  AH@2 AI@2 AJ@2 AK@7 AL@2 AM@7 AN AO AP@6 AQ AR
>`.pickRestart({
  A: "~@13 d7 bb6 d7", B: "bb6@3 d7 bb6 d7 a6@3 d7 g6@2 g6@2 a6@2", C: "~@13 d6 bb5 d6",
  D: "bb5@3 d6 bb5 d6 a5@3 d6 g5@2 g5@2 a5@2",
  E: "[~@2 c6 c6@2 d6@2 eb6@2 g6@2 a6@2 bb6@2 bb6@2 a6@2 g6@2 f6@2 e6@2 ~@7]/4",
  F: "bb5@2 d6 e6@2 d6@3 bb5@2 d6 e6@2 d6@3", G: "a5@2 d6 e6@2 d6@3 a5@2 d6 e6@2 d6@3",
  H: "ab5@2 d6 e6@2 d6@3 ab5@2 d6 e6@2 d6@3", I: "ab5@2 d6 e6@2 d6@3 ab5@2 d6 e6@2 d6 bb5@2",
  J: "[c6,e6]@2 [c6,e6]@2 [c6,f6]@3 [ab5,c6]@2 [ab5,c6] [ab5,c6]@2 [bb5,d6]@2 [c6,e6]@2", // C F5 Ab Bb C
  K: "[c6,e6]@2 [c6,f6]@3 [ab5,c6]@2 [ab5,c6] [ab5,c6]@2 [bb5,d6]@2 [c6,e6]@2 [c6,e6]@2", // C F5 Ab Bb C
  L: "[c6,f6]@3 [ab5,c6]@2 [ab5,c6] [ab5,c6]@2 [bb5,d6]@2 [c6,e6]@2 [c6,e6]@2 [c6,f6]@2", // F5 Ab Bb C F5
  M: "[~ [ab5,c6]@9 a7@8 ~@14]/2", N: "[~@5 a7@4 ~@7]/2", O: "~@5 [c6,e6]!2 [c6,f6]",
  P: "[~ [ab5,c6]@2 [ab5,c6] [ab5,c6]@2 [bb5,d6]@2 [c6,e6]@2 [c6,e6]@2 [c6,f6]@3 [ab5,c6]@2 [ab5,c6] [ab5,c6]@2 [bb5,d6]@2 [c6,e6]@2 [c6,e6]@2 [c6,f6]@3 [ab5,c6]@2 [ab5,c6]]/2", // Ab Bb C F5 Ab Bb C F5 …
  Q: "[[ab5,c6]@2 [bb5,d6]@2 [c6,e6]@2 [c6,e6]@2 [c6,f6]@3 [ab5,c6]@9 ~@12]/2", // Ab Bb C F5 Ab
  R: "~@2 e7@2 a6@2 a6!2 c7 a6@2 ab6@2 ab6@2 ab6", S: "c7!2 d7!2 ~@12", T: "c7!2 d7!2 c6@2 c6@2 e6 f6 gb6 g6@2 g6@2 g6",
  U: "bb5 b5 c6@2 c6@2 e6 f6 gb6 g6@2 g6@2 g6 bb5 b5", V: "c6@2 c6@2 e6 f6 gb6 g6@2 g6@2 g6 bb5!2 c6@2",
  W: "c6@2 e6 f6 gb6 g6 a6 ab6@2 g6@2 gb6@3 [c6,g6]@2", // C5
  X: "[c6,g6]@2 [c7,e7]@3 [eb6,ab6]@2 [eb6,ab6] [eb6,ab6]@2 [f6,c7]@2 [c6,g6]@2 [c6,g6]@2", // C5 C Ab5 F5 C5
  Y: "[c7,e7]@3 [eb6,ab6]@2 [eb6,ab6] [eb6,ab6]@2 [f6,c7]@2 [c6,g6]@2 [c6,g6]@2 [c7,e7]@2", // C Ab5 F5 C5 C
  Z: "~ [eb6,ab6]@2 [eb6,ab6] [eb6,ab6]@2 [f6,c7]@2 [c6,g6]@2 [c6,g6]@2 [c7,e7]@3 [eb6,ab6]", // Ab5 F5 C5 C Ab5
  AA: "[[a6,c7] [ab6,b6]@2 [g6,bb6]@2 [gb6,a6]@3 [a6,a7]@16 [c7,eb7]@11 [b6,d7]@11 [bb6,d7]@11 [a6,db7]@5 e7@2]/4", // Am Abm Gm Gbm A Cm Bm Bb …
  AB: "[~@7 [d7,f7]@22 [a6,e7]@22 d7@22 c7@22 bb6@22 a6@21 g6@22]/5", AC: "[f6@11 e6@11 ab6@10]/2", AD: "~ a6@11 f7@4",
  AE: "[~@3 e7@10 [c7,eb7]@22 [b6,d7]@22 [bb6,d7]@22 [a6,db7]@11 e7@6]/3", // Cm Bm Bb A
  AF: "[~@5 [d7,f7]@22 [a6,e7]@22 d7@21 c7@22 bb6@22 a6@22 g6@22 f6@22 e6@21 ab6@22 a6@22 f7@11]/8", // Dm A5
  AG: "e7@11 [c7,eb7]@21", AH: "[~ [b6,d7]@22 [bb6,d7]@21 [a6,db7]@11 e7@9]/2", AI: "[~ [d7,f7]@11 [a6,e7]@11 d7@9]/2",
  AJ: "[~@4 c7@22 bb6@21 a6@17]/2",
  AK: "[~@5 g6@22 f6@22 e6@22 ab6@22 a6@22 f7@10 e7@11 [c7,eb7]@22 [b6,d7]@22 [bb6,d7]@22 [a6,db7]@11 e7@11]/7", // Cm Bm Bb A
  AL: "[[d7,f7]@22 [a6,e7]@21 d7@21]/2", AM: "[~ c7@22 bb6@22 a6@22 g6@22 f6@21 e6@22 ab6@22 a6@22 f7@11 e7@11 ~@26]/7",
  AN: "~ e7@2 a6@2 a6!2 c7 a6@2 ab6@2 ab6@2 ab6 c7", AO: "c7 d7!2 a6@2 a6!2 c7 a6@2 ab6@2 ab6@2 ab6 c7",
  AP: "[c7 d7!2 [c6,g6]@2 [c6,g6]@2 [c7,e7]@3 [eb6,ab6]@2 [eb6,ab6] [eb6,ab6]@2 [f6,c7]@2 [c6,g6]@2 [c6,g6]@2 [c7,e7]@3 [eb6,ab6]@2 [eb6,ab6] [eb6,ab6]@2 [f6,c7]@2 [c6,g6]@2 [c6,g6]@2 [c7,e7]@3 [eb6,ab6]@2 [eb6,ab6] [eb6,ab6]@2 [f6,c7]@2 [c6,g6]@2 [c6,g6]@2 [c7,e7]@3 [eb6,ab6] c7 b6@2 bb6@2 a6@3 [c6,g6]@2 [c6,g6]@2 [c7,e7]@3 [eb6,ab6]@2 [eb6,ab6] [eb6,ab6]@2 [f6,c7]@2 [c6,g6]@2 [c6,g6]@2 [c7,e7]@3 [eb6,ab6]@2 [eb6,ab6] [eb6,ab6]@2 [f6,c7]@2 [c6,g6]@2 [c6,g6]@2 [c7,e7]@3]/6", // C5 C Ab5 F5 C5 C Ab5 F5 …
  AQ: "[eb6,ab6]@2 [eb6,ab6] [eb6,ab6]@2 [f6,c7]@2 [c6,g6]@2 [c6,g6]@2 [c7,e7]@3 [eb6,ab6] e7", AR: "eb7 d7 c7 ~@5",
})).s("gm_glockenspiel").gain(0.4)

// other · tubular bells
const tubular_bells = note("<~@4 A ~ A ~@3 A ~ A ~@3 A B C@2 D E@2 ~@8 F@4 ~@8 G@3 ~@4 H@2 ~@54>".pickRestart({
  A: "bb4@3 a4@2 g4@2 ~", B: "~@3 d5", C: "[e5@30 f5 e5]/2", D: "d5@3 d5", E: "e5/2", F: "[~@5 a4@4 ~@7]/2",
  G: "[~ c5@11]/3", H: "[~ a4@2 ~]/2",
})).s("gm_tubular_bells").gain(0.25)

// chords · vibraphone
const vibraphone = note(`<
  ~ A B C D C D A B C D C D A B C D E F G E F G@2 ~@4 H I J K@2 L@2 M N@2 O@2 P Q R S T U V W X Y Z@2 AA@7 AB@2 AC@2
  AD@2 AE@8 AF AG@2 AH@2 AI@2 AJ@7 AK@2 AL@7 AM AN AO AP AQ AR AS AT AU AV
>`.pickRestart({
  A: "[c4,c5] [bb3,bb4]", B: "f5 a5, f4", C: "[g4,g5] [a4,a5]", D: "bb4@2 bb4 a4@2 g4@2 a4, d5", E: "[g4,f5]!2",
  F: "[d4,f5]!2", G: "[e4,e5]!2",
  H: "[c5,e5]@2 [c5,e5]@2 [c5,f5]@3 [ab4,c5]@2 [ab4,c5] [ab4,c5]@2 [bb4,d5]@2 [c5,e5]@2", // C F5 Ab Bb C
  I: "[c5,e5]@2 [c5,f5]@3 [ab4,c5]@2 [ab4,c5] [ab4,c5]@2 [bb4,d5]@2 [c5,e5]@2 [c5,e5]@2", // C F5 Ab Bb C
  J: "[c5,f5]@3 [ab4,c5]@2 [ab4,c5] [ab4,c5]@2 [bb4,d5]@2 [c5,e5]@2 [c5,e5]@2 [c5,f5]@2", // F5 Ab Bb C F5
  K: "[~ [ab4,c5]@9 a4@2 a4@2 c5 a4@2 ab4@2 ab4@2 ab4 c5@2 d5@2 ~@6]/2", // Ab
  L: "[~@10 a4@2 a4@2 c5 a4@2 ab4@2 ab4!3 c5@2 d5@2 ~@6]/2", M: "~@5 [c5,e5]!2 [c5,f5]",
  N: "[~ [ab4,c5]@2 [ab4,c5] [ab4,c5]@2 [bb4,d5]@2 [c5,e5]@2 [c5,e5]@2 [c5,f5]@3 [ab4,c5]@2 [ab4,c5] [ab4,c5]@2 [bb4,d5]@2 [c5,e5]@2 [c5,e5]@2 [c5,f5]@3 [ab4,c5]@2 [ab4,c5]]/2", // Ab Bb C F5 Ab Bb C F5 …
  O: "[[ab4,c5]@2 [bb4,d5]@2 [c5,e5]@2 [c5,e5]@2 [c5,f5]@3 [ab4,c5]@9 ~@12]/2", // Ab Bb C F5 Ab
  P: "~@2 e5@2 a4@2 a4!2 c5 a4@2 ab4@2 ab4@2 ab4", Q: "c5!2 d5!2 ~@5 d4 eb4 e4 f4 gb4 g4 ab4",
  R: "a4 bb4 b4@2 a4@2 a4!2 c5 a4@2 ab4@2 ab4@2 ab4",
  S: "c5!2 d5!2 [c4,g4]@2 [c4,g4]@2 [c5,e5]@3 [eb4,ab4]@2 [eb4,ab4] [eb4,ab4]@2", // C5 C Ab5
  T: "[f4,c5]@2 [c4,g4]@2 [c4,g4]@2 [c5,e5]@3 [eb4,ab4]@2 [eb4,ab4] [eb4,ab4]@2 [f4,c5]@2", // F5 C5 C Ab5 F5
  U: "[c4,g4]@2 [c4,g4]@2 [c5,e5]@3 [eb4,ab4]@2 [eb4,ab4] [eb4,ab4]@2 [f4,c5]@2 [c4,g4]@2", // C5 C Ab5 F5 C5
  V: "[c4,g4]@2 [c5,e5]@3 [eb4,ab4]@2 [eb4,ab4] [eb4,ab4]@2 [f4,c5]@2 d5!2 g4 a4", // C5 C Ab5 F5
  W: "b4 a4 b4 a4 g4 b3 ab4 bb4 c5 bb4 ab4 b3 g4 a4 b4 a4", X: "b4 a4 g4 b3 gb4 ab4 e4 gb4 d4 b3 g4 a4 b4 a4 b4 a4",
  Y: "g4 b3 ab4 bb4 c5 bb4 ab4 b3 g4 a4 b4 a4 b4 a4 g4 b3", Z: "[a4 ab4@2 g4@2 gb4@3 [a4,e5]@16 [c5,eb5]@8]/2",
  AA: "[~@6 [g4,d5]@22 [bb4,d5]@22 [a4,db5]@21 [d5,f5]@22 [db5,e5]@22 [bb4,d5]@22 [a4,c5]@22 [g4,bb4]@22 [f4,a4]@21 [e4,g4]@22]/7", // G5 Bb A Dm Dbm Bb Am Gm …
  AB: "[[d4,f4]@11 ~@11 ab4@10, ~@11 e4@21]/2", AC: "[~@24 f5@11 e5@10 [c5,eb5]@19, ~ a4@22 ~@9]/2",
  AD: "[~@3 [g4,d5]@22 [bb4,d5]@22 [a4,db5]@17]/2", // G5 Bb A
  AE: "[~@5 [d5,f5]@22 [db5,e5]@22 [bb4,d5]@21 [a4,c5]@22 [g4,bb4]@22 [f4,a4]@22 [e4,g4]@22 [d4,f4]@22 ~@21 ab4@22 ~@22 f5@11, ~@180 e4@43 a4@33]/8", // Dm Dbm Bb Am Gm F Em Dm
  AF: "e5@11 [c5,eb5]@21", AG: "[~ [g4,d5]@22 [bb4,d5]@21 [a4,db5]@20]/2",
  AH: "[~ [d5,f5]@11 [db5,e5]@11 [bb4,d5]@9]/2", AI: "[~@4 [a4,c5]@22 [g4,bb4]@21 [f4,a4]@17]/2",
  AJ: "[~@5 [e4,g4]@22 [d4,f4]@22 ~@22 ab4@22 ~@22 f5@10 e5@11 [c5,eb5]@22 [g4,d5]@22 [bb4,d5]@22 [a4,db5]@22, ~@49 e4@44 a4@44 ~@87]/7", // Em Dm Cm G5 Bb A
  AK: "[[d5,f5]@22 [db5,e5]@21 [bb4,d5]@21]/2", // Dm Dbm Bb
  AL: "[~ [a4,c5]@22 [g4,bb4]@22 [f4,a4]@22 [e4,g4]@22 [d4,f4]@21 ~@22 ab4@22 ~@22 f5@11 e5@11 ~@26, ~@55 e4@22 a4@22 ~@13]/7", // Am Gm F Em Dm
  AM: "~ e5@2 a4@2 a4!2 c5 a4@2 ab4@2 ab4@2 ab4 c5", AN: "c5 d5!2 a4@2 a4!2 c5 a4@2 ab4@2 ab4@2 ab4 c5",
  AO: "c5 d5!3 eb5@5 a5 bb4@3 f5 f4@2", AP: "~ d5 eb5@5 a5 bb4@3 f5 f4@3 d5",
  AQ: "eb5 e5 eb5@3 [f5,a5] bb4@2 bb4 f5 f4@3 d5 eb5 e5", AR: "eb5@5 c5 b4@2 bb4@2 a4@3 a5@2 g4",
  AS: "g5@3 bb4 c5 a5 g4 f5 g5 f5 eb5 a5@2 g5 g5@2", AT: "~ eb5 f5 d5 c5 d5 eb5 d5 c5 a5@2 g4 g5@3 bb4",
  AU: "c5 a5 g4 f5 g5 f5 eb5 a5@2 g5 g5@3 e5@2 e5", AV: "eb5 d5 c5 ~@5",
})).s("gm_vibraphone").gain(0.3)

// chords · marimba
const marimba = note(`<
  ~ A B C D C D A B C D C D A B C D E F G E F G@2 H I H J K L M N@5 O P@5 Q@2 R S T@2 U V W X@8 Y@2 Z@2 AA@2 AB@6 AC@3
  AD@2 AE@2 AF@4 AG@5 AH@2 AI@7 AJ AK AL@6 AM AN
>`.pickRestart({
  A: "~@2 g4 c5@2 g4@2 eb4 ~@2 g4 c5@2 g4@2 eb4, [c3,c4] [bb2,bb3]", // C Bb
  B: "~@2 eb4 g4 eb4@2 d4@2 ~@2 c4@2 c4@2 d4@2, f2, f3 a3",
  C: "~@2 bb4 d5@2 bb4@2 g4 ~@2 a4 d5@2 bb4@2 a4, [g2,g3] [a2,a3]", // G A
  D: "bb4@2 bb4 d5 [bb2,bb4]@2 a4@2 a4 d5 g4@2 g4@2 [a2,a4]@2, bb2@2 ~ a2@2 g2@2 ~", E: "[g4,f5]!8, g2!2",
  F: "[d4,f5]!8, [d3,f3]!2", G: "[e4,e5]!8, e3!2", H: "a2@2 a2!2 c3 a2@2 ab2@2 ab2@2 ab2 c3!2 d3!2",
  I: "a2@2 a2!2 c3 a2@2 ab2@2 d3 c3 a2 d3 c3 a2 c3", J: "a2@2 a2!2 c3 a2@2 ab2@2 d3 c3 a2 d3 c3 bb2 b2",
  K: "[c3,c5]@2 [c3,c5]@2 [e3,e5] [f3,f5] [gb3,gb5] [g3,g5]@2 [g3,g5]@2 [g3,g5] [bb2,bb4] [b2,b4] [c3,c5]@2", // C E F Gb G Bb B C
  L: "[c3,c5]@2 [e3,e5] [f3,f5] [gb3,gb5] [g3,g5] [gb3,gb5] [f3,f5] [e3,e5] [eb3,eb5] [d3,d5] [db3,db5] [c3,c5]@2 [c3,c5]@2", // C E F Gb G Gb F E …
  M: "[e3,e5] [f3,f5] [gb3,gb5] [g3,g5]@2 [g3,g5]@2 [g3,g5] [bb2,bb4] [b2,b4] [c3,c5]@2 [c3,c5]@2 [e3,e5] [f3,f5]", // E F Gb G Bb B C E …
  N: "[[gb3,gb5] [g3,g5] [a3,a5] [ab3,ab5]@2 [g3,g5]@2 [gb3,gb5]@3 a2@2 a2!2 c3 a2@2 ab2@2 ab2@2 ab2 c3!2 d3!2 a2@2 a2!2 c3 a2@2 ab2@2 d3 c3 a2 d3 c3 a2 c3 a2@2 a2!2 c3 a2@2 ab2@2 ab2@2 ab2 c3!2 d3!2 a2@2 a2!2 c3 a2@2 ab2@2 d3 c3 a2 d3 c3 bb2 b2 [c3,c5]@2 [c3,c5]@2 [e3,e5] [f3,f5]]/5", // Gb G A Ab G Gb C E …
  O: "[gb3,gb5] [g3,g5]@2 [g3,g5]@2 [g3,g5] [bb2,bb4] [b2,b4] [c3,c5]@2 [c3,c5]@2 [e3,e5] [f3,f5] [gb3,gb5] [g3,g5]", // Gb G Bb B C E F Gb …
  P: "[[gb3,gb5] [f3,f5] [e3,e5] [eb3,eb5] [d3,d5] [db3,db5] [c3,c5]@2 [c3,c5]@2 [e3,e5] [f3,f5] [gb3,gb5] [g3,g5]@2 [g3,g5]@2 [g3,g5] [bb2,bb4] [b2,b4] [c3,c5]@2 [c3,c5]@2 [e3,e5] [f3,f5] [gb3,gb5] [g3,g5] [a3,a5] [ab3,ab5]@2 [g3,g5]@2 [gb3,gb5]@3 d5@2 d5 d5@2 d5@3 d5!2 eb5 e5@2 e5 [e3,e5]@2 c5!2 [a2,d5]!2 [c3,d5] d5 eb5 ab2@2 ab2@2 ab2 c3!2 d3!2 g5 d5 eb5 e5@2 e5@2 eb5@2 eb5@2 eb5, ~@52 a2@2 ~@3 a2@2 e5@9 ~@12]/5", // Gb F E Eb D Db C E …
  Q: "[eb5@2 [e3,c5]@2 c5!2 [a2,d5]!2 [c3,d5] d5 eb5 [ab2,e5]@2 [ab2,g5]@2 ab2 c3!2 d3 [d3,d5] c3@2 c3@2 e3 f3 gb3 g3@2 g3@2 g3, ~@4 a2@2 ~@3 a2@2 ~@4 e5@2 e5@2 ~ c5@8 ~@4]/2", // C D5 Csus2 Dbm Abmaj7 D
  R: "bb2 b2 c3@2 c3@2 e3 f3 gb3 g3@2 g3@2 g3 bb2 b2", S: "c3@2 c3@2 e3 f3 gb3 g3@2 g3@2 g3 bb2!2 [c3,c5]@2, c6@7 ~",
  T: "[[c3,c5]@2 [e3,e5] [f3,f5] [gb3,gb5] [g3,g5] [a3,a5] [ab3,ab5]@2 [g3,g5]@2 [gb3,gb5]@3 [g2,c3]@2 [g2,c3]@2 [c3,e3,ab4,f5]@3 [c3,ab3]@2 [c3,ab3] [c3,ab3]@2 [d3,f3,f4,f5]@2 [g2,c3]@2 [g2,c3]@2, ~@14 [c5,e5]@4 ~@3 ab4@5 ~@2 [c5,e5]@4]/2", // C E F Gb G A Ab G …
  U: "[c3,e3,ab4,f5]@3 [c3,ab3]@2 [c3,ab3] [c3,ab3]@2 [d3,f3,f4,f5]@2 [g2,c3]@2 [g2,c3]@2 [c3,e3,ab4,f5]@2, ~@3 ab4@5 ~@2 [c5,e5]@4 ~@2", // Fm Dm C5 Fm C
  V: "~ [c3,ab3]@2 [c3,ab3] [c3,ab3]@2 [d3,f3,f4,f5]@2 [g2,c3]@2 [g2,c3]@2 [c3,e3,ab4,f5]@3 [c3,ab3,ab4], ~ ab4@5 ~@2 [c5,e5]@4 ~@4", // Fm Dm C5 Fm C
  W: "[a3,a4]@2 [ab3,ab4]@4 [g3,g4]@4 [gb3,gb4]@6 [a2,e3,e4,c5]!16", // A Ab G Gb Am
  X: "[[a2,e3,e4,c5]!16 c3@22 g2@22 bb2@22 a2@21 d3@22 a2@22 d3@22 c3@22 bb2@22 a2@21 g2@22]/8", // Am
  Y: "[f2@11 e2@11 e2@10]/2", Z: "[~@2 a2@22 a2@21 [c3,eb5]@19]/2",
  AA: "[~@3 [g2,d5]@22 ~@11 d5@11 [a2,db5]@15 d5@2, ~@25 bb2@22 ~@17]/2", // G5 A
  AB: "[~ e5@4 [d3,f5]@22 e5@16 e5@5 ~ e5@5 d5@16 c3@22 ~@11 d5@8 e5@3 f5@11 c5@11 ~@11 d5@8 e5@3 f5@11 c5@11 b4@5 e5@7, ~@27 a2@22 d3@22 ~@21 bb2@22 a2@22 g2@22 f2@22 e2@12]/6", // Dm
  AC: "[~@15 e5@16 a4@5 ~ e5@11 ~@11 e5@16 [c3,eb5]@21, ~@4 f5@11 ~@33 f5@11 ~@37, ~@9 e2@22 a2@22 a2@22 ~@21]/3", // Cm
  AD: "[~ [g2,d5]@22 ~@11 d5@10 db5@15 d5@4 e5, ~@23 bb2@21 a2@20]/2", // G5
  AE: "[~@2 [d3,f5]@22 e5@16 ~ e5@5 e5@5 d5@13, ~@12 a2@11 d3@9]/2", // Dm
  AF: "[~@4 c3@22 ~@11 d5@8 e5@2 f5@11 c5@11 ~@11 d5@8 e5@3 f5@11 c5@11 b4@5 e5@10, ~@26 bb2@21 a2@22 g2@22 f2@22 e2@15]/4",
  AG: "[~@12 e5@16 ~ a4@5 e5@11 ~@11 e5@16 ~@6 eb5@5 g5@5 ~ eb5@5 ~@6 d5@5 f5@5 ~ d5@5 ~@6 d5@5 f5@5 d5@5 ~@6 db5@5 ~ e5@5 db5@5 ~, ~ f5@11 ~@33 f5@11 ~@16 c3@22 ~@22 bb2@22 a2@22, ~@7 e2@22 a2@22 a2@22 ~@21 g2@22 ~@44]/5",
  AH: "[~@5 d5@5 ~ f5@5 d5@5 ~@6 db5@5 ~ e5@5 db5@5 ~@6 d5@5 f5@5 ~ d5@4, d3@22 a2@21 d3@21]/2",
  AI: "[~ f5@5 ~ e5@5 d5@5 ~ db5@5 ~@6 d5@5 f5@5 d5@5 ~@6 c5@5 ~ e5@5 c5@5 ~@6 bb4@5 ~ d5@5 bb4@5 ~@6 a4@5 ~ c5@5 a4@5 ~@6 ab4@5 b4@5 ~ ab4@5 a4@11 b4@11 ~@6 ab4@5 b4@5 ~ ab4@5 a4@11 b4@11 a2@4 a2@2 a2@2 c3@2 a2@4 ab2@4 ab2@4 ab2@2 c3@2, ~ c3@22 bb2@22 a2@22 g2@22 f2@21 e2@22 e2@22 a2@22 a2@22 a4@8 ~@18]/7",
  AJ: "c3 d3!2 [a2,a4]@2 [a2,a4]!2 [c3,c5] [a2,a4]@2 [ab2,ab4]@2 [ab2,ab4]@2 [ab2,ab4] [c3,c5], ~ e5@2 ~@13", // A C A Ab C
  AK: "[c3,c5] [d3,d5]!2 [a2,a4]@2 [a2,a4]!2 [c3,c5] [a2,a4]@2 [ab2,ab4]@2 [ab2,ab4]@2 [ab2,ab4] [c3,c5]", // C D A C A Ab C
  AL: "[[c3,c5] [d3,d5]!2 [g2,c3]@2 [g2,c3]@2 [c3,e3,ab4,f5]@3 [c3,ab3]@2 [c3,ab3] [c3,ab3]@2 [d3,f3,f4,f5]@2 [g2,c3]@2 [g2,c3]@2 [c3,e3,ab4,f5]@3 [c3,ab3]@2 [c3,ab3] [c3,ab3]@2 [d3,f3,f4,f5]@2 [g2,c3]@2 [g2,c3]@2 [c3,e3,ab4,f5]@3 [c3,ab3]@2 [c3,ab3] [c3,ab3]@2 [d3,f3,f4,f5]@2 [g2,c3]@2 [g2,c3]@2 [c3,e3,ab4,f5]@3 [c3,ab3,ab4] [a3,a4] [ab3,ab4]@2 [g3,g4]@2 [gb3,gb4]@3 [g2,c3]@2 [g2,c3]@2 [c3,e3,ab4,f5]@3 [c3,ab3]@2 [c3,ab3] [c3,ab3]@2 [d3,f3,f4,f5]@2 [g2,c3]@2 [g2,c3]@2 [c3,e3,ab4,f5]@3 [c3,ab3]@2 [c3,ab3] [c3,ab3]@2 [d3,f3,f4,f5]@2 [g2,c3]@2 [g2,c3]@2 [c3,e3,ab4,f5]@3, ~@3 [c5,e5]@4 ~@3 ab4@5 ~@2 [c5,e5]@4 ~@3 ab4@5 ~@2 [c5,e5]@4 ~@3 ab4@5 ~@2 [c5,e5]@4 ~@12 [c5,e5]@4 ~@3 ab4@5 ~@2 [c5,e5]@4 ~@3 ab4@5 ~@2 [c5,e5]@4 ~@3]/6", // C D C5 Fm Dm C5 Fm Dm …
  AM: "[c3,ab3]@2 [c3,ab3] [c3,ab3]@2 [d3,f3,f4,f5]@2 [g2,c3]@2 [g2,c3]@2 [c3,e3,ab4,f5]@3 [c3,ab3,ab4] [e3,e5], ab4@5 ~@2 [c5,e5]@4 ~@5", // Fm Dm C5 Fm E C
  AN: "[eb3,eb5] [d3,d5] [c3,c5] ~@5", // Eb D C
})).s("gm_marimba").gain(0.4)

// drums · kick
const kick = s("bd").struct(`<
  ~ A@23 B@4 C D E F G@3 H I J K L M L M N O P Q R G S ~ T U V W X Y Z AA AB AC AD AE AF AG AH AI AJ AK AL AM AN AO AP
  AQ AR AS AT AU AV AW AX AY AZ BA BB BC BD BE BF BG BH BI BJ BK ~ BL@2 BM BN BO BP BQ BR BS ~
>`.pickRestart({
  A: "x ~@2 x ~@4 x ~@2 x ~@4", B: "x ~@2 x ~@4 x ~@2 x ~ x ~@2", C: "x ~ x ~@6 x ~ x ~@2 x ~",
  D: "x ~@6 x ~ x ~@2 x ~ x ~", E: "~@5 x ~ x ~@2 x ~ x ~@3", F: "~@10 x ~@2 x ~@2",
  G: "~@2 x ~@2 x ~ x ~@2 x ~@2 x ~@2", H: "~@2 x ~@2 x ~ x ~@2 x ~ x ~@3", I: "~@3 x ~ x ~@2 x ~ x ~@5",
  J: "~ x ~ x ~@2 x ~ x ~@6 x", K: "~ x ~@2 x ~ x ~@9", L: "~ x ~@2", M: "~@4 x ~ x!2 ~@2 x ~@2 x ~ x",
  N: "~@4 x ~@2 x ~@2 x ~@2 x ~ x", O: "~@2 x ~@2 x ~@2 x ~@2 x ~ x ~@2", P: "x ~@2 x ~@2 x ~@2 x ~ x ~@2 x ~",
  Q: "x!2 ~@2 x ~@2 x ~ x ~@4 x ~", R: "~ x ~@2 x ~@2 x ~ x ~@2 x ~@2 x", S: "x ~@2 x ~ x ~@2 x ~@2 x ~@2 x ~",
  T: "~@16 x ~@4 x ~@10", U: "~@3 x ~@2 x ~@4 x ~@16 x ~@3", V: "~ x ~@13 x ~@4 x ~@2 x ~@8",
  W: "~@7 x ~@5 x ~@12 x ~@5", X: "~@3 x ~@15 x ~@5 x ~@6", Y: "~@6 x ~@5 x ~ x ~@16 x", Z: "~@4 x ~@18 x ~@2 x ~@5",
  AA: "~@5 x ~@2 x ~@6 x", AB: "~@3 x ~@2 x ~@15 x ~@5 x ~@3", AC: "~@9 x ~@5 x ~ x ~@14",
  AD: "~@2 x ~@4 x ~@13 x ~@10", AE: "x ~@12 x ~@5 x ~@12", AF: "~ x ~ x ~@5 x ~@15 x ~@5 x", AG: "~@6 x ~@2 x!2 ~@5",
  AH: "~@5 x ~@4 x ~@13 x ~@7", AI: "x ~@16 x ~@4 x ~@9", AJ: "~@4 x ~@4 x ~@2 x ~@15 x ~@3",
  AK: "~@2 x ~@18 x ~ x ~@8", AL: "~@8 x ~@4 x ~@13 x ~@4", AM: "x ~@2 x ~@16 x ~@4 x ~@6",
  AN: "~@7 x ~@4 x ~@2 x ~@15 x", AO: "~@5 x ~@12 x ~@10 x ~@2", AP: "~@11 x ~@4 x ~@13 x ~",
  AQ: "~ x ~@4 x ~@16 x ~@4 x ~@3", AR: "~@10 x ~@4 x ~@2 x ~@13", AS: "~@2 x ~@5 x ~@12 x ~@8 x ~",
  AT: "~@14 x ~@4 x ~@12", AU: "~ x ~@5 x ~ x ~@16 x ~@4 x", AV: "~@18 x ~@2 x ~@10", AW: "~@5 x ~@5 x ~@12 x ~@5 x ~",
  AX: "~ x ~@15 x ~@4 x ~@9", AY: "~@4 x ~@5 x ~ x ~@16 x ~@2", AZ: "~@2 x ~@13 x ~@10 x ~@4",
  BA: "~@8 x ~@5 x ~@12 x ~@2 x ~", BB: "~@2 x ~@7 x ~@2 x ~@2", BC: "~@7 x ~@5 x ~ x ~@16",
  BD: "x ~@4 x ~@13 x ~@7 x ~@4", BE: "~@11 x ~@5 x ~@13 x", BF: "~@4 x ~@2 x ~@15 x ~@5 x ~@2", BG: "~@8 x!2 ~@6",
  BH: "~@3 x ~@4 x ~@18 x ~@2 x ~", BI: "~@7 x ~@2 x ~@5", BJ: "~@2 x ~@4 x ~@2 x ~@15 x ~@5",
  BK: "x ~@12 x ~@10 x ~@7", BL: "~@3 x ~ x!2 ~@2 x ~@2 x ~ x ~", BM: "~@3 x ~@2 x ~@2 x ~@2 x ~ x ~",
  BN: "~ x ~@2 x ~@2 x ~@2 x ~ x ~@2 x", BO: "~@2 x ~@2 x ~@2 x ~ x ~@2 x ~@2", BP: "x ~@2 x ~@9 x ~@2",
  BQ: "x ~@2 x ~@2 x ~ x ~@2 x ~@2 x ~", BR: "~ x ~@2 x ~ x ~@2 x ~@2 x ~@2 x", BS: "~@2 x ~ x ~@2 x ~@2 x ~@2 x ~@2",
})).gain(0.3)

// drums · rim
const rim = s("rim").struct("<~ A@16 B@7 C@4 D E F G H@4 I J K ~@67>".pickRestart({
  A: "~@4 x!2 ~@6 x!2 ~@2", B: "~@4 x!2 ~ x ~@4 x!2 ~ x", C: "~@4 x!2 ~ x ~ x ~@2 x ~ x!2", D: "~@4 x!2 ~ x ~@4 x ~@3",
  E: "~@2 x!2 ~ x ~@4 x ~@5", F: "x!2 ~ x ~@4 x ~@5 x!2", G: "~ x ~@12 x!2", H: "~ x ~ x ~@2 x ~ x!2 ~@4 x!2",
  I: "~ x ~@4 x ~@5 x!2 ~ x", J: "~@4 x ~@5 x!2 ~ x ~@2", K: "~@2 x ~@5 x!2 ~ x ~@4",
})).gain(0.4)

// drums · snare
const snare = s("sd").struct(`<
  ~@31 A ~@6 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 AA AB AC AD AE AF AG AH AI AJ AK AL AM AN AO AP AQ AR AS
  AT AU AG AV AW AX AY AZ BA BB BC BD BE ~ BF BG@2 BH BI BJ BK BL BM BN
>`.pickRestart({
  A: "~@2 x!2 ~ x ~ x ~@8", B: "~@12 x!2 ~ x", C: "~ x ~@14", D: "~@2 x ~@5 x!2 ~ x ~@4", E: "x ~@3 x ~ x ~@17 x!8",
  F: "x!2 ~@14 x ~ x ~@3 x ~@9", G: "x ~ x!2 ~@4 x!2 ~ x ~@4", H: "x ~@5 x!2 ~ x ~@4 x ~", I: "~@4 x!2 ~ x ~@4 x ~@3",
  J: "~@2 x!2 ~ x ~@4 x ~ x!2 ~@2", K: "~@2 x!2 ~ x ~@4 x ~@5", L: "x!2 ~ x ~@4 x ~@5 x!2", M: "~ x ~@4 x ~@5 x!2 ~ x",
  N: "x!2 ~ x ~ x ~@10", O: "~@27 x ~@2 x ~", P: "~@17 x ~@7 x!2 ~@5", Q: "~@7 x ~ x ~@18 x ~@3",
  R: "~@2 x ~@2 x ~@12 x ~@2 x ~@10", S: "x ~@3 x ~@3 x ~@6 x", T: "~@20 x ~@2 x ~@8", U: "~@10 x ~ x ~@18 x",
  V: "~@21 x ~@2 x ~@7", W: "~@11 x ~@20", X: "~ x ~@2 x ~@18 x ~@7 x", Y: "x ~@12 x ~ x ~@8 x ~ x ~@5",
  Z: "~@24 x ~@2 x ~@4", AA: "~@7 x ~@3 x!2 ~@3", AB: "~@4 x ~@2 x ~@18 x ~@4 x", AC: "~@2 x ~@13 x ~ x ~@10 x ~@2",
  AD: "~@6 x ~@7 x ~@12 x ~@4", AE: "~@17 x ~@2 x ~@11", AF: "~@7 x ~@2 x ~@18 x ~@2", AG: "~@19 x ~@2 x ~@9",
  AH: "~@9 x ~@20 x ~", AI: "~ x ~@18 x ~@8 x!2 ~", AJ: "~@10 x ~@2 x ~@7 x ~@2 x ~@7", AK: "~@22 x ~@2 x ~@6",
  AL: "~@12 x ~@7 x!2 ~@10", AM: "~@2 x ~ x ~@18 x ~@5 x ~@2", AN: "x ~@12 x ~@2 x ~@10 x ~@4",
  AO: "~@3 x ~@7 x ~@13 x ~@6", AP: "~@15 x ~ x ~@14", AQ: "~@5 x ~ x ~@18 x ~@5", AR: "~@16 x ~@2 x ~@12",
  AS: "~@6 x ~@21 x ~@2 x", AT: "~@18 x ~@7 x!2 ~@4", AU: "~@8 x ~ x ~@8 x ~ x ~@10", AV: "~@9 x ~@7 x ~ x ~@11 x",
  AW: "~@2 x ~@18 x ~@4 x ~@2 x ~@2", AX: "~@11 x ~ x ~@10 x ~@7", AY: "~ x ~@7 x ~@12 x ~@9", AZ: "~@12 x ~@2 x ~@16",
  BA: "~@2 x ~@2 x ~@18 x ~@7", BB: "~@7 x!2 ~@7", BC: "~@4 x ~@20 x ~@2 x ~@3", BD: "~@15 x ~@7 x ~ x ~@6",
  BE: "~@5 x ~@2 x ~@7 x ~@2 x ~@12", BF: "~ x ~@5 x!2 ~ x ~@4 x", BG: "~ x!2 ~@4 x!2 ~ x ~@4 x",
  BH: "~@5 x!2 ~ x ~@4 x ~@2", BI: "~@3 x!2 ~ x ~@4 x ~@4", BJ: "~ x!2 ~ x!3 ~ x ~ x ~@5", BK: "~ x!2 ~ x ~@4 x ~@5 x",
  BL: "x ~ x ~@4 x ~@5 x!2 ~", BM: "x ~@4 x ~@5 x!2 ~ x!2", BN: "x!3 ~@5",
})).gain(0.25)

// drums · low tom
const low_tom = s("lt").struct("<~@42 A ~@19 B ~@10 C ~@10 D ~@10 E ~@10>".pickRestart({
  A: "~@6 x!2 ~@24", B: "~ x ~@2", C: "~@5 x ~@26", D: "~@3 x ~@28", E: "x",
})).gain(0.25)

// drums · hihat
const hihat = s("hh").struct(`<
  ~ A@16 ~@7 A@7 B A@6 C ~@12 D E F G H I J K L M N O P Q K R S T U V W K X M Y U Z AA AB AC AD AE AF ~@22
// … 184 more lines