Strudelify

The Promise of a New Day

Paula Abdul

KeyA♭ majorTempo120 bpm
0:00/0:00
// The Promise of a New Day — Paula Abdul
// 120 bpm, 4/4, key G# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 134 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/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 finger · "FINGERDBAS"
const bass = note(`<
  ~@5 A B C D E F G H I J K L M F G N I J O P O Q R S T U V W X Y Z@2 AA@2 AB AC AD AE AF AG AH AI AJ AK R S R S AL AM
  AN AO ~@7 AP V AQ X AR V AS AT@2 F G AU N AV J AW AX AY AI G N AZ@2 BA BB BC BD R S BE BF BG ~@7 BH BI BJ BK BL BM BN
  BO ~ BP BQ AG BR BS BT BU BV BW BR BS BT BU BV BX BR BS BT BY BZ@3
>`.pickRestart({
  A: "ab1 ~@5 ab1@2 ~@6 ab2!2", B: "ab1@2 ~@4 ab1 ~@5 gb1@2 g1@2", C: "ab1 ~@5 ab1 ~@5 gb1@2 g1@2",
  D: "ab1 ~@5 ab1 ~@5 c3 bb2 ab2 ~", E: "ab1@2 ~@4 ab1@2 ~@6 ab2!2", F: "ab1@2 ~@4 ab1 ~ ab1 ~ ab2!2 ab1 ~ ab2!2",
  G: "ab1@2 ~@4 ab1 ~ ab1 ~@3 ab2 ~ ab2 ~", H: "ab1@2 ~@4 ab1 ~ ab1 ~ ab2 ~ ab1 ~ ab2 ~",
  I: "gb1@5 ~ gb1 ~ gb1@6 gb2 ~", J: "db2@5 ~ db2 ~ eb2@3 ~ eb2@3 ~", K: "ab1 ~ ab2!2 ab1 ~ ab2!2 ab1@2 ~@4 ab1 ~",
  L: "ab1@3 ~ ab1@3 ~ ab1 ~ ab2!2 ab1 ~ ab2!2", M: "ab1@2 ~@4 ab1@2 ab1@3 ~@3 ab2!2",
  N: "ab1@2 ~@4 ab1 ~ c2@3 db2@3 eb2@2", O: "ab1 ~ ab2!2 ab1@2 ab2@2 ab1@4 ~@2 ab1 ~",
  P: "ab1@4 ~@2 ab1 ~ ab1 ~ ab2!2 ab1 ~ db2 eb2", Q: "ab1@4 ~@2 ab1 ~ ab1@3 ~ ab2@2 g2@2", R: "f2@2 ~ f2 f2@3 f2",
  S: "db2@2 ~ db2 eb2@2 eb2@2", T: "ab1@3 ~@3 ab1 ~ ab1@2 ab2!2 ab1@2 ab2!2",
  U: "ab1@3 ~@3 ab1 ~ bb2@2 ab2@2 g2@2 eb2@2", V: "f2@5 ~ f2@2 f2@6 f2@2", W: "f1@5 ~ f1@2 f1@3 ~ f2@2 f2@2",
  X: "db2@2 ~ db2 db2@2 db2 c2", Y: "db2@5 ~ c2@2 bb1@3 ~ bb1@2 eb2 e2",
  Z: "[f2@5 ~ f2 ~@3 g2 ~@3 ab2@4 g2@2 f2@3 ~ f2@5 ~ f2@2]/2",
  AA: "[db2@5 ~ db2 ~ db2@6 eb2@8 ~@2 eb2@2 eb3!2 eb2@2 eb3!2]/2", AB: "ab1@4 ~@2 ab1 ~ ab1@2 ab2!2 ab1@2 ab2!2",
  AC: "ab1@5 ~ ab1 ~ ab1@3 ~ c3 bb2 ab2@2", AD: "ab1@5 ~ ab1 ~ ab1@7 ~",
  AE: "ab1@2 ab2!2 ab1@2 ab2!2 ab1@2 ab2 ~ ab1@2 ab1 ab2", AF: "gb2@5 ~ gb2@2 gb2@5 ~ gb2@2",
  AG: "db2@5 ~ db2@2 eb2@4 eb2@3 ~", AH: "ab1@3 ~@3 ab1@2 ab1@4 ~@2 ab2!2",
  AI: "ab1@4 ~@2 ab1 ~ ab1 ~ ab2!2 ab1 ~ gb2 ab2", AJ: "ab1@4 ~@2 ab1 ~ ab1 ~ ab2!2 ab1 ~ ab2!2",
  AK: "ab1@4 ~@2 ab1 ~ ab1@2 ab2@2 g2@2 ab2@2", AL: "ab1@2 ab2!2 ab1!2 eb2@2 ab1@3 ~@3 ab1 ~",
  AM: "ab1@2 ab2!2 ~@2 ab1@2 ~@2 db3@2 ~@2 eb3@2", AN: "ab2 ~@2 ab2@2 ab1 ~@2",
  AO: "ab1@2 ab2!2 ab1@2 bb2@2 ab1@2 ab2!6", AP: "~@3 c2", AQ: "f2@5 ~ f2@2 f2@7 ~", AR: "db2@5 ~ c2@2 bb1@5 ~ bb1@2",
  AS: "f2@2 ab2@3 f2@2 f2", AT: "[db2@5 ~ db2 ~ db2@6 eb2@4 f2@2 eb2@2 c2@2 ab2@2 c2@2 bb1@2 c2@2]/2",
  AU: "ab1@2 ~@4 ab1 ~ ab1@7 ~", AV: "gb2@5 ~ gb2 ~ gb2@6 gb2 ~", AW: "ab1@4 ~@2 ab1@2 ab1 ~ ab2!2 ab1@2 ab2 ~",
  AX: "ab1@4 ~@2 ab1 ~ ab1@3 ~@3 ab1 ~", AY: "ab1@4 ~@2 ab1@2 ab1 ~ ab2 ~ ab1 ~ ab2 bb2",
  AZ: "[gb1@5 ~ gb1 ~ gb1@6 db2@7 ~ db2 ~ eb2@3 ~ eb2@3 ~]/2", BA: "ab1 ~ ab2!2 ab1@2 bb2@2 ab1@4 ~@2 ab1 ~",
  BB: "ab1@4 ~@2 ab1 ~ f2@4 c2@4", BC: "ab1@5 ~ ab1 ~ ab1 ~ ab2!2 ab1@2 ab2@2",
  BD: "ab1@4 ~@2 ab1 ~ ab1@2 ab2@2 g2@2 gb2@2", BE: "ab1@3 ab2 ab1!2 ab2@2 ab1@2 ab2 ~@3 ab1@2",
  BF: "db2@4 ~@2 db2@2 eb2@3 ~ eb2@4", BG: "ab1@5 ~@11", BH: "gb1 ~@2 gb1 ~@4", BI: "~@2 gb1@3 ~ gb1@2 ab1@3 ~@5",
  BJ: "gb1@2 ~@4 gb1@3 ~@7", BK: "~@2 gb1@2 ~@2 gb1@2 ab1@3 ~@5", BL: "~@7 ab1", BM: "db2 ~@4 eb2 ~ bb1",
  BN: "ab1@3 ~@13", BO: "~@2 gb1@3 ~@7 c2@4", BP: "~@10 db3@2 ab2 ~ eb2@2", BQ: "f2!2 eb2 f2 c3 f2 eb2 f2",
  BR: "ab1@3 ~@3 ab1 ~ ab1 ~ ab2!2 ab1@2 ab2 ~", BS: "ab1@3 ~@3 ab1 ~ ab1@3 ~ c3@4",
  BT: "ab1@3 ~@3 ab1 ~ ab1@3 ~@3 ab1 ~", BU: "ab1@2 ab1!2 ~@2 ab1@2 ab1@3 ~ ab2@2 ab1@2", BV: "f2@3 f2 f2@3 f2",
  BW: "db2@5 ~ db2 ~ eb2@5 ~ eb2@2", BX: "db2!2 eb2!2", BY: "~@2 ab1!2 eb2@2 ab1@2 ~@2 c2@2 ~@2 eb2@2",
  BZ: "[ab1@11 ~]/3",
})).s("gm_electric_bass_finger").gain(0.62)

