Strudelify
Boogie on Reggae Woman cover art

1974 · Fulfillingness' First Finale

Boogie on Reggae Woman

Stevie Wonder

KeyD♭ majorTempo120 bpm
0:00/0:00
// Boogie on Reggae Woman — Wonder Stevie
// 120 bpm, 4/4, key C# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 110 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(120/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// bass · slap bass 2 · "Slap Bass"
const bass = note(`<
  ~@2 A B C D E F G H A B I J E F G K L B M N A O P Q R B S T A U V Q R B W X E F Y H A B Z AA E AB Y AC A B AD AE A U P
  Q R B AF AG A O P Q R B AH AI E F G AJ A AK AL AM E F G AN A B AO AP A U V Q R B AQ AR A U V Q R B AS AT A U V Q AU AV
  AW AX
>`.pickRestart({
  A: "bb1@2 ~@5 f2 bb1@2 ~@5 bb1", B: "eb2@2 ~@5 bb2 eb2@2 ~@5 f2", C: "ab2@2 ~ ab2 ~ eb3 ~@2 ab2 ~@3 ab2@3 ab2",
  D: "~ bb2 b2 c3 ~ eb2 ab2 ~ ab2@3 ab2 ab2@3 ab2", E: "ab2@2 ~@5 ab2!2 ~@6 ab3", F: "ab2@2 ~@5 g2 ab2@2 ~@5 ab3",
  G: "db2@2 ~@5 c2 db2 ~@6 db3", H: "db2@2 ~@5 ab1 db2 c2 ~ db2 ~ db2 ~ db2",
  I: "ab2 ~@4 eb2 b2 c3 ab2@3 ab2 ~ ab3 ~@2", J: "ab2@2 ~ ab2 ~ eb3 ~ ab2 ab2@3 ab2 ~ ab3 ~ ab2",
  K: "db2@2 ~@5 c2 db2@2 ~@5 g1", L: "bb1@2 ~@5 f2 bb1@2 ~@5 c2", M: "ab2@2 ~ ab2 ~ eb3 ~@2 gb2@2 ~ gb2 ~ db3 ~@2",
  N: "ab2@3 ab2 ~ gb2 b2 c3 ~ bb2 b2 c3 ~ eb2 gb2 ~", O: "db2@2 ~@5 ab2 db2@2 ~@5 ab2",
  P: "gb2@2 ~@5 db2 gb2@2 ~@5 bb2", Q: "gb2@2 ~@5 gb2 ab2@2 ~@5 a2", R: "bb1@2 ~@5 f2 bb1@2 ~@5 d2",
  S: "~ bb3 b3 c4 eb4 ~@2 ab2 ~ ab3 a3 bb3 ab2 ~ ab2 ab3", T: "ab2 eb3 ~ ab2 ~ ab3 ~ ab2!2 ab3 bb2 bb3 ab2 ab3 ~ ab2",
  U: "db2@2 ~@5 ab2 db2@2 ~@5 eb2", V: "gb2@2 ~@5 db2 gb2@2 ~@5 eb2",
  W: "ab2 ~ eb3 ab3 ~ c4 ~ ab2!2 ~ db3 ab3 ab2 ~ ab2 ab3", X: "~ ab2!2 ~ bb2 bb3 c3 c4 ~ ab2!2 ~ ab2 ab3 ~ ab2",
  Y: "db2@2 ~@5 f2 db2 ~@6 db3", Z: "ab2 ~@4 eb2 b2 c3 ~ ab2 a2 bb2 ab2@3 ab2",
  AA: "ab2@2 ~ ab2 ~ eb3 ~ ab2 ~ ab3 ~ ab2 ab2@3 ab2", AB: "ab2@2 ~@5 bb2 ab2@2 ~@5 ab3",
  AC: "db2@2 ~@5 c2 db2 g1 ~ ab1 ~ db2 ~@2", AD: "ab2 ~@4 eb2 b2 c3 gb2@2 ~ gb2 ~ db3 ~@2",
  AE: "~ ab3 ~ ab2 ~ gb3 gb2 ~ gb2@2 ~ gb2 ~ eb3 ~ gb2", AF: "ab2 ~ eb3 ab3 ~ c4 ~ ab2 ~ ab3 a3 bb3 ~ ab3 e3 f3",
  AG: "~ ab2!2 ~ bb2 bb3 c3 c4 ~ ab2!2 ~@2 ab2!2 ~", AH: "~ bb3 b3 c4 eb4 ~@2 ab2!2 ~ db3 ab3 ab2 ~ ab2 ab3",
  AI: "ab2 eb3 ~ ab2 ~ ab3 ~ ab2!2 ab3 ~ ab2 ~ ab2!2 ~", AJ: "db2@2 ~@5 ab1 db2 ab1 ~ db2 ~ db2 ~ db2",
  AK: "eb2@2 ~@5 bb2 eb2@2 ~@5 bb2", AL: "ab2@2 ~ ab2 ~ eb3 ~@3 ab3 ~@3 ab3 ~@2",
  AM: "~ bb2 b2 c3 ~ eb2 ab2 ~@2 ab3 ~ ab2 ~ ab3 ~ ab2", AN: "db2@2 ~@5 ab1 db2 g1 ~ c2 ~ db2 ~@2",
  AO: "ab2@2 ~ ab2 ~ eb3 ~@2 gb2 ~@4 db2 a2 bb2", AP: "~ ab2 b2 c3 ~ gb3 gb2 ~@2 bb2 b2 c3 ~ eb2 gb2 ~",
  AQ: "ab2 ~ eb3 ab3 ~ c4 ~ ab2 ~ db4 ~ ab2!2 ~ ab2 ab3", AR: "~ ab2!2 ~ bb2 bb3 c3 c4 ~ ab3 ~ ab2 ~ ab3 ~ ab2",
  AS: "~ bb3 b3 c4 eb4 ~@2 ab2 db3 ~@2 ab2 ~ ab3 e3 f3", AT: "ab2 eb3 ~ ab2 ~ ab3 ~ ab2!2 ab3 bb2 bb3 ~ ab2!2 ~",
  AU: "bb1 ~ f2 bb2 ~ d3 ~ bb1 ~ bb2 db3 d3 f3 ~@2 bb1", AV: "eb2@2 eb2 ~@2 eb2 ~ eb3 ~@5 eb2 d2 eb2",
  AW: "ab2!2 ab3 ab2!2 ab3 ab2!2 ab3 ab2!2 eb3 db3 c3 ab2 ~", AX: "ab2!2 ab3 ab2!2 ab3 eb3 ab3 ~@8",
})).s("gm_slap_bass_2").gain(0.45)

