Strudelify

This Is My Night

Chaka Khan

KeyD majorTempo109 bpm
0:00/0:00
// This Is My Night — Chaka Khan
// 109 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 42, 4/4 at bar 43, 2/4 at bar 77, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: Full arrangement: all 127 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(109/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 · pad poly · "POLYSYNTH"
const pad_poly = note("<A B@4 C@3 D@2 ~@117>".pickRestart({
  A: "~@2 b2 g2", B: "[e2@14 b2 g2]/4", C: "e2/3", D: "[~ e2 g2 b2 a2 g2 e2 d2 e2@16 ~ e2 g2 b2 a2 g2 e2 d2]/2",
})).s("gm_pad_poly").gain(0.32)

// bass · synth bass 1 · "SYN BASS 1"
const bass = note(`<
  ~@5 A@5 B C D E B F G H B C D I B F G H J K L J M N O K P B C D E B F G Q R S T U V W X Y Z AA AB AC@2 AD AE AF AG AH
  S T AI V W X Y V S T U V W X Y ~ AJ ~@3 AK ~@6 N AL O AM AN AO AP AQ AR AO AS AT AR AO AS AU AV ~@7 AW ~ AX AY AZ BA
  BB AP BC BA AX AY ~@3
>`.pickRestart({
  A: "e2!16", B: "e1@4 ~ e3 d3 b2 ~ b2 ~@4 b2 a2", C: "~ a2 ~@4 a2 g2 ~ g2 ~@6", D: "~@4 b2 d3 b2!2 ~ b2 ~@4 a2 ~",
  E: "a2!2 ~@4 g2!2 ~ g2 ~ f#2 ~ f#2 d2 e2", F: "~ a2 ~@4 g2 ~@2 g2 ~@4 f#2 ~", G: "~@4 b2 d3 b2!2 ~ b2 ~@4 a2!2",
  H: "~ a2 ~@5 g2 ~ g2 ~ f#2 ~ f#2 d2 e2", I: "~ a2 ~@4 g2!2 ~ g2 ~ f#2 ~ f#2 d2 e2",
  J: "c2 ~ c2 ~ c2@2 ~ c2 ~ c2 c2@3 ~ g1!2", K: "c2 ~ c2 ~ c2@2 g1 c2 ~ c2 c2@3 ~ g1!2",
  L: "c2 ~ c2@2 ~@2 c2!2 ~ c2 c2@3 ~ g1!2", M: "c2 ~ c2 ~ c2@2 ~ c2 ~ c2 c2@2 ~@3 g1",
  N: "c2 ~ c2 ~ c2@2 ~ c2 ~ c2 c2@3 ~@2 g1", O: "c2 ~ c2 ~ c2@2 g1 c2 ~ c2 c2@2 ~@2 c2 d2",
  P: "c2 ~ c2 ~ d2@2 ~ c2 ~ c2 ~ d2 ~ d2 c2 d2", Q: "~ a2 ~@5 g2 ~@8", R: "~@8 e1@4 ~ e3 d3 b2",
  S: "~ b2 ~@4 b2 a2 ~ a2 ~@4 a2 g2", T: "~ g2 ~@10 b2 d3 b2!2", U: "~ b2 ~@4 a2 ~@2 a2 ~@4 g2!2",
  V: "~ g2 ~ f#2 ~ f#2 d2 e2 e1@4 ~ e3 d3 b2", W: "~ b2 ~@4 b2 a2 ~ a2 ~@4 g2 ~", X: "~ g2 ~@4 f#2 ~@5 b2 d3 b2!2",
  Y: "~ b2 ~@4 a2!2 ~ a2 ~@5 g2", Z: "~ g2 ~ f#2 ~ f#2 d2 e2 c2 ~ c2 ~ c2@2 ~ c2",
  AA: "~ c2 c2@3 ~ g1!2 c2 ~ c2 ~ c2@2 g1 c2", AB: "~ c2 c2@3 ~ g1!2 c2 ~ c2@2 ~@2 c2!2",
  AC: "~ c2 c2@3 ~ g1!2 c2 ~ c2 ~ c2@2 ~ c2", AD: "~ c2 c2@2 ~@3 g1 c2 ~ c2 ~ c2@2 ~ c2",
  AE: "~ c2 c2@3 ~@2 g1 c2 ~ c2 ~ c2@2 g1 c2", AF: "~ c2 c2@2 ~@2 c2 d2 c2 ~ c2 ~ c2@2 g1 c2",
  AG: "~ c2 c2@3 ~ g1!2 c2 ~ c2 ~ d2@2 ~ c2", AH: "~ c2 ~ d2 ~ d2 c2 d2 e1@4 ~ e3 d3 b2",
  AI: "~ b2 ~@4 a2 ~ a2!2 ~@4 g2!2", AJ: "e2@3 ~@13", AK: "e2 ~@3", AL: "c2 ~ c2 ~ c2@2 ~ c2 ~ c2 c2@4 ~ g1",
  AM: "c2 ~ c2 ~ c2@2 g1 c2 ~ c2 c2@3 ~ c2!2", AN: "g1 ~ g1 ~ g1@2 ~ g1 ~ g1 g1@2 ~ e2 b1 e2",
  AO: "f#1@4 ~ f#3 e3 c#3 ~ c#3 ~@4 c#3 b2", AP: "~ b2 ~@4 b2 a2 ~ a2 ~@6", AQ: "~@4 c#3 ~ c#3!2 ~ c#3 ~@4 b2 ~",
  AR: "b2!2 ~@4 a2!2 ~ a2 ~ g#2 ~ g#2 e2 f#2", AS: "~ b2 ~@4 a2 ~@2 a2 ~@4 g#2 ~",
  AT: "f#2!2 ~@3 e3 c#3!2 ~ c#3 ~@4 b2 ~", AU: "f#2!2 ~@2 c#3 e3 c#3!2 ~ c#3 ~@4 b2 ~", AV: "b2!2 ~@5 a2 ~@8",
  AW: "~@15 a2", AX: "f#1@4 ~ f#3 e3 c#3 ~ c#3@2 ~@3 c#3 b2", AY: "~ b2 ~@4 b2 a2 ~ a2@2 ~@5",
  AZ: "~@4 c#3 ~ c#3!2 ~ c#3@2 ~@3 b2!2", BA: "~ b2 ~@5 a2 ~ a2 ~ g#2 ~ g#2 e2 f#2",
  BB: "f#1@3 ~@2 f#3 e3 c#3 ~ c#3@2 ~@3 c#3 b2", BC: "~@4 c#3 e3 c#3!2 ~ c#3 ~@4 b2 ~",
})).s("gm_synth_bass_1").gain(0.34).pan(0.6)