// other · acoustic guitar nylon · "NYLON GTR"
const acoustic_guitar_nylon = note(`<
  ~@15 A@2 ~@6 A@4 B@2 C ~@4 D E@2 F G H I J K L@2 A@6 M@2 A@4 ~@10 N ~ E@2 F G H I J O L@2 P@2 Q R S T U@4 A@4 M@2 V W
  V X Y@4 Z AA AB AC AD@2 AE@2 AF@2 AG@2 AF@4 AH@2 AF@4 AH@2 AF@2 AH@2 ~@3
>`.pickRestart({
  A: "[c5 ~@5 ab5@4 bb5 ~@3 db5@4 c5@2 bb4@2 ab4@2 bb4@4 ab4@4]/2", B: "[c5 ~@13 db5@4 c5@2 bb4@2 ab4@2 bb4@4 ab4@4]/2",
  C: "c5 ~@5 ab5@4 bb5 ~@5", D: "~@2 f5@4 eb5@2 c5@3 ab4@3 ~@2", E: "[~@2 c6!2 bb5@2 g5 f5@2 ab5 g5@2 c5 ab4@2 db5]/2",
  F: "c5@2 eb5 bb4@2 ab4@2 eb5", G: "f5 ab5 db6 eb6 db6@2 c6@2", H: "bb5@3 ~ c6@2 bb5@4 ab5@2 ab5@2 ab5@2",
  I: "bb5@2 ab5@2 ab5@4 c6@3 ~@5", J: "bb5@2 c6 bb5@2 ab5!3", K: "bb5@2 ab5@2 ab5@4 c6@3 c6@3 c6@2",
  L: "[bb5@4 ab5@2 ab5@5 ~@3 f5@4 ab5@2 bb5@2 c6@2 bb5@2 ~@2 ab5@3 ~]/2",
  M: "[c5 ~@5 bb5@4 ab5 ~@3 db5@4 c5@2 bb4@2 ab4@2 bb4@4 ab4@4]/2", N: "~@3 c5@2 ab4 bb4 ab4",
  O: "b5 ab5 ab5@2 ab5@4 c6@3 c6@3 c6@2",
  P: "[c5 ~@5 ab5@4 bb5 ~@3 db5@4 c5@2 bb4@2 ab4@2 ~@2 ab5@2 bb5@2 ab5@2, ~@6 bb4 ab4]/2",
  Q: "c6@7 ~@3 ab5@2 ab5@2 ab5@2", R: "bb5 ab5 ab5@2 ab5 f5@2 ~", S: "c6@2 eb6 c6@2 ab5!3", T: "c6 bb5 ab5 bb5 ab5@3 ~",
  U: "[~@4 c6@2 bb5@3 ~@3 ab5@2 eb6@4 c6@2 ab5@2 f5@2 b5@2 ~@2 bb5@2 ~@2 c5 ~@5 ab5@4 bb5 ~@3 db5@4 c5@2 bb4@2 ab4@2 bb4@4 ab4@4, ~@30 ab5@5 ~@29]/4",
  V: "[bb3,db4]@2 [db4,f4] [bb3,db4]@2 [ab3,c4]!3", W: "[bb3,db4]@2 [ab3,c4]@2 [ab3,c4]@4 [c4,eb4]@3 ~@5",
  X: "[bb3,db4]@2 [ab3,c4]@2 [ab3,c4]@2 ~@2 [c4,eb4]@3 [c4,eb4]@3 [c4,eb4]@2", // Bbm Ab Cm
  Y: "[[c4,eb4]@2 [bb3,db4]@2 [bb3,db4]@2 [bb3,db4]@8 [db4,f4]@4 [c4,eb4]@2 [bb3,db4]@2 [ab3,c4]@2 [bb3,db4]@4 ~@4 c5 ~@5 ab5@4 bb5 ~@3 [db5,db6]@4 [c5,c6]@2 [bb4,bb5]@2 [ab4,ab5]@2 [bb4,bb5]@4 [ab4,ab5]@3 ~, ~@14 [ab3,c4]@3 ~@15]/4", // Cm Bbm Db Cm Bbm Ab Bbm Db …
  Z: "[bb4,db5,bb5]@3 ~ [c5,eb5,c6]@2 [bb4,db5,bb5]@4 [ab4,c5,ab5]@2 [ab4,bb4,ab5]@2 [ab4,ab5]@2", // Bbm Cm Bbm Ab Absus2 Ab
  AA: "[bb4,bb5]@2 [ab4,ab5]@2 [ab4,ab5]@4 [c5,c6]@3 ~@5", // Bb Ab C
  AB: "[bb4,db5,bb5]@2 [c5,eb5,c6] [bb4,db5,bb5]@2 [ab4,c5,ab5] [ab4,bb4,ab5] [ab4,ab5]", // Bbm Cm Bbm Ab Absus2 Ab
  AC: "[b4,b5] [bb4,bb5] [ab4,ab5]@2 [ab4,ab5]@4 [c5,c6]@3 [db5,c6]@3 [c5,eb5,c6]@2", // B Bb Ab C Dbmaj7 Cm
  AD: "[[bb4,db5,bb5]@4 [ab4,c5,ab5]@2 [ab4,bb4,ab5]@5 ~@3 [f4,db5,f5]@4 [ab4,c5,ab5]@2 [bb4,db5,bb5]@2 [ab4,c5,c6]@2 [bb4,bb5]@4 [ab4,ab5]@3 ~]/2", // Bbm Ab Absus2 Db Ab Bbm Ab Bb …
  AE: "[c5 ~@5 ab5@4 bb5 ~@3 [db5,db6]@4 [c5,c6]@2 [bb4,bb5]@2 [ab4,ab5]@2 [bb4,bb5]@4 [ab4,ab5]@4]/2", // Db C Bb Ab Bb Ab
  AF: "[c5@2 ~@4 ab5@4 bb5 ~@3 [db5,db6]@4 [c5,c6]@2 [bb4,bb5]@2 [ab4,ab5]@2 [bb4,bb5]@4 [ab4,ab5]@4]/2", // Db C Bb Ab Bb Ab
  AG: "[c5@2 ~@4 ab5@4 bb5 ~@3 [db5,db6]@4 [c5,c6]@2 [bb4,bb5]@2 [ab4,ab5]@2 [bb4,bb5]@2 [c5,c6]@2 [bb4,bb5]@2 [ab4,ab5]@2]/2", // Db C Bb Ab Bb C Bb Ab
  AH: "[c5@2 ~@4 ab5@4 bb5 ~@3 [db5,db6]@4 [eb5,eb6]@2 [c5,c6]@2 [ab4,ab5]@2 [bb4,bb5]@2 [c5,c6]@2 [bb4,bb5]@2 [ab4,ab5]@2]/2", // Db Eb C Ab Bb C Bb Ab
})).s("gm_acoustic_guitar_nylon").gain(0.4)