// chords · piano · "Bright Piano"
const piano = note(`<
  ~@22 A B C D E F G H I J K L M N O P ~@16 Q R S T U V W X Y Z AA AB AC AD AE AF ~@16 AG AH AI AJ AK AL AM AN AO AP AQ
  AR AS AL AT AU AV AW AQ AX AS AY AZ BA
>`.pickRestart({
  A: "[d4,ab4,bb4,f5] ~ [d4,ab4,bb4,f5] ~@2 [d4,ab4,bb4,f5] ~ [d4,ab4,bb4,f5] ~@5 [d4,ab4,bb4,f5] ~@2", // Bb7
  B: "~@2 [db4,f4,ab4] ~@2 [db4,f4,ab4] ~ [db4,f4,ab4] ~@5 [db4,f4,ab4] ~@2", // Db
  C: "[bb3,gb4,db5] ~ [bb3,gb4,db5] ~@2 [bb3,gb4,db5] ~ [bb3,gb4,db5] ~@5 [bb3,gb4,db5] ~@2", // Gb
  D: "~@2 [bb3,gb4,db5] ~@2 [bb3,gb4,db5] ~@8 [db4,a4,e5] ~", // Gb A
  E: "[d4,ab4,c5,f5] ~ [d4,ab4,c5,f5] ~@2 [d4,ab4,c5,f5] ~@2 [d4,ab4,c5,f5] ~@5 [d4,ab4,c5,f5] ~", // Dm7b5
  F: "[eb4,g4,bb4] ~ [eb4,g4,bb4] ~@2 [eb4,g4,bb4] ~ [eb4,g4,bb4] ~@5 [eb4,g4,bb4] ~@2", // Eb
  G: "[c4,eb4,ab4] ~@3 [c4,eb4,ab4] ~@3 [bb3,db4,gb4] ~@3 [db4,f4,ab4] ~@3", // Ab Gb Db
  H: "~@4 [c4,ab4,eb5] ~@2 [c4,ab4,eb5] ~@6 [db4,f4,ab4] ~", // Ab Db
  I: "~@4 [d4,ab4,c5,f5] ~@4 [d4,ab4,c5,f5] ~@2 [d4,ab4,c5,f5] ~@3", // Dm7b5
  J: "[db4,f4,ab4] ~ [db4,f4,ab4] ~@2 [db4,f4,ab4] ~@2 [db4,f4,ab4] ~@5 [db4,f4,ab4] ~", // Db
  K: "~@4 [bb3,gb4,db5] ~@4 [bb3,gb4,db5] ~@2 [bb3,gb4,db5] ~@3", // Gb
  L: "[bb3,gb4,db5] ~@3 [bb3,gb4,db5] ~@3 [ab3,c4,eb4,ab4] ~ [ab3,c4,eb4,ab4] ~ [a3,db4,e4] ~ [a3,db4,e4] ~", // Gb Ab A
  M: "~@4 [ab3,d4,f4,bb4] ~@4 [ab3,d4,f4,bb4] ~@2 [ab3,d4,f4,bb4] ~@3", // Bb7
  N: "~@2 [g3,bb3,eb4] ~@2 [g3,bb3,eb4] ~@2 [g3,bb3,eb4] ~@7", // Eb
  O: "~@4 [ab3,c4,eb4,ab4] ~@2 [ab3,c4,eb4,ab4] [gb3,bb3,db4,gb4] ~ [gb3,bb3,db4,gb4] ~ [f3,ab3,db4] ~@3", // Ab Gb Db
  P: "~@4 [ab3,c4,eb4,ab4] ~@2 [ab3,c4,eb4,ab4] [gb3,bb3,db4] ~ [gb3,bb3,db4] ~@5", // Ab Gb
  Q: "~ [ab3,d4,f4,c5] ~@3 [ab3,d4,f4,c5] ~ [ab3,d4,f4,c5] ~ [ab3,d4,f4,c5] ~@2 [ab3,d4,f4,c5]!2 ~@2", // Dm7b5
  R: "~@2 [f3,db4,ab4] ~@2 [f3,db4,ab4] ~@2 [f3,db4,ab4] ~@7", // Db
  S: "[gb3,bb3,db4,gb4] ~ [gb3,bb3,db4,gb4] ~@2 [gb3,bb3,db4,gb4] ~@2 [gb3,bb3,db4,gb4] ~@5 [gb3,bb3,db4,gb4] ~", // Gb
  T: "[gb3,bb3,db4,gb4] ~ [gb3,bb3,db4,gb4] ~@2 [gb3,bb3,db4,gb4] ~ [gb3,bb3,db4,gb4] [ab3,c4,eb4] ~@3 [a3,db4,e4,a4] ~ [a3,db4,e4,a4] ~", // Gb Ab A
  U: "~@2 [ab3,c4,d4,e4,g4] ~@2 [ab3,c4,d4,e4,g4] ~ [ab3,c4,d4,e4,g4] ~@5 [ab3,c4,d4,e4,g4] ~@2", // C
  V: "[g3,bb3,eb4] ~ [g3,bb3,eb4] ~@2 [g3,bb3,eb4] ~ [g3,bb3,eb4] ~@5 [g3,bb3,eb4] ~@2", // Eb
  W: "~@2 [ab3,c4,eb4,ab4] ~@2 [ab3,c4,eb4,ab4] ~@2 [gb3,bb3,db4] ~ [gb3,bb3,db4] ~ [f3,ab3,db4] ~ [f3,ab3,db4] ~", // Ab Gb Db
  X: "~@4 [ab3,c4,eb4,ab4] ~@2 [ab3,c4,eb4,ab4] [gb3,bb3,db4,gb4] ~@3 [f3,db4,ab4] ~ [f3,db4,ab4] ~", // Ab Gb Db
  Y: "~ [ab3,d4,f4,bb4] ~@3 [ab3,d4,f4,bb4] ~ [ab3,d4,f4,bb4] ~ [ab3,d4,f4,bb4] ~@2 [ab3,d4,f4,bb4]!2 ~@2", // Bb7
  Z: "[f3,db4,ab4] ~@3 [f3,db4,ab4] ~@4 [f3,db4,ab4] ~@2 [f3,db4,ab4] ~@2 [f3,db4,ab4]", // Db
  AA: "~@2 [gb3,bb3,db4,gb4] ~@2 [gb3,bb3,db4,gb4] ~ [gb3,bb3,db4,gb4] ~@5 [gb3,bb3,db4,gb4] ~@2", // Gb
  AB: "~@4 [gb3,bb3,db4,gb4] ~@2 [gb3,bb3,db4,gb4] [ab3,c4,eb4,ab4] ~ [ab3,c4,eb4,ab4] ~ [a3,db4,e4,a4] ~ [a3,db4,e4,a4] ~", // Gb Ab A
  AC: "~@4 [ab3,bb3,d4,f4] ~@4 [ab3,bb3,d4,f4] ~@2 [ab3,bb3,d4,f4] ~@3", // Bb7
  AD: "[g3,eb4,bb4] ~@3 [g3,eb4,bb4] ~@4 [g3,eb4,bb4] ~@2 [g3,eb4,bb4] ~@2 [g3,eb4,bb4]", // Eb
  AE: "~@2 [ab3,c4,eb4] ~@2 [ab3,c4,eb4] ~@2 [bb3,gb4,db5] ~@3 [db4,f4,ab4,db5] ~@3", // Ab Gb Db
  AF: "[c4,ab4,eb5] ~@3 [c4,ab4,eb5] ~@5 [bb3,gb4,db5] ~ [db4,f4,ab4] ~ [db4,f4,ab4] ~", // Ab Gb Db
  AG: "~ [ab3,d4,e4,g4,c5] ~@3 [ab3,d4,e4,g4,c5] ~ [ab3,d4,e4,g4,c5] ~ [ab3,d4,e4,g4,c5] ~@2 [ab3,d4,e4,g4,c5]!2 ~@2", // C
  AH: "~@4 [db4,f4,ab4] ~@2 [db4,f4,ab4] ~@4 [db4,f4,ab4] ~@3", // Db
  AI: "[bb3,db4,gb4] ~@3 [bb3,db4,gb4] ~@4 [bb3,db4,gb4] ~@2 [bb3,db4,gb4] ~@2 [bb3,db4,gb4]", // Gb
  AJ: "[bb3,gb4,db5] ~@3 [bb3,gb4,db5] ~@3 [ab3,c4,eb4,ab4] ~@3 [a3,db4,e4,a4] ~ [a3,db4,e4,a4] ~", // Gb Ab A
  AK: "~@4 [ab3,d4,e4,g4,c5] ~@4 [ab3,d4,e4,g4,c5] ~@2 [ab3,d4,e4,g4,c5] ~@3", // C
  AL: "~ [g3,bb3,eb4] ~@3 [g3,bb3,eb4] ~ [g3,bb3,eb4] ~ [g3,bb3,eb4] ~@2 [g3,bb3,eb4]!2 ~@2", // Eb
  AM: "~@2 [ab3,c4,eb4,ab4] ~@2 [ab3,c4,eb4,ab4] ~@4 [gb3,bb3,db4,gb4] ~ [f3,db4,ab4] ~@3", // Ab Gb Db
  AN: "[ab3,c4,eb4,ab4] ~@3 [ab3,c4,eb4,ab4] ~@9 [f3,ab3,db4] ~", // Ab Db
  AO: "~@2 [ab3,c4,d4,f4] ~@2 [ab3,c4,d4,f4] ~@2 [ab3,c4,d4,f4] ~@7", // Dm7b5
  AP: "~@2 [db4,f4,ab4,db5] ~@2 [db4,f4,ab4,db5] ~ [db4,f4,ab4,db5] ~@5 [db4,f4,ab4,db5] ~@2", // Db
  AQ: "[bb3,db4,gb4] ~ [bb3,db4,gb4] ~@2 [bb3,db4,gb4] ~ [bb3,db4,gb4] ~@5 [bb3,db4,gb4] ~@2", // Gb
  AR: "~@2 [bb3,gb4,db5] ~@2 [bb3,gb4,db5] ~@4 [ab3,c4,eb4,ab4] ~ [a3,db4,e4] ~@3", // Gb Ab A
  AS: "[ab3,d4,g4,c5,e5] ~ [ab3,d4,g4,c5,e5] ~@2 [ab3,d4,g4,c5,e5] ~@2 [ab3,d4,g4,c5,e5] ~@5 [ab3,d4,g4,c5,e5] ~", // C
  AT: "[ab3,c4,eb4,ab4] ~@3 [ab3,c4,eb4,ab4] ~@3 [bb3,db4,gb4] ~@3 [db4,f4,ab4,db5] ~ [db4,f4,ab4,db5] ~", // Ab Gb Db
  AU: "~@4 [c4,ab4,eb5] ~@2 [c4,ab4,eb5] [bb3,db4,gb4] ~@5 [db4,f4,ab4,db5] ~", // Ab Gb Db
  AV: "~@4 [d4,f4,ab4,bb4] ~@2 [d4,f4,ab4,bb4] ~@4 [d4,f4,ab4,bb4] ~@3", // Bb7
  AW: "~@4 [db4,f4,ab4,db5] ~@2 [db4,f4,ab4,db5] ~@4 [db4,f4,ab4,db5] ~@3", // Db
  AX: "~@4 [bb3,gb4,db5] ~@2 [bb3,gb4,db5] [ab3,c4,eb4,ab4] ~@5 [a3,db4,e4,a4] ~", // Gb Ab A
  AY: "~@4 [g3,eb4,bb4] ~@2 [g3,eb4,bb4] ~@4 [g3,eb4,bb4] ~@3", // Eb
  AZ: "[ab3,c4,eb4,ab4] ~@2 [ab3,c4,eb4,ab4] ~@2 [ab3,c4,eb4,ab4] ~@3 [ab3,c4,eb4,ab4] ~ [ab3,c4,eb4,ab4] ~@3", // Ab
  BA: "[ab3,c4,eb4,ab4] ~@2 [ab3,c4,eb4,ab4] ~@2 [ab3,c4,eb4,ab4]!2 ~@8", // Ab
})).s("gm_piano").gain(0.24)