// bass · slap bass 1 · "SLAPBASS 1"
const bass_2 = note("<~@11 A B ~@2 A B ~@19 A B ~@2 C B ~@20 D ~@3 E ~@3 D ~@3 D ~@2 F ~@2 C B ~@45>".pickRestart({
  A: "~@12 d2!2 a1!2", B: "e2!2 ~@14", C: "~@9 a1 d2 a1 d2!2 a1!2", D: "~@4 d2!2 a1!2 e2!2 ~@6",
  E: "~@2 a1!2 d2!2 a1!2 e2!2 ~@6", F: "e2!2 b1!2 e2!2 ~@10",
})).s("gm_slap_bass_1").gain(0.36)

// chords · piano · "A.PIANO 1"
const piano = note("<~ A@2 B C D E B F@2 ~@117>".pickRestart({
  A: "[d4,f#4,a4]/2", B: "[d4,f#4,a4]@7 ~ [e4,g4,b4]@6 ~@2", C: "[c4,e4,g4]@7 ~", D: "[d4,f#4,a4]@7 ~ [e4,g4,b4]@5 ~@3",
  E: "[f#4,a4,d5]@6 ~@2 [e4,g4,b4]@7 ~", F: "[[c4,e4,g4]@27 ~@5]/2",
})).s("gm_piano").gain(0.31).pan(0.6)