// other · shakuhachi
const shakuhachi = note("<~ A@3 ~ B@4 ~@52 B@4 ~@69>".pickRestart({
  A: "[~@7 ab5 ab5@6 eb5@22 ~@12]/3", B: "[ab5@3 db6@2 eb6@2 db6@2 eb6 db6 c6 bb5@2 ab5@2]/2",
})).s("gm_shakuhachi").gain(0.64)

// other · tubular bells · "TUBULARBEL"
const tubular_bells = note(`<
  ~@12 A B C ~@5 A B C ~@4 D E ~@13 A B C ~@4 D E ~@2 D E ~@21 A B C ~@5 A B C ~@4 D E ~@13 A B C ~@6 D E ~@4 D E ~@4 D
  E ~@5
>`.pickRestart({
  A: "~@8 [ab4,ab5]@2 ~ [ab4,ab5] ~@2 eb4@2, ~@14 eb5 ~", // Ab
  B: "[ab4,ab5]@2 ~@4 eb4@2 ~@2 [ab4,ab5] ~@3 [ab4,ab5] ~, ~@6 eb5 ~@9", // Ab
  C: "~@2 [ab4,ab5] ~ [eb4,eb5] ~ [ab4,ab5] ~ [eb4,eb5] ~@3 [ab4,ab5] ~@3", D: "~@14 [db5,db6] ~",
  E: "~@2 [c5,c6] ~ [bb4,bb5] ~ [ab4,ab5] ~ [bb4,bb5] ~@3 [ab4,ab5] ~@3", // C Bb Ab Bb Ab
})).s("gm_tubular_bells").gain(0.18)

