Strudelify

Hot Stuff

Donna Summer

KeyG minorTempo120 bpm
0:00/0:00
// Hot Stuff — Donna Summer
// 120 bpm, 4/4, key G minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 155 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, 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 · "Bass"
const bass = note(`<
  A@3 B@4 C@2 D E F D@2 E F D@2 E F D@2 E F G H I H I H J@4 K@5 L@2 D E F D@2 E F D@2 E F D@2 E F G H I H I H J@4 K@5
  L@2 D M N O P F D@3 Q N O P F D@3 E F D@2 E F G H I H I H J@4 K@5 L@2 D E F D@2 E F D@2 E F D@2 E F G H I H I H J@4
  K@5 L@2 D E F D@2 E F R S@2
>`.pickRestart({
  A: "[~@4 g1@29 ~@3 f1@12]/3", B: "[~@3 g1@15 ~@2 g1@30 ~@2 f1@12]/4", C: "[~@3 g1@16 ~ g1@2 ~@2 g1@2 ~@2 g1@2 ~@2]/2",
  D: "g1 ~ g1 ~ g1 ~ g1 ~", E: "g1 ~ f1 ~ f1 ~ f1 ~", F: "f1 ~ g1 ~ g1 ~ g1 ~", G: "g1@2 ~@2 c2@3 ~ c2@2 ~@2 d2@2 ~@2",
  H: "d2 ~ g1 ~ g1 ~ g1 ~", I: "g1 ~ c2 ~ c2 ~ d2 ~", J: "[g1@2 ~@2 c2@14 d2@17 ~ g1@2 ~@9 bb1@2 ~@2 c2@13]/4",
  K: "[~@4 g1@4 ~@7 bb1@2 ~@2 c2@15 ~@2 g1@3 ~@8 bb1@2 ~@2 c2@16 ~ g1@3 ~@7 bb1@2]/5",
  L: "[~@3 c2@8 ~ d1@7 ~ g1@2 ~@2 g1@2 ~@2 g1@2 ~@2]/2", M: "g1@2 ~@2 eb1@3 ~ eb1@2 ~@2 eb1@2 ~@2",
  N: "eb1 ~ eb1 ~ eb1 ~ eb1 ~", O: "eb1 ~ f1 ~ f1 ~ f1 ~", P: "f1 ~ f1 ~ f1 ~ f1 ~",
  Q: "g1 ~ eb1 ~ eb1 ~ eb1 ~, a1 ~@15", R: "g1 ~ g1 ~@5", S: "[~ g1@4 ~@3]/2",
})).s("gm_electric_bass_finger").gain(0.48)

// chords · overdriven guitar · "Distort Guitar"
const overdriven_guitar = note(`<
  A@2 B C D@2 E F G@4 H@3 I@5 G@4 J K J L M L N O P Q R S T U V U G@4 H@3 I@5 G@4 J K J L M L N O P Q R S T U V U W@2
  X@2 Y@6 X@2 Z@2 AA@6 H@3 AB@2 K J L M L N O P Q R S T U V U G@4 H@3 I@5 G@4 J K J L M L N O P Q R S T U V U AC ~@7 AC
  AD@2
>`.pickRestart({
  A: "[~ [g2,d3,g3]!2 [g2,d3,g3]@16 ~@13]/2", B: "~@2 [f2,c3,f3]!2 [f2,c3,f3]@12", C: "~@3 [g2,d3,g3]@13",
  D: "[~@2 [g2,d3,g3]!2 [g2,d3,g3]@28]/2", E: "~@2 [f2,g2,c3,f3] [f2,c3,f3] [f2,c3,f3]@12", F: "~ [g2,d3,g3]@7",
  G: "[~@4 [g2,d3,g3]@29 ~@3 [f2,c3,f3]@14 ~@2 [g2,d3,g3]@12]/4", H: "[~@4 [g2,d3,g3]@29 ~@3 [f2,c3,f3]@12]/3",
  I: "[~@4 [g2,d3,g3]@14 ~@2 [g2,d3,g3]@29 ~@3 [f2,c3,f3]@14 ~@2 [g2,d3,g3]@12]/5", // G5 F5 G5
  J: "~@2 [c3,g3,c4]@3 ~ [d3,a3,d4]@2", K: "~ [d3,g3]@3", L: "~ [g2,d3,g3]@3", M: "~@4 [c3,g3,c4]@5 ~@3 [d3,a3,d4]@4",
  N: "~ [c3,g3,c4]@3", O: "~@2 [d3,a3,d4]@13 ~", P: "~@4 [g2,d3,g3]@6 ~@4 [bb2,f3,bb3] ~", Q: "~ [c3,g3,c4]@5 ~@2",
  R: "~@4 [g2,d3,g3]@7 ~@4 [bb2,f3,bb3]", S: "~@3 c3@13, ~ [g3,c4]@7", T: "~@4 [g2,d3,g3]@7 ~@3 [bb2,f3,bb3] ~",
  U: "~@3 [c3,g3,c4]@13", V: "~@4 [g2,d3,g3]@8 ~@2 [bb2,f3,bb3] ~", W: "[~ [g2,d3,g3]@7]/2", X: "[~ [eb2,bb2,eb3]@7]/2",
  Y: "[~@4 [f2,c3,f3]@29 ~@3 [g2,d3,g3]@29 ~@3 [g2,d3,g3]@28]/6", Z: "[~ [f2,c3,f3]@7]/2",
  AA: "[~@4 [g2,d3,g3]@29 ~@3 [g2,d3,g3]@29 ~@3 [f2,c3,f3]@14 ~@2 [g2,d3,g3]@12]/6", // G5 F5 G5
  AB: "[~@2 [g2,d3,g3]@7 ~ [c3,g3,c4]@3 ~ [d3,a3,d4]@2]/2", AC: "~@2 [g2,d3,g3] ~@5", AD: "[~@4 [g2,d3,g3]@17 ~@11]/2",
})).s("gm_overdriven_guitar").gain(0.3).pan(0.7)