// other · epiano1 · "E.PIANO 1"
const epiano1 = note(`<
  ~@8 A B ~@16 C ~ D E C ~ F G@2 ~@16 H I H J@2 I H K@3 ~@27 C ~ F L M N ~@11 O@2 P ~ Q R S@2 T U ~@12
>`.pickRestart({
  A: "~@9 [e4,e5] [g4,g5] [b4,b5] [a4,a5] [g4,g5] e5 d5", B: "e5@15 ~", C: "~@4 f#4 a4 f#4 ~ g4@8",
  D: "~@4 f#4 a4 f#4 ~ g4@6 a4 b4", E: "c5", F: "~@4 f#4 a4 f#4 ~ g4@4 ~@2 [f4,a4] [g4,b4]", G: "[[f4,a4,c5]@31 ~]/2",
  H: "~@12 f#4 a4 f#4 ~", I: "g4 ~", J: "[g4@6 a4 b4 c5@16 ~@4 f#4 a4 f#4 ~]/2",
  K: "[g4@4 ~@2 [f4,a4] [g4,b4] [f4,a4,c5]@31 ~@9]/3", L: "[f4,a4,c5]", M: "[g4,b4,d5]", N: "[a4,c#5,f#5] ~@3",
  O: "[~ f#5@2 ~, ~@5 f#4@19 ~@8, ~@3 a4@9 ~@4, ~@7 c#5@17 ~@8]/2", P: "~@4 [b4,g#5]@3 ~ [f#4,a4,c#5]@8",
  Q: "~@4 c#5 ~ a5 c#6 ~@8", R: "~@8 [g#5,e6]@7 ~", S: "[[b5,e6,g#6]@7 ~ [a5,c#6]@16 ~@8]/2", T: "~@13 f#4 a4 c#5",
  U: "f#5 ~@7",
})).s("gm_epiano1").gain(0.4).pan(0.6)

// other · epiano1 · "E.PIANO 1" · soft notes
const epiano1_soft = note("<~@8 A B ~@99 C@2 D@2 ~@14>".pickRestart({
  A: "~@14 e4 d4", B: "e4@15 ~", C: "[~@2 f#4 a4 ~ f#5 ~@2 [a5,f#6]@15 ~ b5@7 ~, ~ c#4@2 ~@5 c#6 ~@23]/2",
  D: "[~ f#5@2 ~]/2",
})).s("gm_epiano1").gain(0.25).pan(0.6)

// chords · pad poly · "POLYSYNTH"
const pad_poly_2 = note("<~@26 A B A C D E A F@2 ~@16 G@4 H@6 ~@27 D E A I J K ~@33>".pickRestart({
  A: "[d4,f#4,a4]@6 ~ [d4,e4,g4,b4]@9", B: "[f#4,a4,d5]@6 ~ [d4,e4,g4,b4]@9", C: "[f4,a4,c5]@15 ~",
  D: "[d4,f#4,a4]@7 [d4,e4,g4,b4]@9", E: "[f#4,a4,d5]@6 ~ [d4,e4,g4,b4]@8 ~", F: "[[f4,a4,c5]@15 ~]/2",
  G: "[~@8 [d4,f#4,a4]@6 ~ [d4,e4,g4,b4]@9 [f#4,a4,d5]@6 ~ [d4,e4,g4,b4]@9 [d4,f#4,a4]@6 ~ [d4,e4,g4,b4]@9 [f4,a4,c5]@8]/4", // D Em7 D Em7 D Em7 F
  H: "[~@8 [d4,f#4,a4]@7 [d4,e4,g4,b4]@9 [f#4,a4,d5]@6 ~ [d4,e4,g4,b4]@8 ~ [d4,f#4,a4]@6 ~ [d4,e4,g4,b4]@9 [f4,a4,c5]@30 ~@10]/6", // D Em7 D Em7 D Em7 F
  I: "[f4,a4,c5]", J: "[g2,d3,g4,b4,d5]", K: "[f#2,c#3,a4,c#5,f#5] ~@3",
})).s("gm_pad_poly").gain(0.36)

// chords · lead 2 sawtooth · "SAW WAVE"
const lead_2_sawtooth = note("<A@4 B@6 ~@65 C@2 ~@50>".pickRestart({
  A: "[~ d5@3, ~@15 [f#5,g5,a5]@49]/4", B: "[~ d5@5, ~@5 [f#5,g5,a5]@27]/6", C: "[~@12 d2@7 ~@13]/2",
})).s("gm_lead_2_sawtooth").gain(0.19).pan(0.3)