// chords · clavinet · "Clav."
const clavinet = note(`<
  ~@2 A B C D@3 E F G H I J I K L M N O P Q R S T U V W I@2 R F T X Y Z C D C AA AB F G AC J I@2 K AD AE AF AG AH AI AJ
  AK AL AM Y B AN C AO AK AL AP AQ AR AS J AT I AU AV AF AW AS I AT AX AD M N O AY AZ Y S T BA A AW D C Y S T BA AO Z AS
  I R S T BB Y BC BD BE
>`.pickRestart({
  A: "~@4 [ab3,c4,d4,g4] ~@7 [ab3,c4,d4,g4] ~@3", B: "~@4 [g3,eb4,bb4] ~@7 [g3,eb4,bb4] ~@3",
  C: "~@4 [ab3,c4,eb4] ~@7 [f3,db4,ab4] ~@3", D: "~@4 [ab3,c4,eb4,ab4] ~@7 [f3,db4,ab4] ~@3",
  E: "~@4 [f3,db4,ab4] ~@7 [bb3,db4,gb4] ~@3", F: "~@4 [db4,f4,ab4,db5] ~@7 [db4,f4,ab4,db5] ~@3",
  G: "~@4 [d4,f4,bb4] ~@7 [d4,f4,bb4] ~@3", H: "~@4 [eb4,g4,bb4,eb5] ~@7 [eb4,g4,bb4,eb5] ~@3",
  I: "~@4 [c4,ab4,eb5] ~@7 [db4,f4,ab4,db5] ~@3", J: "~@4 [c4,eb4,ab4] ~@7 [db4,f4,ab4,db5] ~@3",
  K: "~@4 [c4,ab4,eb5] ~@7 [b3,eb4,gb4,b4] ~@3", L: "~@4 [db4,f4,ab4,db5] ~@7 [bb3,gb4,db5] ~@3",
  M: "~@4 [db4,f4,ab4] ~@7 [bb3,db4,f4,bb4] ~@3", N: "~@4 [bb3,d4,f4] ~@7 [bb3,d4,f4] ~@3",
  O: "~@4 [g3,b3,db4,e4] ~@7 [g3,b3,db4,e4] ~@3", P: "~@4 [ab3,c4,eb4] ~@7 [bb3,gb4,db5] ~@3",
  Q: "~@4 [c4,gb4,bb4,f5] ~@7 [c4,gb4,ab4,eb5] ~@3", R: "~@4 [d4,e4,ab4,c5,g5] ~@7 [d4,e4,ab4,c5,g5] ~@3",
  S: "~@3 [d4,gb4,a4,d5] [db4,f4,ab4,db5] ~@7 [db4,f4,ab4,db5] ~@3", T: "~@4 [bb3,gb4,db5] ~@7 [bb3,gb4,db5] ~@3",
  U: "~@4 [bb3,gb4,db5] ~@7 [db4,a4,e5] ~@3", V: "~@4 [d4,g4,ab4,c5] ~@7 [d4,g4,ab4,c5] ~@3",
  W: "~@4 [eb4,g4,bb4] ~@7 [eb4,g4,bb4] ~@3", X: "~@4 [bb3,db4,gb4] ~@7 [a3,db4,e4,a4] ~@3",
  Y: "~@4 [ab3,d4,g4,c5] ~@7 [ab3,d4,g4,c5] ~@3", Z: "~@4 [g3,bb3,eb4] ~@7 [g3,bb3,eb4] ~@3",
  AA: "~@4 [ab3,c4,eb4,ab4] ~@7 [db4,f4,ab4] ~@3", AB: "~@4 [db4,f4,ab4] ~@7 [bb3,gb4,db5] ~@3",
  AC: "~@3 [e4,ab4,b4] [eb4,g4,bb4] ~@7 [eb4,g4,bb4] ~@3", AD: "~@4 [db4,f4,ab4,db5] ~@7 [bb3,db4,gb4] ~@3",
  AE: "~@4 [db4,f4,ab4] ~@7 [bb3,db4,f4] ~@3", AF: "~@4 [bb3,d4,f4,bb4] ~@7 [bb3,d4,f4,bb4] ~@3",
  AG: "~@4 [g3,bb3,db4,e4] ~@7 [g3,bb3,db4,e4] ~@3", AH: "~@4 [ab3,c4,eb4] ~@7 [gb3,bb3,db4,gb4] ~@3",
  AI: "~@4 [gb3,ab3,c4,eb4] ~@7 [gb3,c4,f4,bb4] ~@3", AJ: "~@4 [ab3,d4,g4,c5,e5] ~@7 [ab3,d4,g4,c5,e5] ~@3",
  AK: "~@4 [f3,db4,ab4] ~@7 [f3,db4,ab4] ~@3", AL: "~@4 [gb3,bb3,db4,gb4] ~@7 [gb3,bb3,db4,gb4] ~@3",
  AM: "~@4 [gb3,bb3,db4] ~@7 [a3,db4,e4,a4] ~@3", AN: "~@4 [ab3,c4,eb4,ab4] ~@7 [f3,ab3,db4] ~@3",
  AO: "~@4 [ab3,d4,f4,bb4] ~@7 [ab3,d4,f4,bb4] ~@3", AP: "~@4 [gb3,bb3,db4,gb4] ~@7 [a3,db4,e4] ~@3",
  AQ: "~@4 [ab3,d4,e4,g4,c5] ~@7 [ab3,d4,e4,g4,c5] ~@3", AR: "~@3 [ab3,b3,e4] [g3,bb3,eb4] ~@7 [g3,bb3,eb4] ~@3",
  AS: "~@4 [ab3,c4,eb4] ~@7 [db4,f4,ab4,db5] ~@3", AT: "~@4 [c4,ab4,eb5] ~@7 [db4,f4,ab4] ~@3",
  AU: "~@4 [db4,f4,ab4] ~@7 [bb3,db4,gb4] ~@3", AV: "~@4 [db4,f4,ab4,db5] ~@6 [d4,gb4,a4,d5] [db4,f4,ab4,db5]@2 ~@2",
  AW: "~@3 [ab3,e4,b4] [g3,eb4,bb4] ~@7 [g3,eb4,bb4] ~@3", AX: "~@4 [c4,eb4,ab4] ~@7 [eb4,b4,gb5] ~@3",
  AY: "~@4 [ab3,c4,eb4,ab4] ~@7 [gb3,bb3,db4,gb4] ~@3", AZ: "~@4 [gb3,c4,eb4,bb4] ~@7 [gb3,bb3,c4,f4] ~@3",
  BA: "~@4 [bb3,gb4,db5] ~@7 [a3,db4,e4] ~@3", BB: "~@4 [bb3,gb4,db5] ~@7 [a3,db4,e4,a4] ~@3",
  BC: "~@4 [g3,eb4,bb4] ~@6 [ab3,e4,b4] [g3,eb4,bb4]@2 ~@2", // Eb E Eb
  BD: "[ab3,c4,eb4] ~@2 [ab3,c4,eb4] ~@2 [ab3,c4,eb4] ~@3 [ab3,c4,eb4] ~ [ab3,c4,eb4] ~@3", // Ab
  BE: "[ab3,c4,eb4] ~@2 [ab3,c4,eb4] ~@2 [ab3,c4,eb4]!2 ~@8", // Ab
})).s("gm_clavinet").gain(0.24)