// other · electric guitar muted · "Muted guitar"
const electric_guitar_muted = note(`<
  ~@8 A B C D B@2 E F B@2 C D B@2 E F G H G I J K L M N ~@7 A B C D B@2 E F B@2 C D B@2 E F G H G I J K L M N ~@7 A B O
  P Q R S B@3 T P U R V B W B C D B@2 E F G H G I J K L M N ~@7 A B C D B@2 E F B@2 C D B@2 E F G H G I J K L M N ~@7 A
  B C D B@2 E F X ~@2
>`.pickRestart({
  A: "~@4 g3 ~ g3!3 ~ g3!3 ~ g3!2", B: "g3 ~ g3!3 ~ g3!3 ~ g3!3 ~ g3!2", C: "g3 ~ g3!2 f3 ~ f3!3 ~ f3!3 ~ f3!2",
  D: "f3 ~ f3 g3!2 ~ g3!2 ~ g3!4 ~ g3!2", E: "~ g3!3 ~ [f3,g3] f3!3 ~ f3!3 ~ f3!2", F: "~ f3!3 ~ g3!2 ~ g3!3 ~ g3!4",
  G: "g3 ~ g3!2 c4 ~ c4!3 ~ c4!2 d4 ~ d4!2", H: "d4 ~ d4!2 g3 ~ g3!3 ~ g3 ~ g3!4",
  I: "d4 ~ d4!2 [f3,g3] ~ g3!3 ~ g3!3 ~ g3!2", J: "g3 ~ g3!2 c4 ~ c4 ~ c4!4 d4 ~ d4!2",
  K: "d4 ~ d4!2 g3 ~ g3!3 ~ g3!3 ~ g3!2", L: "g3 ~ g3 ~ c4@12", M: "~@3 d4@13", N: "~@2 g3 ~@5",
  O: "g3 ~ g3!2 eb3 ~ eb3!3 ~ eb3!3 ~ eb3!2", P: "eb3 ~ eb3!3 ~ eb3!3 ~ eb3!3 ~ eb3!2",
  Q: "eb3 ~ eb3!2 f3 ~ f3!3 ~ f3!3 ~ f3!2", R: "f3 ~ f3!3 ~ f3!3 ~ f3!3 ~ f3!2", S: "f3 ~ f3!2 g3 ~ g3!3 ~ g3!3 ~ g3!2",
  T: "~ g3!3 ~ eb3!3 ~ eb3!4 ~ eb3!2", U: "eb3 ~ eb3!2 f3 ~ f3!3 ~ f3!2 ~ f3!3",
  V: "f3 ~ f3!2 g3 ~ g3!3 ~ g3 g3@2 ~ g3!2", W: "g3 ~ g3 ~ g3 ~ g3!3 ~ g3!3 ~ g3!2", X: "g3 ~ g3!3 ~@11",
})).s("gm_electric_guitar_muted").gain(0.3).pan(0.6)