// chords · rock organ · "ORGAN 3"
const rock_organ = note(`<
  ~@12 A B ~@2 C D ~@2 A B ~@2 C D ~@11 A B ~@2 C E ~@2 F G H ~ I J K ~@10 F G H ~ I J K ~ F G H ~ I J ~@4 L ~@2 M N
  ~@10 O P ~@2 Q R ~@2 Q S ~@11 O P ~@2 Q R ~@2 T ~@2
>`.pickRestart({
  A: "~@2 [a4,d5] e4 [g4,d5] [a4,d5] ~ [b4,d5]!2 ~ [a4,d5] [g4,d5] ~ [a4,d5] ~@2", // D5 G5 D5 Bm D5 G5 D5
  B: "~@2 [g4,b4] [b4,d5] ~ [g4,b4] ~ [a4,d5]!2 ~ [g4,b4]!2 ~ [f#4,a4] ~@2", // G Bm G D5 G F#m
  C: "~@2 [a4,d5] ~@2 [g4,d5] ~ [a4,d5] ~@2 e4 [g4,d5] ~ [a4,d5] ~@2", // D5 G5 D5 G5 D5
  D: "~@2 [a4,d5] e4 [g4,d5] [a4,d5] e4 [g4,d5] ~@2 [g4,b4,e5] ~@2 [a4,d5,f#5]@3", // D5 G5 D5 G5 Em D
  E: "~@2 [a4,d5] e4 [g4,d5] [a4,d5] e4 [g4,d5] ~@8", F: "~@10 [a4,d5] e4 [g4,d5] [a4,d5] ~ [b4,d5]",
  G: "[b4,d5] ~ [a4,d5] [g4,d5] ~ [a4,d5] ~@4 [g4,b4] [b4,d5] ~ [g4,b4] ~ [a4,d5]", // Bm D5 G5 D5 G Bm G D5
  H: "[a4,d5] ~ [g4,b4]!2 ~ [f#4,a4] ~@10", I: "~@10 [a4,d5] ~@2 [g4,d5] ~ [a4,d5]",
  J: "~@2 e4 [g4,d5] ~ [a4,d5] ~@4 [a4,d5] e4 [g4,d5] [a4,d5] e4 [g4,d5]", K: "~@2 [g4,b4,e5] ~@2 [a4,d5,f#5]@3 ~@8",
  L: "~@2 [d4,e4] [a4,d5] ~ [g4,b4] ~ [a4,d5]!4 [g4,b4] [a4,d5] [g4,b4] [a4,d5] ~", M: "~@15 [a4,d5]",
  N: "~ e4 [a4,d5] e4 [a4,d5]!2 e4 [a4,d5] ~@2 [b4,e5] ~@5", // D5 E5
  O: "~@2 [b4,e5] f#4 [a4,e5] [b4,e5] ~ [c#5,e5]!2 ~ [b4,e5] [a4,e5] ~ [b4,e5] ~@2", // E5 A5 E5 C#m E5 A5 E5
  P: "~@2 [a4,c#5] [c#5,e5] ~ [a4,c#5] ~ [b4,e5]!2 ~ [a4,c#5]!2 ~ [g#4,b4] ~@2", // A C#m A E5 A G#m
  Q: "~@2 [b4,e5] ~@2 [a4,e5] ~ [b4,e5] ~@2 f#4 [a4,e5] ~ [b4,e5] ~@2", // E5 A5 E5 A5 E5
  R: "~@2 [b4,e5] f#4 [a4,e5] [b4,e5] f#4 [a4,e5] ~@2 [a4,c#5,f#5] ~@2 [b4,e5,g#5]@3", // E5 A5 E5 A5 F#m E
  S: "~@2 [b4,e5] f#4 [a4,e5] [b4,e5] f#4 [a4,e5] ~@8", T: "~@2 [b4,e5] ~@13",
})).s("gm_rock_organ").gain(0.28).pan(0.6)

// other · lead 1 square · "SQUAREWAVE"
const lead_1_square = note("<~@67 A@4 B@6 ~@50>".pickRestart({
  A: "[~@3 a5@10 g5@3]/4",
  B: "[e5@5 d5@2 e5 a4@3 g4 a4 g4@9 ~@2 a5@11 ~ a5@2 g5 a5@5 b5@3 g5@5 a5 g5 a5@2 g5@4 d5@2 b4 e5@7 d5 g5@16 ~@9]/6",
})).s("gm_lead_1_square").gain(0.35).pan(0.6)

// chords · synth strings 2 · "SYN STR 2"
const synth_strings_2 = note("<~@8 A@2 ~@74 B ~ B ~@40>".pickRestart({
  A: "[c4,d4,e4,g4]/2", B: "~@10 d2@5 ~",
})).s("gm_synth_strings_2").gain(0.02)

