Strudelify
KeyE♭ majorTempo122 bpm
0:00/0:00
// Sunny — Anthony Richard
// 122 bpm, 4/4, key D# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 117 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(122/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.

// other · string ensemble 1 · "Strings"
const string_ensemble_1 = note(`<
  ~@8 A B C D ~ E ~ F ~@15 F ~@4 G H ~ D C I J K ~ L ~ M N O P Q N O P ~ R S T U ~ V ~ W X@2 Y@2 Z@2 AA@2 AB@5 AC AD AE
  ~@15 AF ~@4 AG AH ~ AI AJ AK AL AM ~ AN AO@3 AP AQ AR AS
>`.pickRestart({
  A: "~@10 g5!2 bb5@2 c6 ~", B: "~@6 g5@2 ~@2 f5 ~ eb5@2 c5@2", C: "~@10 c6 bb5 c6 ~@3",
  D: "f5@2 ab5 ~ c6 ~ g5 ~ b5 ~ d6 ~ f6@2 g6 ~", E: "g5 ~@5 f5 ~@5 eb5@3 ~",
  F: "f4@2 ab4 ~ c5 ~ g4 ~ b4 ~ d5 ~ f5@2 g5 ~", G: "~@12 c6 bb5 c6 d6", H: "eb6",
  I: "~@6 eb6 d6 eb6 d6 eb6 d6 eb6 ~@3", J: "~@8 g6@2 f6@2 eb6@2 c6 ~", K: "~@8 c6@2 bb5 ~ g5@2 f5 ~",
  L: "f5 ~ ab5 ~ c6 ~ g5 ~ b5 ~ d6 ~ g6 f6 g6 ~", M: "gb4@2 a4 ~ db5 ~ ab4 ~ c5 ~ eb5 ~ gb5@2 ab5 ~", N: "db6", O: "b5",
  P: "a5", Q: "ab5", R: "ab5@4 e5 gb5@2 e5", S: "ab5 e6 db6@2", T: "~@8 ab6@2 gb6@2 e6@2 db6 ~",
  U: "~@8 db6@2 b5 ~ ab5@2 gb5 ~", V: "gb5 ~ a5 ~ db6 ~ ab5 ~ c6 ~ eb6 ~ ab6 gb6 ab6 ~",
  W: "g4@2 bb4 ~ d5 ~ a4 ~ db5 ~ e5 ~ g5@2 a5 ~", X: "[a5@10 d6 c6 d6 c6 a5 g5]/2",
  Y: "[f5@6 d5@2 f5@2 g5@4 a5@4 e5 ~ g5 ~ a5@4 e5 ~ g5@2 a5 ~]/2", Z: "[d6@7 a6@3 d6 c6 d6 c6 a5 g5]/2",
  AA: "[f5@6 d5@2 f5@2 g5@4 a5@4 e5 ~ g5@2 a5@4 e5@2 g5@2 a5 ~]/2", AB: "d6 c6 d6 ~@5 d6 c6 d6 ~@5",
  AC: "g5 ~ b5 ~ d6 ~ a5 ~ db6 ~ e6 ~ a6 g6 a6 ~", AD: "d6@4 d5 ~ d5 ~ f5 ~ d5 ~ f5 a5 ~@2",
  AE: "ab5 ~ b5 ~ eb6 ~ bb5@2 d6 ~ f6 ~ bb6@3 ~", AF: "ab4@2 b4 ~ eb5 ~ bb4 ~ d5 ~ f5 ~ ab5@2 bb5 ~",
  AG: "~@12 eb6 db6 eb6 f6", AH: "gb6", AI: "ab5@2 b5 ~ eb6 ~ bb5 ~ d6 ~ f6 ~ ab6@2 bb6 ~", AJ: "~@10 eb6 db6 eb6 ~@3",
  AK: "~@6 gb6 f6 gb6 f6 gb6 f6 gb6 ~@3", AL: "~@8 bb6@2 ab6@2 gb6@2 eb6 ~", AM: "~@8 eb6@2 db6 ~ bb5@2 ab5 ~",
  AN: "ab5 ~ b5 ~ eb6 ~ bb5 ~ d6 ~ f6 ~ bb6 ab6 bb6 ~", AO: "eb6 db6 eb6 ~ eb6 db6 eb6 ~ eb6 db6 eb6 ~ eb6 db6 eb6 ~",
  AP: "eb6 db6 eb6 ~ eb6 db6 eb6 ~ eb6 db6 eb6 ~ [db6,eb6] ~ eb6 ~", // Dbsus2
  AQ: "[db6,eb6] eb6 ~@2 eb6 db6 eb6 ~ eb6 db6 eb6 ~ eb6 db6 eb6 ~", // Dbsus2
  AR: "[db6,eb6] eb6 ~@2 [db6,eb6] eb6 ~@2 [db6,eb6] eb6 ~@2 eb6 db6 eb6 db6", AS: "eb6 ~@7",
})).s("gm_string_ensemble_1").gain(0.57)