// chords · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2 = note(`<
  ~@13 A@4 B@2 C@2 D@2 E@2 F@2 G@2 H@2 I@2 J K L@2 M N M O P Q R O S@2 T@2 U V W@2 X@2 O Y ~@8 I@2 J K L@2 M N ~@4 A@4
  B@2 C@2 D@2 E@2 F@2 G@2 Z@2 ~@16 AA@2 AB@2 AC@4 AD@2 AC@4 ~ AE AF@2 AG@2 AH@3
>`.pickRestart({
  A: "[db5@4 c5@2 ~@26 d5@22 c5@2 bb4@4 c5@3 ~, ~@3 bb4@23 ~@6, ~@8 f4@19 ~@5]/4", B: "[f4,bb4]/2",
  C: "[[eb4,ab4]@24 c5@3 db5@3 eb5@2]/2", D: "[db5@4 c5@2 ~@10 f4@15 ~, ~@6 bb4@25 ~]/2",
  E: "[d5@3 eb5@2 d5@2 c5@7 bb4@2, f4@31 ~, bb4@27 ~@5]/2", F: "[d5@6 eb5@5 f5@20 ~, [f4,bb4]@31 ~]/2",
  G: "[bb4@7 ~ ab4@16 bb4@2 c5@2 bb4@2 ab4@2, f4]/2", H: "[d5@6 eb5@21 ~ ab4@2 g4@2, [f4,bb4]@27 ~@5]/2",
  I: "[c5@3 bb4@2 g4 c4 ab4@9]/2", J: "[eb4,g4]", K: "[f4,ab4]@15 ~", L: "[ab4@9 f5 eb5@6]/2", M: "c5", N: "db5@15 ~",
  O: "eb5", P: "bb4@3 eb5@5", Q: "f5@3 eb5@5", R: "db5", S: "[d5@3 eb5@3 f5@7 eb5 d5@2, [f4,bb4]@31 ~]/2",
  T: "[d5@6 eb5@6 f5@19 ~, [f4,bb4]@31 ~]/2", U: "[ab4,eb5]", V: "[f4,bb4]", W: "[ab4@24 bb4@7 ~, eb5@31 ~]/2",
  X: "[d5@6 eb5@25 ~, ab4@31 ~]/2", Y: "~ eb4 f4 c5 bb4@2 ab4@2", Z: "[d5@6 eb5@21 ~@5, bb4@27 ~@5]/2", AA: "bb3/2",
  AB: "[g5@2 f5 ~@7 c5@2 bb4@4, c4@16 db4@15 ~, ~@3 eb5@7 ~@6]/2",
  AC: "[d6@3 eb6@2 d6@11 d6@3 eb6@2 f6 eb6 d6@9, [f5,bb5]@63 ~]/4", AD: "[bb5@6 ab5@18 [g5,bb5]@7 ~, f5@3 ~]/2",
  AE: "c6 bb5, ab5", AF: "[eb5,ab5]/2", AG: "[eb6@3 d6@2 eb6@11, ab5]/2", AH: "[ab1,ab2,bb4,d5,ab5]/3",
})).s("gm_string_ensemble_2").gain(0.14)

// other · synth strings 1 · "SYN STR 1"
const synth_strings_1 = note(`<
  ~@23 A ~ A ~@3 A ~@3 B@2 C ~@9 A ~ A ~@5 A ~@13 B@2 C ~@17 A ~ A ~@3 A ~@21 A ~@3 A ~ A ~@3 A ~ A ~@6