// drums · kick
const kick = s("bd").struct(`<
  ~@2 A B C@2 A B A B A B C@2 A B A B A B A C@17 A B A B A B A C A B A B A B C@18 A B A B A B C@2 A B A B A B C@25 D
>`.pickRestart({
  A: "x ~ x!2 ~ x ~@2 x ~@4 x ~@2", B: "x ~ x!2 ~ x ~ x ~@5 x ~@2", C: "x ~ x ~@2 x ~ x ~@7 x",
  D: "x ~ x ~@2 x ~ x ~@8",
})).gain(0.54)

// drums · rim
const rim = s("rim").struct("<[x!2] [x!4] ~@108>").gain(0.42)

// drums · snare
const snare = s("sd").struct(`<
  ~@2 A@2 B@2 A@6 B@2 A@7 B@16 C A@7 B A@6 B@18 A@6 B@2 A@6 B@9 C B@7 C B@6 D E
>`.pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@4 x ~@2 x ~@3", C: "~@4 x!6 ~@2 x ~@3", D: "x ~@2 x ~@2 x ~@2 x ~@2 x ~@3",
  E: "x ~@2 x ~@2 x!2 ~@8",
})).gain(0.48)

// drums · clap
const clap = s("cp").struct("<~@12 A B ~@7 C ~@15 B ~@31 C ~@7 C ~@15 B ~@7 B ~@4 A ~@3>".pickRestart({
  A: "~@5 x ~@10", B: "~ x!4 ~@11", C: "~@5 x!4 ~@7",
})).gain(0.54)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@4 A B ~@6 A C ~@7 D ~@6 E B ~@6 A ~@8 D ~@6 E ~@7 E ~@7 A D ~@6 E D ~@6 E D ~@6 A ~@7 A ~@5 A ~ F G
>`.pickRestart({
  A: "~@5 x ~@10", B: "~@9 x ~ x ~@3 x", C: "~@7 x!2 ~@5 x!2", D: "~@15 x", E: "~@9 x ~ x ~ x ~ x", F: "~@7 x",
  G: "~@6 x!2 ~@8",
})).gain(0.48)

// drums · hihat
const hihat = s("hh").struct("<~@2 A@2 B@2 A@6 B@2 A@7 B@17 A@7 B A@6 B@18 A@6 B@2 A@6 B@25 C>".pickRestart({
  A: "x!13 ~ x!2", B: "x!3 ~ x!7 ~ x!4", C: "x!3 ~ x!4 ~@8",
})).gain(0.42)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@5 A ~@7 B ~@7 C ~@6 D A ~@15 E ~@6 D ~@7 D ~@8 C ~@6 D C ~@6 D E ~@22 F G
>`.pickRestart({
  A: "~@7 x", B: "~@3 x ~@4", C: "~@2 x!2 ~@10 x ~", D: "~ x ~ x ~ x ~ x ~@8", E: "~@5 x ~ x ~ x ~ x ~ x!2 ~",
  F: "~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x ~@2", G: "~ x!2 ~ x!2 ~@10",
})).gain(0.48)