// other · brass section
const brass_section = note(`<
  ~@12 A ~ B C ~@15 C ~@12 D E ~ F ~@6 G H ~@4 I J ~ K ~@6 L M N@4 O P ~ Q ~@15 R ~@12 S T U V U W X Y Z
>`.pickRestart({
  A: "~@10 c4!2 bb3@2 c4 ~", B: "ab4!2 ~ ab4!2 ~ ab4!2 ~ ab4!2 ~ ab4 ~ ab4@2", C: "~@10 g5 f5 g5 ~@3", D: "g3",
  E: "g4 ~ g4 ~ g4 ~ g4 ~ g4 ~@7", F: "~@10 ab5 gb5 ab5 ~@3", G: "~@10 db4!2 b3@2 db4 ~",
  H: "[gb4,db5]!2 ~ [gb4,db5]!2 ~ [ab4,eb5]!2 ~ [ab4,eb5]!2 ~ [ab4,eb5] ~ [ab4,eb5] ~", I: "ab3",
  J: "ab4 ~ ab4 ~ ab4 ~ ab4 ~ ab4 ~@7", K: "~@10 a5 g5 a5 ~@3", L: "~@10 d4!2 c4@2 d4 ~",
  M: "[g4,d5]!2 ~ [g4,d5]!2 ~ [a4,e5]!2 ~ [a4,e5]!2 ~ [a4,e5] ~ [a4,e5] ~", N: "~@4 d4!2 ~@6 d4!2 ~@2", O: "~ a4, a3",
  P: "g4 ~ g4 ~ g4 ~ g4 ~ a4@2 ~@2 a4@2 ~@2", Q: "~@10 bb4 ab4 bb4@3 ~", R: "~@10 bb5 ab5 bb5 ~@3", S: "bb3",
  T: "bb4 ~ bb4 ~ bb4 ~ bb4 ~ bb4 ~@7", U: "bb4 ab4", V: "bb4@2 eb5 db5", W: "bb4@7 b4@2 bb4@2 ab4@5", X: "gb4 ab4",
  Y: "bb4@2 db5 eb5", Z: "eb4 ~",
})).s("gm_brass_section").gain(0.64).pan(0.7)