// chords · electric guitar clean · "Rhythm guitar"
const electric_guitar_clean = note(`<
  A@2 B C D@2 B E F G H I J@2 K L M N K O P Q R S T U V W X Y Z AA AB AC AD AE AB AE AD AE F G H I J@2 K L M N K O P Q R
  S T U V W X Y Z AA AF@2 AD AE AB AE AD AE ~@16 AG N K O P Q R S T U V W X Y Z AA AF@2 AD AE AB AE AD AE F G H I J@2 K
  L M N K O P Q R S T U V W X Y Z AA AB AC AD AE AB AE AD AE F G H I J@2 K L AH AI@2
>`.pickRestart({
  A: "[~@2 [g3,d4]@9 ~@5]/2", B: "~ [f3,c4]@3", C: "~@3 [g3,d4]@12 ~", D: "[~ [g3,d4]@6 ~]/2", E: "~ [g3,d4]@6 ~",
  F: "~@6 [bb3,d4,g4] ~ [bb3,d4,g4] ~@5 [bb3,d4,g4] ~", // Gm
  G: "[bb3,d4,g4] ~@5 [bb3,d4,g4] bb3 [d4,g4] ~@5 [bb3,d4,g4] bb3", // Gm G5 Gm
  H: "[d4,g4] ~@5 [a3,c4,f4] ~ a3 [c4,f4] ~@4 [a3,c4,f4] a3", // G5 F F5 F
  I: "[c4,f4] ~@5 [bb3,d4,g4] bb3 [d4,g4] ~@5 [bb3,d4,g4] bb3", // F5 Gm G5 Gm
  J: "[d4,g4] ~@5 [bb3,d4,g4] bb3 [d4,g4] ~@5 [bb3,d4,g4] bb3", // G5 Gm G5 Gm
  K: "[d4,g4] ~@5 [a3,c4,f4] a3 [c4,f4] ~@5 [a3,c4,f4] a3", L: "[c4,f4] ~@5 [bb3,d4,g4] bb3 [d4,g4] ~@5 [d4,g4] bb3",
  M: "d4 ~@5 [d4,g4] bb3 [d4,g4] ~@5 [bb3,d4,g4] bb3", N: "d4 ~@5 [bb3,d4,g4] bb3 [d4,g4] ~@5 [bb3,d4,g4] bb3",
  O: "[c4,f4] ~@5 [bb3,d4] bb3 d4 ~@5 [bb3,d4] bb3, ~@6 g4@3 ~@5 g4@2", // F5 Bb
  P: "d4 ~@5 [bb3,d4] bb3 d4 ~@5 [d4,g4] bb3, ~@6 g4@3 ~@7", Q: "d4 ~@5 [d4,g4] bb3 ~@6 [d4,g4] bb3",
  R: "g4 ~@5 [a3,c4,f4] a3 [c4,f4] ~@5 [a3,c4,f4] a3", S: "[c4,f4] ~@5 [bb3,d4,g4] bb3 ~@6 [bb3,d4,g4] bb3",
  T: "[d4,g4] ~@5 [g3,c4,e4] g3 [c4,e4] ~@5 [a3,d4,gb4] a3", U: "[d4,gb4] ~@5 [bb3,d4,g4] bb3 ~@6 [bb3,d4,g4] bb3",
  V: "d4 ~@5 [g3,c4,e4] g3 [c4,e4] ~@5 [a3,d4,gb4] a3", W: "[d4,gb4] ~@5 [bb3,d4,g4] ~ g4 ~@5 [bb3,d4,g4] bb3",
  X: "~@6 [g3,c4,e4] g3 [c4,e4] ~@5 [a3,d4,gb4] ~", Y: "a3 gb4 ~@4 [bb3,d4,g4] ~ [d4,g4] ~@5 [bb3,d4,g4] ~",
  Z: "[bb3,d4] ~@3 [g3,c4,e4]@11 ~", AA: "~ [a3,d4,gb4]@7", AB: "~@4 [g3,d4]@7 ~@3 [bb3,f4]@2", AC: "~@2 [c4,g4]@13 ~",
  AD: "~@2 [g3,d4]@3 ~@2 [bb3,f4]", AE: "~ [c4,g4]@7", AF: "[~@4 [g3,d4]@7 ~@4 f4@2 ~@2 [c4,g4]@13, ~@7 bb3 ~@8]/2",
  AG: "~@6 [d4,g4] bb3 [d4,g4] ~@5 [bb3,d4,g4] bb3", AH: "d4 ~@3 [bb3,d4,g4]@2 ~@10", AI: "[~@4 [bb3,d4,g4]@15 ~@13]/2",
})).s("gm_electric_guitar_clean").gain(0.25).pan(0.8)