// drums · open hat
const open_hat = s("oh").struct("<~@2 A@2 B@2 A@6 B@2 A@7 B@17 A@7 B A@6 B@18 A@6 B@2 A@6 B@25 C>".pickRestart({
  A: "~@13 x ~@2", B: "~@3 x ~@7 x ~@4", C: "~@3 x ~@12",
})).gain(0.54)

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@2 A@2 B C A@6 B D A@7 E A@6 F C A@6 B G A@7 H A@6 F A@7 F I A@6 B E A@6 F E A@6 F H A@6 B G A@6 B G A@4 B A J K
>`.pickRestart({
  A: "~ x ~ x", B: "x!2 ~ x!2 ~@3 x!2 ~ x!2 ~ x!2", C: "~@4 x ~ x!3 ~@3 x!2 ~@2", D: "~@4 x!2 ~@3 x ~ x!5",
  E: "x ~@3 x ~@4 x ~ x!3 ~@2", F: "x!4", G: "~@4 x ~@7 x!4", H: "~ x!4 ~@7 x ~@3", I: "x ~@2 x ~@2 x ~@2 x ~@2 x!4",
  J: "x ~@2 x ~@2 x ~@2 x ~@2 x ~@3", K: "x!8 ~@8",
})).gain(0.36)

// drums · crash
const crash = s("cr").struct(`<
  ~@2 A ~ A B A ~@5 A@2 ~@8 A ~@6 B ~@6 A ~@8 C A ~@7 A ~@13 A ~@9 A ~@6 C A ~@5 A ~ A ~@5 A ~ A ~@3 A ~@3
// … 72 more lines

More by Stevie Wonder