// chords · electric guitar clean · "Electric Guitar"
const electric_guitar_clean = note(`<
  ~@16 A B C D E F G H I J K L M N O H A B C D E F G H I J K P M N O Q R S T U V W X Q Y Z AA AB AC AD AE AF AG AH AI AJ
  AK AL AM AF AN AO AP AQ AR AS AT AU AV AW AX AY AZ BA BB AU BC BD BE BF BG BH BI AU AV AW AX AY AZ BA BB AU BC BD BE
  BJ BG BH BK@6 ~
>`.pickRestart({
  A: "[c3,eb3,g3]@4 ~@2 [c3,eb3,g3]@4 [c4,eb4,e4,g4] [c4,eb4,g4] [c4,eb4,g4]@3 ~", // Cm C Cm
  B: "[bb2,eb3,g3]@4 ~@2 [bb2,eb3,g3]@4 [bb3,eb4,g4]!2 [bb3,eb4,g4]@3 ~", // Eb
  C: "[c3,eb3,ab3]@4 ~@2 [c3,eb3,ab3]@4 [c4,eb4,ab4]!2 [c4,eb4,ab4]@3 ~", // Ab
  D: "[c3,d3,f3,g3]@3 ~@3 [b2,d3,f3,g3]@4 [b3,d4,g4]!2 [b3,d4,g4]@3 ~", // Csus4 G7 G
  E: "[c3,eb3,g3]@3 ~@3 [c3,eb3,g3]@4 [c4,eb4,g4]!2 [c4,eb4,g4]@3 ~", // Cm
  F: "[bb2,eb3,g3]@3 ~@3 [bb2,eb3,g3]@4 [bb3,eb4,g4]!2 [bb3,eb4,g4]@3 ~", // Eb
  G: "[ab2,c3,eb3]@3 ~@3 [ab2,c3,eb3]@4 [c4,eb4,ab4]!2 [c4,eb4,ab4]@3 ~", // Ab
  H: "[c3,d3,f3,g3]@4 ~@2 [b2,d3,g3]@4 [b3,d4,f4,g4]!2 [b3,d4,f4,g4]@3 ~", // Csus4 G G7
  I: "[c3,eb3,g3]@3 ~@7 [c4,eb4,g4]!2 [c4,eb4,g4]@4, ~@3 [c3,eb3,g3]@3 ~@2", // Cm
  J: "[bb2,eb3,g3]@4 ~@6 [bb3,eb4,g4] [eb4,g4] [bb3,eb4,g4]@3 ~, ~@3 [bb2,eb3,g3]@3 ~@2", // Eb
  K: "[c3,eb3,ab3]@3 ~@7 [c4,eb4,ab4]!2 [c4,eb4,ab4]@4, ~@3 [ab2,c3,eb3]@3 ~@2", // Ab
  L: "[ab2,db3,f3]@3 ~@7 [b3,db4,f4]!2 [b3,db4,f4]@4, ~@3 [ab2,db3,f3]@3 ~@2", // Db Db7 Db
  M: "[c3,d3,f3,g3]@4 ~@6 [c4,d4,f4,g4]!2 [c4,d4,f4,g4]@4, ~@3 [c3,d3,f3,g3]@3 ~@2", // Csus4
  N: "[b2,d3,f3,g3]@4 ~@2 [b2,d3,f3,g3,b3,d4,f4,g4]@7 ~@3", O: "[c3,eb3,g3,c4,eb4,g4] ~@5 [c3,eb3,g3,c4]@10",
  P: "[ab2,db3,f3]@3 ~@7 [b3,db4,f4]!2 [b3,db4,f4]@3 ~, ~@3 [ab2,db3,f3]@3 ~@2", // Db Db7 Db
  Q: "[db3,eb3,gb3,ab3]@4 ~@2 [c3,eb3,ab3]@4 [c4,eb4,gb4,ab4]!2 [c4,eb4,gb4,ab4]@3 ~", // Dbsus4 Ab Ab7
  R: "[db3,e3,ab3]@4 ~@2 [db3,e3,ab3]@4 [db4,e4,f4,ab4] [db4,e4,ab4] [db4,e4,ab4]@3 ~", // Dbm Db Dbm
  S: "[b2,e3,ab3]@4 ~@2 [b2,e3,ab3]@4 [b3,e4,ab4]!2 [b3,e4,ab4]@3 ~", // E
  T: "[db3,e3,a3]@4 ~@2 [db3,e3,a3]@4 [db4,e4,a4]!2 [db4,e4,a4]@3 ~", // A
  U: "[db3,eb3,gb3,ab3]@3 ~@3 [c3,eb3,gb3,ab3]@4 [c4,eb4,ab4]!2 [c4,eb4,ab4]@3 ~", // Dbsus4 Ab7 Ab
  V: "[db3,e3,ab3]@3 ~@3 [db3,e3,ab3]@4 [db4,e4,ab4]!2 [db4,e4,ab4]@3 ~", // Dbm
  W: "[b2,e3,ab3]@3 ~@3 [b2,e3,ab3]@4 [b3,e4,ab4]!2 [b3,e4,ab4]@3 ~", // E
  X: "[a2,db3,e3]@3 ~@3 [a2,db3,e3]@4 [db4,e4,a4]!2 [db4,e4,a4]@3 ~", // A
  Y: "[db3,e3,ab3]@3 ~@7 [db4,e4,ab4]!2 [db4,e4,ab4]@4, ~@3 [db3,e3,ab3]@3 ~@2", // Dbm
  Z: "[b2,e3,ab3]@4 ~@6 [b3,e4,ab4] [e4,ab4] [b3,e4,ab4]@3 ~, ~@3 [b2,e3,ab3]@3 ~@2", // E
  AA: "[db3,e3,a3]@3 ~@7 [db4,e4,a4]!2 [db4,e4,a4]@3 ~, ~@3 [a2,db3,e3]@3 ~@2", // A
  AB: "[a2,d3,gb3]@4 ~@6 [c4,d4,gb4]!2 [c4,d4,gb4]@3 ~, ~@3 [a2,d3,gb3]@3 ~@2", // D D7 D
  AC: "[db3,eb3,gb3,ab3]@4 ~@6 [db4,eb4,gb4,ab4]!2 [db4,eb4,gb4,ab4]@4, ~@3 [db3,eb3,gb3,ab3]@3 ~@2", // Dbsus4
  AD: "[c3,eb3,gb3,ab3]@4 ~@2 [c3,eb3,gb3,ab3,c4,eb4,gb4,ab4]@7 ~@3", // Ab7
  AE: "[db3,e3,ab3,db4,e4,ab4] ~@5 [db3,e3,ab3,db4]@10", // Dbm
  AF: "[d3,e3,g3,a3]@4 ~@2 [db3,e3,a3]@4 [db4,e4,g4,a4]!2 [db4,e4,g4,a4]@3 ~", // Dsus4 A A7
  AG: "[d3,f3,a3]@4 ~@2 [d3,f3,a3]@4 [d4,f4,gb4,a4] [d4,f4,a4] [d4,f4,a4]@3 ~", // Dm D Dm
  AH: "[c3,f3,a3]@4 ~@2 [c3,f3,a3]@4 [c4,f4,a4]!2 [c4,f4,a4]@3 ~", // F
  AI: "[d3,f3,bb3]@4 ~@2 [d3,f3,bb3]@4 [d4,f4,bb4]!2 [d4,f4,bb4]@3 ~", // Bb
  AJ: "[d3,e3,g3,a3]@3 ~@3 [db3,e3,g3,a3]@4 [db4,e4,a4]!2 [db4,e4,a4]@3 ~", // Dsus4 A7 A
  AK: "[d3,f3,a3]@3 ~@3 [d3,f3,a3]@4 [d4,f4,a4]!2 [d4,f4,a4]@3 ~", // Dm
  AL: "[c3,f3,a3]@3 ~@3 [c3,f3,a3]@4 [c4,f4,a4]!2 [c4,f4,a4]@3 ~", // F
  AM: "[bb2,d3,f3]@3 ~@3 [bb2,d3,f3]@4 [d4,f4,bb4]!2 [d4,f4,bb4]@3 ~", // Bb
  AN: "[d3,f3,a3]@3 ~@7 [d4,f4,a4]!2 [d4,f4,a4]@4, ~@3 [d3,f3,a3]@3 ~@2", // Dm
  AO: "[c3,f3,a3]@4 ~@6 [c4,f4,a4] [f4,a4] [c4,f4,a4]@3 ~, ~@3 [c3,f3,a3]@3 ~@2", // F
  AP: "[d3,f3,bb3]@3 ~@7 [d4,f4,bb4]!2 [d4,f4,bb4]@3 ~, ~@3 [bb2,d3,f3]@3 ~@2", // Bb
  AQ: "[bb2,eb3,g3]@4 ~@6 [db4,eb4,g4]!2 [db4,eb4,g4]@4, ~@3 [bb2,eb3,g3]@3 ~@2", // Eb Eb7 Eb
  AR: "[d3,e3,g3,a3]@4 ~@6 [d4,e4,g4,a4]!2 [d4,e4,g4,a4]@4, ~@3 [d3,e3,g3,a3]@3 ~@2", // Dsus4
  AS: "[db3,e3,g3,a3]@4 ~@2 [db3,e3,g3,a3,db4,e4,g4,a4]@7 ~@3", AT: "[d3,f3,a3,d4,f4,a4] ~@5 [d3,f3,a3,d4]@10",
  AU: "[eb3,f3,ab3,bb3]@4 ~@2 [d3,f3,bb3]@4 [d4,f4,ab4,bb4]!2 [d4,f4,ab4,bb4]@3 ~", // Ebsus4 Bb Bb7
  AV: "[eb3,gb3,bb3]@4 ~@2 [eb3,gb3,bb3]@4 [eb4,gb4,g4,bb4] [eb4,gb4,bb4] [eb4,gb4,bb4]@3 ~", // Ebm Eb Ebm
  AW: "[db3,gb3,bb3]@4 ~@2 [db3,gb3,bb3]@4 [db4,gb4,bb4]!2 [db4,gb4,bb4]@3 ~", // Gb
  AX: "[eb3,gb3,b3]@4 ~@2 [eb3,gb3,b3]@4 [eb4,gb4,b4]!2 [eb4,gb4,b4]@3 ~", // B
  AY: "[eb3,f3,ab3,bb3]@3 ~@3 [d3,f3,ab3,bb3]@4 [d4,f4,bb4]!2 [d4,f4,bb4]@3 ~", // Ebsus4 Bb7 Bb
  AZ: "[eb3,gb3,bb3]@3 ~@3 [eb3,gb3,bb3]@4 [eb4,gb4,bb4]!2 [eb4,gb4,bb4]@3 ~", // Ebm
  BA: "[db3,gb3,bb3]@3 ~@3 [db3,gb3,bb3]@4 [db4,gb4,bb4]!2 [db4,gb4,bb4]@3 ~", // Gb
  BB: "[b2,eb3,gb3]@3 ~@3 [b2,eb3,gb3]@4 [eb4,gb4,b4]!2 [eb4,gb4,b4]@3 ~", // B
  BC: "[eb3,gb3,bb3]@3 ~@7 [eb4,gb4,bb4]!2 [eb4,gb4,bb4]@4, ~@3 [eb3,gb3,bb3]@3 ~@2", // Ebm
  BD: "[db3,gb3,bb3]@4 ~@6 [db4,gb4,bb4] [gb4,bb4] [db4,gb4,bb4]@3 ~, ~@3 [db3,gb3,bb3]@3 ~@2", // Gb
  BE: "[eb3,gb3,b3]@3 ~@7 [eb4,gb4,b4]!2 [eb4,gb4,b4]@4, ~@3 [b2,eb3,gb3]@3 ~@2", // B
  BF: "[b2,e3,ab3]@3 ~@7 [d4,e4,ab4]!2 [d4,e4,ab4]@4, ~@3 [b2,e3,ab3]@3 ~@2", // E E7 E
  BG: "[eb3,f3,ab3,bb3]@4 ~@6 [eb4,f4,ab4,bb4]!2 [eb4,f4,ab4,bb4]@4, ~@3 [eb3,f3,ab3,bb3]@3 ~@2", // Ebsus4
  BH: "[d3,f3,ab3,bb3]@4 ~@2 [d3,f3,ab3,bb3,d4,f4,ab4,bb4]@7 ~@3", // Bb7
  BI: "[eb3,gb3,bb3,eb4,gb4,bb4] ~@5 [eb3,gb3,bb3,eb4]@10", // Ebm
  BJ: "[b2,e3,ab3]@3 ~@7 [d4,e4,ab4]!2 [d4,e4,ab4]@3 ~, ~@3 [b2,e3,ab3]@3 ~@2", // E E7 E
  BK: "[eb3,gb3,bb3,eb4,gb4,bb4] ~@5 [eb3,ab3,bb3,eb4]@10", // Ebm Ebsus4
})).s("gm_electric_guitar_clean").gain(0.42)