// chords · synth brass 1 · "SYNBRASS 1"
const synth_brass_1 = note(`<
  ~@9 A B C ~@2 B D ~@2 B C ~@2 B D ~@11 B C ~@2 B D ~@2 E F ~@2 E G ~@11 E F ~@2 E G ~@2 E F ~@2 E G ~@19 H I ~@2 H J
  ~@2 H I ~@11 H I ~@2 H J ~@2 H I ~@3
>`.pickRestart({
  A: "~ e3 g3 b3 a3 g3 e3 d3 e3 [e3,e4] [g3,g4] [b3,b4] [a3,a4] [g3,g4] [e3,e4] [d3,d4]", // E G B A G E D
  B: "[b4,e5,g5]@3 ~ [a4,d5,f#5]@3 [b4,e5,g5] ~@6 [b4,e5,g5] ~", C: "[a4,d5,f#5,g5]@3 [b4,e5,g5] ~@3 [a4,d5,f#5] ~@8",
  D: "[a4,d5,f#5,g5]@3 ~ [b4,e5,g5]@2 ~ [a4,d5,f#5] ~@8", E: "~@8 [b4,e5,g5]@3 ~ [a4,d5,f#5]@3 [b4,e5,g5]",
  F: "~@6 [b4,e5,g5] ~ [a4,d5,f#5,g5]@3 [b4,e5,g5] ~@3 [a4,d5,f#5]", // Em D Em D
  G: "~@6 [b4,e5,g5] ~ [a4,d5,f#5,g5]@3 ~ [b4,e5,g5]@2 ~ [a4,d5,f#5]", // Em D Em D
  H: "[c#5,f#5,a5]@3 ~ [b4,e5,g#5]@3 [c#5,f#5,a5] ~@6 [c#5,f#5,a5] ~", // F#m E F#m
  I: "[b4,e5,g#5,a5]@3 [c#5,f#5,a5] ~@3 [b4,e5,g#5] ~@8", J: "[b4,e5,g#5,a5]@3 ~ [c#5,f#5,a5]@2 ~ [b4,e5,g#5] ~@8",
})).s("gm_synth_brass_1").gain(0.28).pan(0.4)

// other · synth drum
const synth_drum = note(`<
  ~@11 A ~@2 B ~ C D E F G H B ~ C D G I G I G I G I J K@2 L M B ~@3 N O P Q ~ O ~ R S T ~ T ~ T ~ T U V W X Y ~ O ~@2 N
  W X Y ~ O ~@3 Z AA AB AC Z AC AD AE AC C D G M AF AG AH AI AJ G I AK AL AM I AN I AO AP AQ Y AR AS ~ T ~@3 G AT AU AV
  AW AX G AY G AT AZ ~@2
>`.pickRestart({
  A: "~@11 a2 a2@2 ~@2", B: "~@12 g3 e3 c3 g#2", C: "~@8 e4!2 ~ d4!3 ~ c#4", D: "e3!2 ~ d3!3 ~ c3!3 ~@6",
  E: "e3@2 ~@10 g3 e3 c3 g#2", F: "~@11 d3 d3@2 ~@2", G: "~@14 a2!2", H: "g2 ~@3", I: "a2 ~@7",
  J: "g2@2 ~@2 e4!4 ~ d4 ~ b3 ~ a3!2 g3", K: "[e3@2 ~@10 g3 e3 c3 a2@2 ~@14 e3]/2", L: "e3@3 ~@11 a2!2", M: "a2@3 ~@13",
  N: "~@4 e3 ~@3", O: "~@4 g3 e3 c3 g#2 ~@8", P: "~@3 d3 d3@2 ~@10", Q: "~@6 a2!2 g2@4 ~@4",
  R: "e4!2 ~ d4!3 ~ c#4 e3!2 ~ d3!3 ~ c3", S: "c3!2 ~@14", T: "~@6 a2!2 a2@2 ~@6", U: "~@8 g2@2 ~@2 e4!4",
  V: "~ d4 ~ b3 ~ a3!2 g3 e3@2 ~@6", W: "~@4 g3 e3 c3 a2@2 ~@7", X: "~@7 e3 e3@3 ~@5", Y: "~@6 a2!2 a2@3 ~@5",
  Z: "~@12 g3 e3 c3 a2", AA: "f2@3 ~@8 f3 f3@3 ~", AB: "~@13 e3 c3 a2", AC: "f2@3 ~@13", AD: "~@8 e4!2 ~ d4!2 c4!2 b3",
  AE: "b3 e3 ~ c3!3 ~ a2 f2!2 ~@3 a2!3", AF: "f4@3 ~@11 a2!2", AG: "a2@2 ~@13 e4",
  AH: "e4 ~ c4!2 ~ a3!2 ~ e4!2 c4!2 a3!2 c3 a2", AI: "f2@2 ~@9 g3!2 ~ a2!2, b2 ~@15", AJ: "a2@2 ~@9 d3 d3@2 ~@2",
  AK: "f2@2 ~@9 f3!2 ~ a2!2", AL: "a2@2 ~@9 a2 a2@2 ~@2", AM: "~@8 e4!2 ~ e4 ~@2 a2!2", AN: "~@11 f3!2 ~ a2!2",
  AO: "a2@2 ~@12 a2!2", AP: "f2 ~@6 a3 a3@2 ~@6", AQ: "~@2 d3 ~", AR: "~@3 f3 f3@3 ~@9", AS: "~@6 c3!3 c3@2 ~@5",
  AT: "a2@2 ~@9 f3 f3@2 ~@2", AU: "c3@3 ~@11 a2!2", AV: "f3!2 ~ d3!3 ~ a2!3 ~@6", AW: "f2@2 ~@12 a2!2",
  AX: "a2@2 ~@9 d3 d3@3 ~", AY: "a2@2 ~@2 c3!2 ~ a2!3 ~@6", AZ: "c3@3 ~@13",
})).s("gm_synth_drum").gain(0.25).pan(0.4)