// chords · electric guitar clean · "Rhythm guitar" · soft notes
const electric_guitar_clean_2 = note(`<
  ~@12 A B ~@2 C D ~@3 E F G ~ G D H I J D ~@7 K ~@5 A B ~@2 C D ~@3 E F G ~ G D H I J D ~@7 K ~@17 L D ~@3 E F G ~ G D
  H I J D ~@7 K ~@5 A B ~@2 C D ~@3 E F G ~ G D H I J D ~@7 K ~@5 A B ~@2 D ~@2
>`.pickRestart({
  A: "~@7 [d4,g4] ~@7 d4", B: "~@7 d4 ~@8", C: "g4 ~@14 d4", D: "g4 ~@15", E: "g4 ~@7 [d4,g4] ~@7", F: "d4 ~@15",
  G: "~@8 [d4,g4] ~@7", H: "~@7 bb3 d4 ~@7", I: "[d4,g4] ~@15", J: "d4!2 ~@5 bb3 ~@8", K: "~@12 bb3 ~@3", L: "~@15 d4",
})).s("gm_electric_guitar_clean").gain(0.1).pan(0.8)

// other · lead 2 sawtooth · "Synth"
const lead_2_sawtooth = note(`<
  A@2 B C D@2 B E F G H I J G H K@2 ~@23 L G H M N G H K@2 ~@7 O C P C Q C R S@2 T U V U T U W@2 ~ X@2 Y@2 ~@3 Z AA@2
  ~@20 AB AC AB AD AB AE AF V F G H I J G H K@2 ~@23 AG G H AH J G H AI ~@3
>`.pickRestart({
  A: "[~ [g3,g4]@5 ~@2]/2", B: "~ [f3,f4]@3", C: "~ [g3,g4]@7", D: "[~@4 [g3,g4]@17 ~@11]/2", E: "~@2 [g3,g4]@13 ~",
  F: "~@4 [g3,g4]@2 [a3,a4]@2 [bb3,bb4]@2 [c4,c5] ~ [d4,d5] ~ [f4,f5]@2", // G A Bb C D F
  G: "~@2 [g4,g5]@4 [f4,f5] ~ [g4,g5]@2 [f4,f5] ~ [c4,c5]@2 [bb3,bb4] ~", // G F G F C Bb
  H: "~@2 [c4,c5]@4 [bb3,bb4] ~ [c4,c5]@2 [bb3,bb4] ~ [c4,c5]@2 [bb3,bb4] ~", // C Bb C Bb C Bb
  I: "[c4,c5] ~ [c4,c5]@6 [bb3,bb4]@2 [g3,g4]@6", // C Bb G
  J: "~@2 [g3,g4]@3 ~ [a3,a4] ~ [bb3,bb4]@2 [c4,c5] ~ [d4,d5] ~ [f4,f5] ~", // G A Bb C D F
  K: "[[c4,c5] ~ [c4,c5]@6 [bb3,bb4]@2 [g3,g4]@9 ~@13]/2", // C Bb G
  L: "~@4 [g3,g4]@2 [a3,a4]@2 [bb3,bb4]@2 [c4,c5] ~ [d4,d5]@2 ~ [f4,f5], ~@8 [a3,a4] ~@7", // G A Bb C D F A
  M: "[c4,c5] ~ [c4,c5]@6 [bb3,bb4]@2 [g3,g4]@5 ~", // C Bb G
  N: "~@2 [g3,g4]@4 [a3,a4] ~ [bb3,bb4]@2 [c4,c5] ~ [d4,d5]@2 [f4,f5] ~", O: "~@4 [c4,c5]@5 ~@3 [d4,d5]@4",
  P: "~@2 [c4,c5]@3 ~ [d4,d5]@2", Q: "~@4 [c4,c5]@7 ~ [d4,d5]@4", R: "~ [c4,c5]@3",
  S: "[~ [d4,d5]@8 ~ [g3,g4] ~@4 [bb3,bb4]]/2", T: "~ [c4,c5]@7", U: "~@2 [g3,g4]@2 ~@3 [bb3,bb4]", V: "~ [c4,c5]@6 ~",
  W: "[~@2 [c4,c5]@12 ~@2 [f3,b3,c4,f4,b4,c5] [f3,g3,a3,f4,g4,a4] [b2,c3,d3,e3,b3,c4,d4,e4] [f2,g2,a2,f3,g3,a3] [e2,e3] ~@11, ~@15 [d4,d5]@2 ~@15]/2", // C F Cmaj7 F E D
  X: "[~@10 [ab4,ab5] [a4,a5]@3 [g4,g5]@4 [f4,f5]@4 [g4,g5]@4 [a4,a5]@4 [g4,g5]@2]/2", // Ab A G F G A G
  Y: "[[f4,f5]@2 [g4,g5]@27 ~@3]/2", Z: "~@2 [ab4,ab5] [a4,a5]@3 [g4,g5]@4 [f4,f5]@4 [g4,g5]@2, ~@3 [g4,g5] ~@12",
  AA: "[[a4,a5] [g4,g5]@15]/2", AB: "~@4 [g3,g4]@7 ~@3 [bb3,bb4]@2", AC: "~ [c4,c5]@5 ~@2", AD: "~@2 [c4,c5]@11 ~@3",
  AE: "~@2 [c4,c5]@13 ~", AF: "~@2 [g3,g4]@4 ~ [bb3,bb4]",
  AG: "~@4 [g3,g4]@2 [a3,a4] ~ [bb3,bb4]@2 [c4,c5] ~ [d4,d5] ~ [f4,f5] ~", // G A Bb C D F
  AH: "[c4,c5] ~ [c4,c5]@5 ~ [bb3,bb4] ~ [g3,g4]@6", AI: "[c4,c5] ~ [c4,c5]@6 [bb3,bb4] ~ [g3,g4]@6",
})).s("gm_lead_2_sawtooth").gain(0.3).pan(0.4)