>`.pickRestart({
  A: "~@6 [ab5,ab6] ~@3 [ab4,ab5] ~@5", B: "[~@14 [bb4,bb5]@8 [ab4,ab5]@7 ~ [ab4,ab5]@2]/2", C: "[ab4,ab5] ~@3",
})).s("gm_synth_strings_1").gain(0.25)

// other · percussive organ · "ORGAN 2"
const percussive_organ = note("<~@5 A@4 ~@52 A@4 ~@69>".pickRestart({
  A: "[ab4@3 db5@2 eb5@2 db5@2 eb5 db5 c5 bb4@2 ab4@2]/2",
})).s("gm_percussive_organ").gain(0.48)

// other · lead 2 sawtooth · "SAW WAVE"
const lead_2_sawtooth = note(`<
  ~@9 A@4 B C A D A@4 B C A@4 E C A@2 F@2 G H F@2 G I A@4 B C A@4 E C F C A@4 ~@8 F@2 G H F@2 G I A@4 B C A D A@4 B C
  A@4 E C A C ~@39
>`.pickRestart({
  A: "ab3 ~ ab3 ~ ab3 ~ ab3 ~ ab3 ~ ab3 ~ ab3 ~ ab3 ~", B: "gb3 ~ gb3 ~ gb3 ~ gb3 ~ gb3 ~ gb3 ~ gb3 ~ gb3 ~",
  C: "db3 ~ db3 ~ db3 ~ db3 ~ eb3 ~ eb3 ~ eb3 ~ eb3 ~", D: "ab3 ~ ab3 ~ ab3 ~ ab3 ~ ab3 ~ ab3 ~ ab3 ~ ab3@2",
  E: "f3 ~ f3@2 f3 ~ f3 ~ f3 ~ f3 ~ f3 ~ f3 ~", F: "f3 ~ f3 ~ f3 ~ f3 ~ f3 ~ f3 ~ f3 ~ f3 ~",
  G: "db3 ~ db3 ~ db3 ~ db3 ~ db3 ~ db3 ~ db3 ~ db3 ~", H: "db3 ~ db3 ~ db3 ~ db3 ~ bb2 ~ bb2 ~ bb2 ~ bb2 ~",
  I: "eb3 ~ eb3 ~ eb3 ~ eb3 ~ eb3 ~ eb3 ~ eb3 ~ eb3 ~",
})).s("gm_lead_2_sawtooth").gain(0.36)

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

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

// drums · low tom
const low_tom = s("lt").struct("<~ A B A ~@2 A ~ B ~@125>".pickRestart({
  A: "~@3 x", B: "~@7 x",
})).gain(0.78)

// drums · hihat
const hihat = s("hh").struct(`<
  ~ A B A B A B A B A B A B A B A B A B A B A B A B@7 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B
  A B A B A B A C ~@3