// chords · pad new age · "FANTASIA"
const pad_new_age = note(`<
  ~@2 A B ~@2 A B ~@21 C@2 ~@11 D ~@11 E F ~@20 G H ~@3 H ~@23 I@2 J ~ K@2 L@2 M N ~@12
>`.pickRestart({
  A: "~@6 e6 b5", B: "e6", C: "[~ a5 e5 d5@2 ~@3]/2", D: "~@2 [e4,d5,e5,f#5,a5] ~", E: "~@3 a5", F: "e5 d5@2 ~",
  G: "~@2 [d5,e5,f#5,a5] ~", H: "[b4,d5,e5,g5] ~@3", I: "[~ f#5@2 ~, ~@5 f#4@19 ~@8, ~@3 a4@9 ~@4, ~@7 c#5@17 ~@8]/2",
  J: "~@4 [b4,g#5]@3 ~ [f#4,a4,c#5]@8", // E F#m
  K: "[~@2 f#4 a4 c#5 f#5 a5 c#6 [a5,f#6]@15 ~ [g#5,b5,e6]@7 ~, ~ c#4@2 ~@5 c#6 ~@23]/2", // D E
  L: "[[b5,e6,g#6]@7 ~ [f#5,a5,c#6]@16 ~@8]/2", M: "~@13 f#4 a4 c#5", N: "f#5 ~@7",
})).s("gm_pad_new_age").gain(0.3).pan(0.2)

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

// drums · snare
const snare = s("sd").struct("<~@9 A B@7 C B@24 D E B@31 F G B@7 G H I B@17 D E B@6 F J B@10 ~@3>".pickRestart({
  A: "~@8 x ~@4 x ~@2", B: "~ x ~ x", C: "~@2 x ~@3 x!2", D: "~ x!2 ~@5", E: "~@7 x ~@4 x ~@3", F: "~@2 x ~@2 x!2 ~",
  G: "~@4 x ~@7 x ~@2 x", H: "~@2 x ~ x!2 ~@2 x ~@3 x ~@3", I: "x ~@2 x!2 ~ x ~@5 x ~@3", J: "~@12 x ~@2 x",
})).gain(0.35)

// drums · low tom
const low_tom = s("lt").struct("<~@9 A ~@32 B C ~@60 B C ~@7 C ~@13>".pickRestart({
  A: "x", B: "~@3 x", C: "~ x ~@2",
})).gain(0.4)

// drums · hihat
const hihat = s("hh").struct(`<
  ~ A@9 B@9 C B C B C B C D@9 B C B C B C D E F G H G H G H G H I@9 G H G H G H I G H G H G H G J K B C B C B C B C B C
  B D@5 L C B C B C B C B C B E F G H G H G H J K L C B C B C B C B C M ~@2
>`.pickRestart({
  A: "~ x ~ x", B: "x!2 ~@3 x!10 ~", C: "x ~ x ~@2 x!10 ~", D: "x!2 ~@3 x!11", E: "x!5 ~ x ~ x ~@7",
  F: "~@8 x!2 ~@3 x!3", G: "x!7 ~ x ~ x ~@2 x!3", H: "x!7 ~ x!2 ~@3 x!3", I: "x!10 ~@3 x!3", J: "x!7 ~ x!5 ~ x ~",
  K: "x", L: "~ x ~@3 x!10 ~", M: "x!2 ~@14",
})).gain(0.25)
// … 31 more lines

More by Chaka Khan