// other · rock organ · "Organ"
const rock_organ = note("<~@32 A ~@2 B ~@12 C ~@2 D ~ E ~ F ~@8 G ~@2 H ~@28 I ~@2 J ~@17>".pickRestart({
  A: "~@3 [g4,c5,eb5] ~@12", B: "f5 g5 f5@6 eb5 c5@2 ~@5", C: "~@3 [ab4,db5,e5] ~@12", D: "gb5 ab5 gb5@6 e5 db5@2 ~@5",
  E: "ab5@10 gb5 ~ e5 db5 ~@2", F: "gb5@2 e5 ~ gb5 ~ ab5@6 ~@4", G: "~@3 [a4,d5,f5] ~@12", H: "g5 a5 g5@6 f5 d5@2 ~@5",
  I: "~@3 [bb4,eb5,gb5] ~@12", J: "ab5 bb5 ab5@6 gb5 eb5@2 ~@5",
})).s("gm_rock_organ").gain(0.57).pan(0.2)

// bass · electric bass pick · "Bass"
const bass = note(`<
  ~@8 A B C D A B C D A B C D E F C G H F I J K L M D H B C D E F C G H F I J K L M N O P Q R S T Q U V T W X Y Z AA AB
  AC AD AE AB AF AG AE AH AI AG AJ AK AL AM AN AO AP AQ AR AO AS AT AR AU B AT AV AW AX AY AZ BA AP AQ AR AO AS AT AR AU
  B AT AV AW AX AY BB BC BB BC BB BC BD
>`.pickRestart({
  A: "c2@2 ~ c2 ~@2 c2@3 ~@7", B: "eb2 ~@2 eb2 ~@2 eb2@3 ~@7", C: "ab2@2 ~ ab2 ~@2 ab2@2 ~@8",
  D: "d2 ~@2 d2 ~@2 g1@2 ~@4 g1@2 bb1@2", E: "c2@2 ~ c2@2 ~ c2@2 ~@8", F: "eb2 ~@2 eb2 ~@2 eb2@2 ~@8",
  G: "d2 ~@2 d2 ~@2 g1@2 ~@6 g1 ~", H: "c2 ~@2 c2 ~@2 c2@3 ~@7", I: "ab2@2 ~ ab2@2 ~ ab2@2 ~@8",
  J: "db2@2 ~ db2 ~@2 db2@2 ~@8", K: "d2@2 ~ d2@2 ~ d2@2 ~@6 d2 ~", L: "g1 ~@2 g1 ~@2 g1@3 ~@7", M: "c2 bb1",
  N: "eb1 ~@2 eb1 ~@2 ab1@2 ~@4 ab1@2 b1@2", O: "db2@2 ~ db2 ~@2 db2@3 ~@7", P: "e2 ~@2 e2 ~@2 e2@3 ~@7",
  Q: "a2@2 ~ a2 ~@2 a2@2 ~@8", R: "eb2 ~@2 eb2 ~@2 ab1@2 ~@4 ab1@2 b1@2", S: "db2@2 ~ db2@2 ~ db2@2 ~@8",
  T: "e2 ~@2 e2 ~@2 e2@2 ~@8", U: "eb2 ~@2 eb2 ~@2 ab1@2 ~@6 ab1 ~", V: "db2 ~@2 db2 ~@2 db2@3 ~@7",
  W: "a2@2 ~ a2@2 ~ a2@2 ~@8", X: "d2@2 ~ d2 ~@2 d2@2 ~@8", Y: "eb2@2 ~ eb2@2 ~ eb2@2 ~@6 eb2 ~",
  Z: "ab1 ~@2 ab1 ~@2 ab1@3 ~@7", AA: "db2 b1", AB: "e2 ~@2 e2 ~@2 a1@2 ~@4 a1@2 c2@2", AC: "d2@2 ~ d2 ~@2 d2@3 ~@7",
  AD: "f2 ~@2 f2 ~@2 f2@3 ~@7", AE: "bb2@2 ~ bb2 ~@2 bb2@2 ~@8", AF: "d2@2 ~ d2@2 ~ d2@2 ~@8",
  AG: "f2 ~@2 f2 ~@2 f2@2 ~@8", AH: "e2 ~@2 e2 ~@2 a1@2 ~@6 a1 ~", AI: "d2 ~@2 d2 ~@2 d2@3 ~@7",
  AJ: "bb2@2 ~ bb2@2 ~ bb2@2 ~@8", AK: "eb2@2 ~ eb2 ~@2 eb2@2 ~@8", AL: "e2@2 ~ e2@2 ~ e2@2 ~@6 e2 ~",
  AM: "a1 ~@2 a1 ~@2 a1@3 ~@7", AN: "d2 ~@7", AO: "f2 ~@2 f2 ~@2 bb1@2 ~@4 bb1@2 db2@2",
  AP: "eb2@2 ~ eb2 ~@2 eb2@3 ~@7", AQ: "gb2 ~@2 gb2 ~@2 gb2@3 ~@7", AR: "b2@2 ~ b2 ~@2 b2@2 ~@8",
  AS: "eb2@2 ~ eb2@2 ~ eb2@2 ~@8", AT: "gb2 ~@2 gb2 ~@2 gb2@2 ~@8", AU: "f2 ~@2 f2 ~@2 bb1@2 ~@6 bb1 ~",
  AV: "b2@2 ~ b2@2 ~ b2@2 ~@8", AW: "e2@2 ~ e2 ~@2 e2@2 ~@8", AX: "f2@2 ~ f2@2 ~ f2@2 ~@6 f2 ~",
  AY: "bb1 ~@2 bb1 ~@2 bb1@3 ~@7", AZ: "eb2 db2", BA: "ab1 ~@2 ab1 ~@2 bb1@2 ~@4 bb1@2 db2@2", BB: "eb2@3 ab1@5",
  BC: "eb2@3 ab1@2 bb1 ab1@2", BD: "eb2 ~",
})).s("gm_electric_bass_pick").gain(0.71)