// chords · electric guitar clean · "Chorus guitar"
const electric_guitar_clean_3 = note(`<
  ~@11 A B ~@2 A B ~@2 A B ~@2 C B ~@18 A B ~@2 A B ~@2 D@2 ~@2 A B ~@34 A B ~@2 A B ~@18 A B ~@2 A B ~@2 A B ~@2 C B
  ~@26
>`.pickRestart({
  A: "~@10 [g3,bb3] ~@3 [f3,a3] ~", B: "~@2 [g3,bb3] ~@13", C: "~@10 [g3,bb3,b3] ~@3 [f3,a3] ~",
  D: "[~@10 [g3,bb3] ~@3 [f3,a3]@4 ~@14]/2", // Gm F
})).s("gm_electric_guitar_clean").gain(0.35).pan(0.1)

// chords · distortion guitar · "Solo Guitar"
const distortion_guitar = note("<~@72 A B C D E@2 F@2 G@2 H@2 I J@4 ~@66>".pickRestart({
  A: "~@4 [c5,f5] c5 [e5,f5] [c5,f5] c5 [c5,f5]!7", B: "[c5,f5] c5 [c5,f5]!4 f5 [c5,f5]!6 c5 [c5,f5]!2",
  C: "f5 ~@3 a5@10 g5 ~, c5@4 ab5 ~@11, ~ f5@5 ~@10", D: "f5@2 g5 ~ a5@6 f5@3 ~ g5@2",
  E: "[a5 ~ bb5@4 a5@2 g5 ~ a5@4 g5@5 ~@3 d5 [e5,f5] ~ f5 d5 db5 c5 bb4 c5 bb4, ~@10 b5 ~@13 g5@2 ~@6]/2", // Fmaj7
  F: "[c5 bb4 c5 bb4 c5@16 bb4 [b4,c5] bb4@4 g4@3 ~ f4 ~]/2", // Cmaj7
  G: "[[f4,g4,a4] ~ [f4,bb4]@19 f4 g4 ~ bb4 ~ bb4 ~ bb4@2 g4 bb4, ~@2 g4 ~@29]/2", // F Bb5
  H: "[a4 g4 bb4 ~ c5@16 bb4 c5 bb4@2 g4@5 ~ f4 g4]/2", I: "a4 ~ bb4 ~ c5@5 ~ bb4 ~ a4 bb4 a4 ~",
  J: "[f4@5 ~ f4 g4 a4 ~ bb4 ~ c5 ~@2 d5@2 ~ eb5@2 f5@2 ~ g5@2 a5@2 ~ bb5@2 ~ c6@2 ~ c6@30]/4",
})).s("gm_distortion_guitar").gain(0.48)

