Strudelify
Sunny cover art

Richard Anthony

Sunny

Anthony Richard

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, A@4 for four bars: 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@4 AP AQ AR
>`.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: "[db6,eb6] eb6 ~@2 eb6 db6 eb6 ~ eb6 db6 eb6 ~ eb6 db6 eb6 ~", // Dbsus2
  AQ: "[db6,eb6] eb6 ~@2 [db6,eb6] eb6 ~@2 [db6,eb6] eb6 ~@2 eb6 db6 eb6 db6", AR: "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 L M N O P Q R S T U V W P X Y Z AA AB AC AD AE AF AG AH AI
  AJ AK AL AE AM AN AO AP AQ AR AS AT AU AV AW AX AY AZ BA AT BB BC BD BE BF BG BH AT AU AV AW AX AY AZ BA AT BB BC BD
  BE BF BG BI@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: "[db3,eb3,gb3,ab3]@4 ~@2 [c3,eb3,ab3]@4 [c4,eb4,gb4,ab4]!2 [c4,eb4,gb4,ab4]@3 ~", // Dbsus4 Ab Ab7
  Q: "[db3,e3,ab3]@4 ~@2 [db3,e3,ab3]@4 [db4,e4,f4,ab4] [db4,e4,ab4] [db4,e4,ab4]@3 ~", // Dbm Db Dbm
  R: "[b2,e3,ab3]@4 ~@2 [b2,e3,ab3]@4 [b3,e4,ab4]!2 [b3,e4,ab4]@3 ~", // E
  S: "[db3,e3,a3]@4 ~@2 [db3,e3,a3]@4 [db4,e4,a4]!2 [db4,e4,a4]@3 ~", // A
  T: "[db3,eb3,gb3,ab3]@3 ~@3 [c3,eb3,gb3,ab3]@4 [c4,eb4,ab4]!2 [c4,eb4,ab4]@3 ~", // Dbsus4 Ab7 Ab
  U: "[db3,e3,ab3]@3 ~@3 [db3,e3,ab3]@4 [db4,e4,ab4]!2 [db4,e4,ab4]@3 ~", // Dbm
  V: "[b2,e3,ab3]@3 ~@3 [b2,e3,ab3]@4 [b3,e4,ab4]!2 [b3,e4,ab4]@3 ~", // E
  W: "[a2,db3,e3]@3 ~@3 [a2,db3,e3]@4 [db4,e4,a4]!2 [db4,e4,a4]@3 ~", // A
  X: "[db3,e3,ab3]@3 ~@7 [db4,e4,ab4]!2 [db4,e4,ab4]@4, ~@3 [db3,e3,ab3]@3 ~@2", // Dbm
  Y: "[b2,e3,ab3]@4 ~@6 [b3,e4,ab4] [e4,ab4] [b3,e4,ab4]@3 ~, ~@3 [b2,e3,ab3]@3 ~@2", // E
  Z: "[db3,e3,a3]@3 ~@7 [db4,e4,a4]!2 [db4,e4,a4]@3 ~, ~@3 [a2,db3,e3]@3 ~@2", // A
  AA: "[a2,d3,gb3]@4 ~@6 [c4,d4,gb4]!2 [c4,d4,gb4]@3 ~, ~@3 [a2,d3,gb3]@3 ~@2", // D D7 D
  AB: "[db3,eb3,gb3,ab3]@4 ~@6 [db4,eb4,gb4,ab4]!2 [db4,eb4,gb4,ab4]@4, ~@3 [db3,eb3,gb3,ab3]@3 ~@2", // Dbsus4
  AC: "[c3,eb3,gb3,ab3]@4 ~@2 [c3,eb3,gb3,ab3,c4,eb4,gb4,ab4]@7 ~@3", // Ab7
  AD: "[db3,e3,ab3,db4,e4,ab4] ~@5 [db3,e3,ab3,db4]@10", // Dbm
  AE: "[d3,e3,g3,a3]@4 ~@2 [db3,e3,a3]@4 [db4,e4,g4,a4]!2 [db4,e4,g4,a4]@3 ~", // Dsus4 A A7
  AF: "[d3,f3,a3]@4 ~@2 [d3,f3,a3]@4 [d4,f4,gb4,a4] [d4,f4,a4] [d4,f4,a4]@3 ~", // Dm D Dm
  AG: "[c3,f3,a3]@4 ~@2 [c3,f3,a3]@4 [c4,f4,a4]!2 [c4,f4,a4]@3 ~", // F
  AH: "[d3,f3,bb3]@4 ~@2 [d3,f3,bb3]@4 [d4,f4,bb4]!2 [d4,f4,bb4]@3 ~", // Bb
  AI: "[d3,e3,g3,a3]@3 ~@3 [db3,e3,g3,a3]@4 [db4,e4,a4]!2 [db4,e4,a4]@3 ~", // Dsus4 A7 A
  AJ: "[d3,f3,a3]@3 ~@3 [d3,f3,a3]@4 [d4,f4,a4]!2 [d4,f4,a4]@3 ~", // Dm
  AK: "[c3,f3,a3]@3 ~@3 [c3,f3,a3]@4 [c4,f4,a4]!2 [c4,f4,a4]@3 ~", // F
  AL: "[bb2,d3,f3]@3 ~@3 [bb2,d3,f3]@4 [d4,f4,bb4]!2 [d4,f4,bb4]@3 ~", // Bb
  AM: "[d3,f3,a3]@3 ~@7 [d4,f4,a4]!2 [d4,f4,a4]@4, ~@3 [d3,f3,a3]@3 ~@2", // Dm
  AN: "[c3,f3,a3]@4 ~@6 [c4,f4,a4] [f4,a4] [c4,f4,a4]@3 ~, ~@3 [c3,f3,a3]@3 ~@2", // F
  AO: "[d3,f3,bb3]@3 ~@7 [d4,f4,bb4]!2 [d4,f4,bb4]@3 ~, ~@3 [bb2,d3,f3]@3 ~@2", // Bb
  AP: "[bb2,eb3,g3]@4 ~@6 [db4,eb4,g4]!2 [db4,eb4,g4]@4, ~@3 [bb2,eb3,g3]@3 ~@2", // Eb Eb7 Eb
  AQ: "[d3,e3,g3,a3]@4 ~@6 [d4,e4,g4,a4]!2 [d4,e4,g4,a4]@4, ~@3 [d3,e3,g3,a3]@3 ~@2", // Dsus4
  AR: "[db3,e3,g3,a3]@4 ~@2 [db3,e3,g3,a3,db4,e4,g4,a4]@7 ~@3", AS: "[d3,f3,a3,d4,f4,a4] ~@5 [d3,f3,a3,d4]@10",
  AT: "[eb3,f3,ab3,bb3]@4 ~@2 [d3,f3,bb3]@4 [d4,f4,ab4,bb4]!2 [d4,f4,ab4,bb4]@3 ~", // Ebsus4 Bb Bb7
  AU: "[eb3,gb3,bb3]@4 ~@2 [eb3,gb3,bb3]@4 [eb4,gb4,g4,bb4] [eb4,gb4,bb4] [eb4,gb4,bb4]@3 ~", // Ebm Eb Ebm
  AV: "[db3,gb3,bb3]@4 ~@2 [db3,gb3,bb3]@4 [db4,gb4,bb4]!2 [db4,gb4,bb4]@3 ~", // Gb
  AW: "[eb3,gb3,b3]@4 ~@2 [eb3,gb3,b3]@4 [eb4,gb4,b4]!2 [eb4,gb4,b4]@3 ~", // B
  AX: "[eb3,f3,ab3,bb3]@3 ~@3 [d3,f3,ab3,bb3]@4 [d4,f4,bb4]!2 [d4,f4,bb4]@3 ~", // Ebsus4 Bb7 Bb
  AY: "[eb3,gb3,bb3]@3 ~@3 [eb3,gb3,bb3]@4 [eb4,gb4,bb4]!2 [eb4,gb4,bb4]@3 ~", // Ebm
  AZ: "[db3,gb3,bb3]@3 ~@3 [db3,gb3,bb3]@4 [db4,gb4,bb4]!2 [db4,gb4,bb4]@3 ~", // Gb
  BA: "[b2,eb3,gb3]@3 ~@3 [b2,eb3,gb3]@4 [eb4,gb4,b4]!2 [eb4,gb4,b4]@3 ~", // B
  BB: "[eb3,gb3,bb3]@3 ~@7 [eb4,gb4,bb4]!2 [eb4,gb4,bb4]@4, ~@3 [eb3,gb3,bb3]@3 ~@2", // Ebm
  BC: "[db3,gb3,bb3]@4 ~@6 [db4,gb4,bb4] [gb4,bb4] [db4,gb4,bb4]@3 ~, ~@3 [db3,gb3,bb3]@3 ~@2", // Gb
  BD: "[eb3,gb3,b3]@3 ~@7 [eb4,gb4,b4]!2 [eb4,gb4,b4]@4, ~@3 [b2,eb3,gb3]@3 ~@2", // B
  BE: "[b2,e3,ab3]@3 ~@7 [d4,e4,ab4]!2 [d4,e4,ab4]@4, ~@3 [b2,e3,ab3]@3 ~@2", // E E7 E
  BF: "[eb3,f3,ab3,bb3]@4 ~@6 [eb4,f4,ab4,bb4]!2 [eb4,f4,ab4,bb4]@4, ~@3 [eb3,f3,ab3,bb3]@3 ~@2", // Ebsus4
  BG: "[d3,f3,ab3,bb3]@4 ~@2 [d3,f3,ab3,bb3,d4,f4,ab4,bb4]@7 ~@3", // Bb7
  BH: "[eb3,gb3,bb3,eb4,gb4,bb4] ~@5 [eb3,gb3,bb3,eb4]@10", BI: "[eb3,gb3,bb3,eb4,gb4,bb4] ~@5 [eb3,ab3,bb3,eb4]@10",
})).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 A F C H I J K D A B C D E F C G A F C H I J K L H M N O H M N P Q M N R S T U V R
  W X V R W X Y Z W X B AA AB AC AD B AE AF AD AG AE AF AH B AE AF M AI AJ AK AL B AE AF AD AG AE AF AH B AE AF M AI AJ
  AM AN AM AN AM AN AO
>`.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: "db2@2 ~ db2 ~@2 db2@2 ~@8", I: "d2@2 ~ d2@2 ~ d2@2 ~@6 d2 ~",
  J: "g1 ~@2 g1 ~@2 g1@3 ~@7", K: "c2 bb1", L: "eb1 ~@2 eb1 ~@2 ab1@2 ~@4 ab1@2 b1@2", M: "e2 ~@2 e2 ~@2 e2@2 ~@8",
  N: "a2@2 ~ a2 ~@2 a2@2 ~@8", O: "eb2 ~@2 eb2 ~@2 ab1@2 ~@4 ab1@2 b1@2", P: "eb2 ~@2 eb2 ~@2 ab1@2 ~@6 ab1 ~",
  Q: "db2@2 ~ db2 ~@2 db2@3 ~@7", R: "d2@2 ~ d2 ~@2 d2@2 ~@8", S: "eb2@2 ~ eb2@2 ~ eb2@2 ~@6 eb2 ~",
  T: "ab1 ~@2 ab1 ~@2 ab1@3 ~@7", U: "db2 b1", V: "e2 ~@2 e2 ~@2 a1@2 ~@4 a1@2 c2@2", W: "f2 ~@2 f2 ~@2 f2@2 ~@8",
  X: "bb2@2 ~ bb2 ~@2 bb2@2 ~@8", Y: "e2 ~@2 e2 ~@2 a1@2 ~@6 a1 ~", Z: "d2@2 ~ d2 ~@2 d2@3 ~@7",
  AA: "e2@2 ~ e2@2 ~ e2@2 ~@6 e2 ~", AB: "a1 ~@2 a1 ~@2 a1@3 ~@7", AC: "d2 ~@7",
  AD: "f2 ~@2 f2 ~@2 bb1@2 ~@4 bb1@2 db2@2", AE: "gb2 ~@2 gb2 ~@2 gb2@2 ~@8", AF: "b2@2 ~ b2 ~@2 b2@2 ~@8",
  AG: "eb2@2 ~ eb2@2 ~ eb2@2 ~@8", AH: "f2 ~@2 f2 ~@2 bb1@2 ~@6 bb1 ~", AI: "f2@2 ~ f2@2 ~ f2@2 ~@6 f2 ~",
  AJ: "bb1 ~@2 bb1 ~@2 bb1@3 ~@7", AK: "eb2 db2", AL: "ab1 ~@2 ab1 ~@2 bb1@2 ~@4 bb1@2 db2@2", AM: "eb2@3 ab1@5",
  AN: "eb2@3 ab1@2 bb1 ab1@2", AO: "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)

// drums · congas
const congas_2 = s("conga:18").struct(`<
  ~@16 A B C D B@3 E B@5 F B@2 A B C D B@3 E B@5 F B@2 A B C D B@3 E B@5 F B@2 A B C D B@3 E B@5 F B@2 A B C D B@3 E B@5
  F B@2 A B C D B@3 E B@5 F B@6 ~
>`.pickRestart({
  A: "x ~@5 x!2 ~@8", B: "x ~ x ~@3 x!2 ~ x ~@6", C: "x ~@5 x!2 ~ x ~@6", D: "x ~ x ~@3 x!2 ~ x ~@2 x ~@3",
  E: "~@2 x ~@3 x!2 ~ x ~@6", F: "x ~ x ~@3 x!2 ~@8",
})).gain(1.54)

// … 18 more lines