// drums · kick
const kick = s("bd").struct("<~@8 A@8 B@13 C B@15 C B@15 C B@15 C B@15 C B@15 C B@6 D>".pickRestart({
  A: "x ~@2 x ~@2 x ~@9", B: "x!4", C: "x!3 ~", D: "x",
})).gain(0.8)

// drums · snare
const snare = s("sd").struct("<~@16 A@13 B A@15 B A@15 B A@15 B A@15 B A@15 B A@6 ~>".pickRestart({
  A: "~ x ~ x", B: "x!5 ~@3",
})).gain(0.8)

// drums · hihat
const hihat = s("hh").struct(`<
  A B C D E A@2 F A B G D H A@2 F I@3 J I@3 K I L I@2 M N J I@4 J I@3 K I L I@2 M N J I@4 J I@3 K I L I@2 M N J I@4 J
  I@3 K I L I@2 M N J I@4 J I@3 K I L I@2 M N J I@4 J I@3 K I L I@2 M N J I J I J I ~
>`.pickRestart({
  A: "x!10 ~ x!5", B: "x!2 ~ x!13", C: "x!2 ~ x!3 ~ x!8 ~", D: "x!2 ~ x!10 ~ x ~", E: "x!2 ~ x!3 ~ x!9",
  F: "x!2 ~ x!7 ~@2 x!2 ~@2", G: "x!2 ~ x!3 ~ x!2 ~ x!3 ~ x!2", H: "x!2 ~ x!3 ~ x!6 ~ x ~",
  I: "x ~ x!3 ~ x!3 ~@3 x ~ x!2", J: "x ~ x!3 ~ x!3 ~ x!3 ~@3", K: "x ~ x!3 ~ x!3 ~ x!4 ~@2",
  L: "x ~ x!3 ~ x!3 ~@3 x ~ x ~", M: "x ~ x!3 ~ x!3 ~@3 x!2 ~@2", N: "x ~ x!3 ~ x!3 ~@7",
})).gain(0.48)