// drums · kick
const kick = s("bd").struct("<[~ x!3] [x!4]!151 [x!2 ~@2] [~ x ~@2] ~>").gain(0.6)

// drums · snare
const snare = s("sd").struct("<[~ x] [x!2]!69 [x!2 ~@6 x ~@7] [x!2]!81 [x!2 ~@2] ~@2>").gain(0.6)

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

// drums · hihat
const hihat = s("hh").struct("<A B@29 C ~@9 A B@21 C ~@9 A B@29 C ~@9 A B@21 C ~@9 D B@7 E ~@2>".pickRestart({
  A: "~ x!3", B: "x!4", C: "x", D: "~@2 x!2", E: "x!2 ~@2",
})).gain(0.36)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@7 A B ~@2 C B ~@2 D E ~@6 F E ~@2 C B ~@4 G E D E D E D E ~@2 H I ~@2 A J ~@7 K ~ B ~ B ~ B ~@2 D E L M ~@2 N E ~@6
  F E ~@6 O E ~@2 C B ~@2 G E ~@3 B ~ J ~@2 G E F E P E Q E ~@2 R ~@3 F E ~@6 F E ~@2 F E C B ~@2 G E F E A J S I ~@2 T
  E ~@3 G E ~
>`.pickRestart({
  A: "~@6 x!2", B: "x!2 ~ x ~@12", C: "~@11 x ~@2 x ~", D: "~@7 x!2 ~ x ~ x!2 ~ x", E: "x", F: "~@9 x!2 ~ x ~ x ~",
  G: "~@7 x ~@2 x ~ x!2 ~ x", H: "~@11 x!2 ~ x ~", I: "x!2 ~@14", J: "x!2 ~@6", K: "~@3 x ~@12",
  L: "~@7 x!2 ~ x ~@2 x ~ x", M: "~ x ~@6", N: "~@3 x!2 ~ x ~@2 x ~ x!2 ~ x ~", O: "~@3 x!2 ~ x ~ x!2 ~ x!2 ~ x ~",
  P: "~@3 x ~@2 x ~ x!2 ~ x!2 ~@3", Q: "~@3 x ~@2 x ~@2 x ~ x ~@2 x ~", R: "~@7 x", S: "~@3 x ~@2 x ~ x!2 ~ x ~@2 x ~",
  T: "~@10 x ~@2 x ~ x",
})).gain(0.42)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@8 A B@21 C D E ~ E ~ E ~ E ~ A B@21 C D E ~ E ~ E ~ E ~ A B@29 C D@3 E ~ E ~ E ~ A B@21 C D E ~ E ~ E ~ E ~ F B@7 D
  ~@2
>`.pickRestart({
  A: "~@3 x ~ x ~ x", B: "~ x ~ x ~ x ~ x", C: "~ x!2 ~@5", D: "~ x ~@6", E: "~ x ~@2", F: "~@2 x!2 ~ x ~ x",
})).gain(0.42)

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

// drums · crash
const crash = s("cr").struct(`<
  A ~ A B A ~ A C A ~@3 A ~@3 A ~@7 A ~@3 A ~ A C A ~ A ~ A ~ A ~ A ~@3 A ~@3 A ~@7 A ~ A ~ A ~ A C A ~ A ~ A ~ A ~ A
  ~@7 A ~@7 A ~ A ~ A ~ A ~ A ~@3 A ~ A C A ~ A ~ A ~ A ~ A ~@3 A ~@3 A ~@3 A ~@3 A ~ A ~ A ~ A C A ~ A ~ A ~ A ~ A ~@3
  A ~@4 A ~
>`.pickRestart({
  A: "~ x ~@2", B: "~@3 x ~@12", C: "~ x ~@6",
})).gain(0.48)
// … 5 more lines

More by Donna Summer