>`.pickRestart({
  A: "x!16", B: "x!14 ~@2", C: "x!13 ~@3",
})).gain(0.7)

// drums · mid tom
const mid_tom = s("mt").struct("<~@2 [~@5 x ~@2] ~@5 [~@5 x ~@2] ~@125>").gain(0.78)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@2 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A@7 ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
  A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
  ~ A ~ A ~ A ~ A ~@3
>`.pickRestart({
  A: "~@7 x",
})).gain(0.7)

// drums · high tom
const high_tom = s("ht").struct("<~@8 [~@3 x ~@4] ~@125>").gain(0.78)

// drums · crash
const crash = s("cr").struct(`<
  ~ A ~@2 B ~@4 A ~@2 B ~@3 B A ~@2 B ~@3 B ~@3 B ~@2 A ~@2 B ~@2 A B A ~@2 B ~@2 A B A ~@2 B A ~@2 B ~@2 A ~@2 B ~@3 B
  A ~@2 B ~@3 B A ~@2 B ~@3 B A ~@2 B ~@3 B A ~@2 B A ~ A B ~ B ~ B ~ B A B ~ B ~ B ~ B A B ~ B A B ~ B ~ B A B ~ B ~ B
  A B ~ B A ~@2
>`.pickRestart({
  A: "x", B: "~@5 x ~@2",
})).gain(0.78)

// drums · tambourine
const tambourine = s("tb").struct("<~ [~ x ~@2 x ~@2 x]!130 ~@3>").gain(0.62)

// … 25 more lines

More by Paula Abdul