// drums · open hat
const open_hat = s("oh").struct(`<
  A B C D E A@2 F A B G D H A@2 F A@3 I A@3 I A@4 J ~ I A@4 I A@3 I A@4 J ~ I A@4 I A@3 I A@4 J ~ I A@4 I A@3 I A@4 J ~
  I A@4 I A@3 I A@4 J ~ I A@4 I A@3 I A@4 J ~ I A I A I A ~
>`.pickRestart({
  A: "~@5 x ~@2", B: "~ x ~@6", C: "~@2 x ~@3 x ~@8 x", D: "~@2 x ~@10 x ~ x", E: "~ x ~ x ~@4", F: "~ x ~@3 x ~ x",
  G: "~@2 x ~@3 x ~@2 x ~@3 x ~@2", H: "~@2 x ~@3 x ~@6 x ~ x", I: "~@7 x", J: "~@5 x ~ x",
})).gain(0.8)

// drums · crash
const crash = s("cr").struct(`<
  ~@16 A ~@13 A ~ A ~@13 A ~ A ~@13 A ~ A ~@13 A ~ A ~@13 A ~ A ~@13 A ~ A ~ A ~ A
>`.pickRestart({
  A: "x",
})).gain(0.8)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@16 A@13 B ~ A@14 B ~ A@14 B ~ A@14 B ~ A@14 B ~ A@14 B ~ A ~ A ~ A ~
>`.pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~ x ~ x ~@4",
})).gain(0.48)

// drums · congas
const congas = s("conga:13").struct("<~@16 A@13 ~ A@15 ~ A@15 ~ A@15 ~ A@15 ~ A@15 ~ A@6 ~>".pickRestart({
  A: "~@14 x!2",
})).gain(1.54)

// … 27 more lines