Strudelify
Smooth Operator cover art

1984 · Diamond Life

Smooth Operator

Sade

KeyD minorTempo121 bpm
0:00/0:00
// Smooth Operator — Sade
// 121 bpm, 4/4, key D minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 148 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(121/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 · fretless bass · "FRETLESS"
const bass = note(`<
  ~@3 A B C B D B C B E B C B D B C B E B C B D B C B E F G F G F H F I F G F G F H F I J K L M J K N O J K P ~ Q@8 R@2
  Q@4 S@2 T@2 U V W X U Y Z@8 F G F H F G F I J K L M J K AA O J K P ~ AB@2 Q@2 AC@4 AD@2 AE@4 AD@2 AB@2 Q@2 AC@4 AF@4
  AG@2 AH AB@2 Q@2 AC@4 AI
>`.pickRestart({
  A: "~@2 c3 b2 g2 gb2 d2 db2", B: "d2@3 ~@3 d2@2 c2@2 a1@2 ~@2 c2 ~", C: "c2@2 a1@2 ~@2 c2 ~ b1@2 ~@2 g1@2 ~@2",
  D: "c2@2 a1@2 ~@2 c2 ~ b1@2 b1 ~@3 db2@2", E: "c2@2 a1@2 ~@2 c2 ~ b1@2 b1 ~ db2@3 ~",
  F: "d2@4 ~@2 d2@2 a1@4 ~@2 a1 ~", G: "g1@2 ~ g1 a1@2 ~ c2", H: "g1@4 ~@2 g1@2 a1@3 ~ c2@3 ~",
  I: "g1@4 ~@2 g1@2 a1@2 c2 ~@3 e2@2", J: "g1@5 ~ d2@2 g2@3 d2 d2@2 g1@2", K: "a1@6 e2@2 a2@3 e2@3 c2@2",
  L: "d2@4 ~@2 d2@2 db2@5 ~ db2@2", M: "c2@5 ~ c2 ~ b1@4 e1@2 f1@2", N: "d2@7 a1", O: "d2@5 e2@2 d2",
  P: "~@4 d2@3 ~@3 a1 ~ c2@2 d2@2", Q: "[d2@4 ~@2 d2 ~ a1@2 a1@2 ~@2 g1@7 ~ g1 ~ a1@2 a1@2 c2@2 a1@2]/2",
  R: "[d2@4 ~@2 d2 ab1 a1@2 a1@2 ~@2 g1@7 ~ g1 ~ a1@2 a1@2 c2@2 a1@2]/2",
  S: "[d2@4 ~@2 d2 ~ a1@2 a1@2 ~@2 g1@7 ~ a1@8 ~@2]/2", T: "[d2@15 d2]/2", U: "g2@7 g2", V: "a2@7 a2", W: "d3",
  X: "d2@7 f2", Y: "a2", Z: "[d2@4 a2@2 a1@2 c2@4 e2@2 g1@7 ~ g1@2 a1@3 ~ e2@3 ~]/2", AA: "d2@3 c2 d2@3 c2",
  AB: "[d2@4 ~@2 d2 ~ a1@2 a1@2 ~@2 g1@7 ~ g1 ~ a1@2 a1@2 c2@2 c2@2]/2",
  AC: "[d2@4 ~@2 d2 ~ a1@2 a1@2 e2@2 g1@7 ~ g1 ~ a1@2 a1@2 c2@2 c2@2]/2",
  AD: "[d2@4 ~@2 d2 a1 a1@2 a1@2 ~@2 g1@7 ~ g1 ~ a1@2 a1@2 c2@2 a1@2]/2",
  AE: "[d2@4 ~@2 d2 a1 a1@2 a1@2 ~@2 g1@7 ~ g1 a1 a1@2 a1@2 c2@2 a1@2]/2",
  AF: "[d2@4 ~@2 d2 ~ a1@2 a1@2 ~@2 g1@7 ~ g1 ~ a1@2 a1@2 e2@2 e2@2]/2",
  AG: "[d2@4 ~@2 d2 ~ a1@2 a1@2 e2@2 g1@7 ~ g1 ~ a1@2 a1@2 e2@2 e2@2]/2", AH: "g1 c2", AI: "~@2 a1 ~ c2 ~ d2@2 ~@8",
})).s("gm_fretless_bass").gain(0.26)

// chords · epiano2 · "E.PIANO 2"
const epiano2 = note(`<
  ~@4 A@2 B C B D B C E@2 F G H I J@2 E@2 K L M@2 N O P@2 Q@2 P@2 Q@2 P@2 Q@2 P@2 Q@2 R S T U R S V W R S X ~ Y@2 Z@2
  Y@2 AA@2 AB@2 AC@2 AD@2 AE@2 AF@2 AG AH AI AJ AG AK AL AM AL AM AL AM AL AM P@2 Q@2 P@2 Q@2 R S T AN R S V W R S X ~
  Y@2 Z@2 Y@2 AA@2 AB@2 AC@2 AD@2 AB@2 Y@2 Z@2 Y@2 AA@2 Y@2 Z@2 Y@2 AO Y@2 Z@2 Y@2 AA@2 AP
>`.pickRestart({
  A: "[[d3,a3,c4,d4,f4]@23 ~ [e3,g3,b3,d4,e4]@4 [b3,d4,e4,g4] ~@3]/2", B: "[a3,c4,d4,f4]",
  C: "~@2 [a3,c4,d4,f4] ~@5 [g3,b3,d4]@2 [g3,b3,d4]@2 [b3,d4,e4,g4] ~@3", // Dm7 G Em7
  D: "~@2 [a3,c4,d4,f4] ~@5 [g3,b3,d4]@4 [b3,d4,e4,g4] ~@3", // Dm7 G Em7
  E: "[[d3,a3,c4,e4,f4]@23 ~ [e3,e4,g4,b4]@4 [b3,d4,e4,g4] ~@3]/2", // Dm7 Em Em7
  F: "[a3,c4,d4,f4,a4]@7 ~ [g3,c4,f4]@2 [g3,c4,f4] ~@5", G: "~@2 [g3,c4,f4] ~@5 [d4,e4,g4,b4]@4 [b3,d4,e4,g4] ~@3",
  H: "[a3,c4,e4,f4]", I: "~@2 [c5,e5,f5] ~@5 [a3,d4,g4]@4 [a3,d4,g4] ~@3",
  J: "[[g3,c4,f4]@20 ~ [d4,e4,f4] [g4,a4,b4] [d4,e4,f4,c5,d5] [g4,a4,b4,e5,f5] [d4,e4,f4,c5,d5] [g4,a4,b4,e5,f5] [c5,d5] [e5,f5] ~@3, ~@12 g5!3 ~]/2", // Csus4 Dm G Dm7 Em Dm7 Em Csus2 …
  K: "[a3,c4,d4,f4,a4]", L: "~@2 [c5,e5,f5] ~@5 [g4,c5,f5]@2 [g4,c5,f5] ~@5", M: "[[d4,g4,a4,c5]@28 [b3,d4,g4] ~@3]/2",
  N: "[f3,a3,c4,d4]", O: "~@2 [f3,a3,c4,d4] ~@5 [e4,g4,b4]@2 [e4,g4,b4]@2 [d4,e4,g4,b4] ~@3",
  P: "[~@4 [c4,f4,a4] ~@3 [c4,e4,g4]@2 [c4,e4,g4] ~@3 [a3,bb3,d4,f4]@9 ~ [a3,c4,e4,g4]@3 ~ [c4,e4,g4] ~@3]/2", // F C Bbmaj7 Am7 C
  Q: "[~@4 [c4,f4,a4] ~@3 [c4,e4,g4]@2 [c4,e4,g4] ~@3 [g3,bb3,d4,f4]@9 ~ [a3,c4,e4,g4]@2 [a3,c4,e4,g4]@2 [c4,e4,g4] ~@3]/2", // F C Gm7 Am7 C
  R: "[g2,g3,bb3,d4,f4]", S: "[a2,a3,c4,e4,g4]", T: "[d3,c4,e4,f4,a4]",
  U: "~@2 [c4,e4,f4,a4] ~@5 [a2,c4,e4,g4]@2 [a2,c4,e4,g4] ~@5", V: "[d3,f3,a3,c4,e4,g4]",
  W: "~@2 [f3,a3,c4,e4] ~@5 [a3,c4,e4,g4]@2 [a3,c4,e4,g4] ~@5", // Fmaj7 Am7
  X: "~@4 [d3,d4,f4,a4,d5]@3 ~@3 [a2,a3]@2 [c3,c4]@2 [d3,d4]@2", // Dm A C D
  Y: "[[d3,c4,f4,a4]@4 [a3,c4,f4,a4] ~@3 [a3,c4,e4,g4]@2 [a3,c4,e4,g4] ~@3 [g2,g3,bb3,d4,f4]@9 ~ [a2,a3,c4,e4,g4]@3 ~ [c4,e4,g4] ~@3]/2", // Dm7 F Am7 Gm7 Am7 C
  Z: "[[d3,c4,f4,a4]@4 [c4,f4,a4]@2 [f4,a4,c5] ~@3 [a3,c4,e4,g4] ~@3 [g2,g3,bb3,d4,f4]@9 ~ [a2,a3,c4,e4,g4]@3 ~ [c4,e4,g4] ~@3]/2", // Dm7 F Am7 Gm7 Am7 C
  AA: "[[d3,c4,f4,a4]@4 [c4,f4,a4]@2 [f4,a4,c5] ~@3 [a3,c4,e4,g4] ~@3 [g2,g3,bb3,d4,f4]@9 ~ [a3,c4,e4,g4]@2 [a3,c4,e4,g4]@2 [a3,c4,e4,g4] ~@3]/2", // Dm7 F Am7 Gm7 Am7
  AB: "[~@4 [a3,c4,f4,a4] ~@3 [a3,c4,e4,g4]@2 [a3,c4,e4,g4] ~@3 [g2,g3,bb3,d4,f4]@4 [g3,bb3,d4,f4] ~@5 [a2,a3,c4,e4,g4]@2 [a3,c4,e4,g4]@2 [c4,e4,g4] ~@3]/2", // F Am7 Gm7 Am7 C
  AC: "[~@4 [a3,c4,f4,a4] ~@3 [a3,c4,e4,g4]@2 [a3,c4,e4,g4] ~@3 [g2,g3,bb3,d4,f4]@10 [a2,a3,c4,e4,g4]@2 [a3,c4,e4,g4]@2 [c4,e4,g4] ~@3]/2", // F Am7 Gm7 Am7 C
  AD: "[~@4 [f4,a4,c5,d5] ~@3 [e4,g4,a4,c5]@2 [e4,g4,a4,c5] ~@3 [g2,g3,bb3,d4,f4,a4]@9 ~ [a2,a3,c4,e4,g4]@7 ~]/2", // Dm7 Am7 Gm7 Am7
  AE: "[~@4 [a3,c4,f4,a4] ~@3 [a3,c4,e4,g4]@2 [a3,c4,e4,g4] ~@3 [g2,g3,bb3,d4,f4]@8 [a2,a3,c4,e4,g4]@8 ~@2]/2", // F Am7 Gm7 Am7
  AF: "[[d3,a3,c4,d4,f4]@31 ~]/2", AG: "[g2,g3,bb3,d4,f4]@15 ~", AH: "[a2,a3,c4,e4,g4]@15 ~",
  AI: "[d3,a3,c4,d4,f4]@15 ~", AJ: "[d3,c4,d4,f4,a4]@15 ~",
  AK: "[a2,a3,c4,e4,g4]@8 [a3,c4,e4,g4,a4]@3 ~ [a2,c4,e4,g4,c5]@3 ~", AL: "~@4 [c4,d4,f4,a4] ~@7 [a3,c4,e4,g4] ~@3",
  AM: "~@4 [g3,bb3,d4,f4] ~@7 [a3,c4,e4,g4] ~@3", // Gm7 Am7
  AN: "~@2 [c4,e4,f4,a4] ~@5 [a2,c4,e4,g4]@2 [a2,c4,e4,g4]@2 [a2,c4,e4,g4] ~@3", // Fmaj7 Am7
  AO: "[g2,g3,bb3,d4,f4] [c3,g3,bb3,d4,f4,a4]", AP: "~@2 [a3,a4] ~ [c4,c5] ~ [d4,d5]@2 ~@8",
})).s("gm_epiano2").gain(0.24)

// chords · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note("<~@71 A@7 B@3 ~@67>".pickRestart({
  A: "[~@16 [f4,a4]@30 ~@2 g4@15 ~ [g4,a4]@15 ~@2 a4@29 ~ [g3,bb3], ~@15 [a3,d4]@31 [g3,bb3]@17 [a3,c4,e4]@16 a3@31 ~@2, ~@47 d4@16 ~@17 [d4,f4]@30 ~@2]/7", // F Gsus2 Gm D5 Gm Am Dm
  B: "[[d4,g4]@15 ~ [e4,a4]@32, ~@15 [a3,c4]@32 ~]/3", // G5 A5 Am
})).s("gm_acoustic_guitar_steel").gain(0.12).pan(0.4)

// other · pad bowed · "BOWEDGLASS"
const pad_bowed = note("<~@72 A@2 B@2 C@2 D@2 ~@68>".pickRestart({
  A: "[~@8 d6@23 ~]/2", B: "[~@8 f6@11 a4@9 ~@4]/2", C: "[~@8 d7@23 ~]/2", D: "[~@3 e6@4 ~]/2",
})).s("gm_pad_bowed").gain(0.2)

// chords · pad halo · "HALO PAD"
const pad_halo = note("<~@72 A@2 B C A@2 B D ~@36 E F E F G H I J ~@24>".pickRestart({
  A: "[d3,a3,c4,f4]/2", B: "[g2,g3,bb3,d4,f4]", C: "[a2,a3,c4,d4,e4]", D: "[a2,a3,c4,d4,e4]@15 ~", E: "[c4,f4] [c4,e4]",
  F: "[bb3,d4] [c4,e4]", G: "[d4,a4] [e4,g4]", H: "[bb3,d4] [a3,e4]", I: "[d4,f4] [a3,e4]", J: "[bb3,f4] [c4,e4]",
})).s("gm_pad_halo").gain(0.06)

// other · fretless bass · "FRETLESS"
const fretless_bass = note("<~@72 A B C D E F G H ~@68>".pickRestart({
  A: "~@6 d3 ~ e3 f3@2 g3@2 ~ bb3@2", B: "~ a3@5 g3 f3 e3@3 f3@2 ~ g3@2", C: "~ d3@5 d3 ~@2 bb3@2 a3@2 ~ g3@2",
  D: "a3@3 bb3@3 a3@2 ~ g3@2 a3@3 bb3@2", E: "d4@5 ~ c4 bb3 c4@3 bb3@3 c4@2", F: "d4@5 c4 ~ bb3 c4@3 bb3@3 a3@2",
  G: "bb3@3 a3@3 bb3@2 c4@3 bb3@3 a3@2", H: "a3@3 bb3@3 g3@2 f3@3 e3@4 ~",
})).s("gm_fretless_bass").gain(0.18).pan(0.4)

// chords · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2 = note(`<
  ~@28 A@16 B C D@2 B C E@2 F@2 ~@2 A@8 G H I@2 J K L ~@9 M N M N M N M N O ~@7 B C D@2 B C E@2 P Q ~@2 G H I@2 J K R@2
  G H I@2 J K S@2 T@4 J K U@2 T@4 J K V T@4 J K U@2 ~
>`.pickRestart({
  A: "d5/4", B: "bb4", C: "c5", D: "d5/2", E: "e5/2", F: "[f4 g4, bb4]/2", G: "a4 g4", H: "f4 g4", I: "a4/2",
  J: "[f4,d5] [e4,c5]", K: "[f4,a4] [c4,g4]", L: "d4@8 c4@7 ~, a4@15 ~", M: "[d3,a3,c4,f4] [a2,g3,c4,e4]",
  N: "[a2,f3,bb3,d4] [a2,g3,c4,e4]", O: "d5", P: "[f4,bb4]@15 ~", Q: "[g4,c5]", R: "[d4 c4 bb3 c4, a4]/2",
  S: "[d4 c4 bb3 a3, a4]/2", T: "[f4@2 e4@2 d4@2 ~ c5, a4@7 ~, ~@3 e4]/2",
  U: "[d4@2 c4@2 bb3@2 ~ c5, a4@7 ~, ~@3 c4]/2", V: "[bb3,f4]@7 ~ [c4,f4]@7 ~",
})).s("gm_string_ensemble_2").gain(0.09)

// chords · electric guitar clean · "CLEAN GTR"
const electric_guitar_clean = note(`<
  ~@72 A B C D A B C D ~@8 E@2 F@2 E@2 G@3 H I@6 ~@4 J K L M N O P Q R@2 S@2 R@2 T@2 J K L M N O P Q J K L M N U@2 J K L
  M N O P Q ~
>`.pickRestart({
  A: "[c4,f4,a4]@2 [f4,a4] [c4,f4,a4] ~@2 a4 ~ [c4,f4,a4] ~@2 [c4,f4,a4] ~@2 a4 ~", // F
  B: "[c4,f4,a4]@2 [f4,a4] [c4,f4,a4] ~@2 a4 ~ [c4,f4,a4] f4 [f4,a4] [c4,f4,a4] ~@2 a4 ~", // F
  C: "[bb3,d4,g4]@2 [d4,g4] [bb3,d4,g4]!2 ~ g4 ~ [bb3,d4,g4] ~ [d4,g4] [bb3,d4,g4] ~@2 g4 ~", // Gm G5 Gm G5 Gm
  D: "[c4,e4,a4]@2 [e4,a4] [c4,e4,a4]!2 ~ a4 ~ [c4,e4,a4] a4 [e4,a4] [c4,e4,a4] ~@2 a4 ~", // Am A5 Am A5 Am
  E: "[f4 ~@3 [c4,f4,a4] ~@3 [c4,e4,g4] ~ [c4,e4,g4] ~@3 [bb3,d4,g4]@6 ~@2 g3 ~ [e4,g4] ~ e4 ~ [c4,e4,g4] ~@3]/2", // F C Gm Em C
  F: "[f4 ~@3 [c4,f4,a4] ~@3 [e4,g4] ~ [e4,g4] ~@3 [bb3,d4,g4]@7 ~@3 [e4,g4] ~ e4 ~ [c4,e4,g4] ~@3]/2", // F Em Gm Em C
  G: "[f4 ~@3 [c4,f4,a4] ~@3 [e4,g4] ~ [e4,g4] ~@3 [bb3,d4,g4]@7 ~@3 [e4,g4] ~ e4 ~ [c4,e4,g4] ~@3 [d4,a4]@13 ~@3, ~@31 bb3@14 ~@3]/3", // F Em Gm Em C D5
  H: "[c4,e4,g4]@7 ~, f4 ~@15", // C
  I: "[[c4,f4,a4]@24 ~@8 [d4,a4]@13 ~@3 [e4,g4]@15 ~ [c4,e4,g4]@17 ~ [c4,e4,g4] ~@7 [c4,e4,g4] ~@5, ~@31 bb3@13 ~@3 c4@15 ~ [f3,a3]@18 ~@15]/6", // F D5 Em C F
  J: "~@4 [c4,f4,a4] ~@5 [e4,g4]@2 ~@2 [bb3,d4]@2", K: "~@2 [bb3,d4,g4] ~@3 [bb3,d4,g4]@5 ~ [bb3,g4] ~@3",
  L: "~@2 [c4,f4,a4]@2 ~@4 [e4,g4] ~ [e4,g4] ~@3 [bb3,d4]@2", M: "~@2 [bb3,d4] ~@3 [bb3,d4,g4]@3 ~ [bb3,d4,g4] ~@5",
  N: "~@2 [c4,f4,a4]@3 ~@5 [c4,e4,g4]@2 ~@4", O: "~@2 [bb3,d4,g4]@3 ~ [bb3,d4,g4]@2 ~@4 [bb3,d4]@3 ~, ~@12 g4 ~@3",
  P: "~ [f4,a4] ~@3 [c4,e4,g4] ~ [bb3,d4,g4]", Q: "~@2 d4 ~ [bb3,d4,g4] ~ [bb3,d4,g4] ~@3 [bb3,d4,g4]@2 ~@4",
  R: "[~@4 [c4,f4,a4] ~@3 g4 ~ [c4,e4,g4] ~@3 [bb3,d4,f4]@4 [bb3,d4,f4] ~@5 [a3,c4,e4] ~ [c4,e4] ~ [a3,c4,e4] ~@3]/2", // F C Bb Am C Am
  S: "[~@2 f4 ~ [f4,a4]@2 c4 ~ e4 ~ [e4,g4]@2 ~@2 bb3@4 ~@2 bb3@2 a3@10, ~@4 c4 ~@9 [d4,f4]@10 ~@8]/2", // F Em Dm
  T: "[~@2 c4 ~ [c4,f4,a4]@2 ~@2 g4 ~ [c4,e4,g4]@2 ~@2 bb3@4 ~ bb3@2 ~@5 [c4,e4] ~@5, ~@7 [d4,f4]@4 ~@5]/2", // F C Dm
  U: "[~@2 [bb3,d4,g4]@3 ~ [bb3,d4,g4]@2 ~@4 [bb3,d4]@2 g4 ~ [d4,f4]@7 ~ [f4,a4]@8, ~@12 g4 ~@2 [g3,bb3]@7 ~ [bb3,d4]@9]/2", // Gm Bb Dm F Gm Bb
})).s("gm_electric_guitar_clean").gain(0.09).pan(0.4)

// chords · electric guitar clean · "CLEAN GTR" · soft notes
const electric_guitar_clean_2 = note(`<
  ~@72 A B C D A B C D ~@8 E F G H E F G H ~@12 I ~ J K L M N O P Q R ~ P Q S ~ I ~ J K L M N O I ~ J K L ~@2 I ~ J K L
  M N O ~
>`.pickRestart({
  A: "~@4 [c4,f4,a4] [c4,f4]!3 ~ [c4,f4] [f4,a4] ~ [c4,f4,a4] [c4,f4]!3", // F F5 F F5
  B: "~@4 [c4,f4,a4] [c4,f4]!3 ~ c4 ~@2 [c4,f4,a4] [c4,f4]!3", // F F5 F F5
  C: "~@5 [bb3,d4]!3 ~ [bb3,d4] ~@2 [bb3,d4,g4] [bb3,d4]!3", D: "~@5 [c4,e4]!3 ~ [c4,e4] ~@2 [c4,e4,a4] [c4,e4]!3",
  E: "[c4,a4] ~ [c4,f4,a4] ~@3 c4 ~@5 c4 ~@3", F: "~@4 [bb3,d4,g4] ~ [bb3,d4] ~ c4 ~ [c4,g4] ~@3 [e4,g4] ~",
  G: "[c4,a4] ~ [c4,f4,a4] ~@3 c4 ~ c4 ~ c4 ~ c4 ~@3", H: "~@6 [bb3,d4] ~ c4 ~ [c4,g4] ~@3 [e4,g4] ~",
  I: "~@6 c4 ~@3 c4@2 ~@2 g4@2", J: "~@6 c4 ~@3 c4 ~@3 g4@2", K: "~@2 g4 ~@13", L: "~@7 c4 ~@8", M: "~@14 g4 ~",
  N: "~@2 c4@2 ~@4 [c4,e4,g4] ~@7", O: "~@2 bb3 ~@13", P: "~@6 c4 ~ [c4,e4] ~@7", Q: "~@10 a3 ~@5",
  R: "~@8 c4 ~ c4@2 ~@4", S: "~@6 c4 ~@9",
})).s("gm_electric_guitar_clean").gain(0.02).pan(0.4)

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

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

// drums · snare
const snare = s("sd").struct(`<
  ~@11 A ~@15 A ~@15 A ~@10 B ~@9 C@6 D E ~@7 F C@26 B ~ C@15 D C@14 ~ C@8 G
>`.pickRestart({
  A: "~@7 x", B: "~@2 x ~@2 x!3", C: "~ x ~ x", D: "~@2 x ~@2 x!2 ~", E: "~@5 x!2 ~", F: "~@9 x!7", G: "~ x ~ x ~@4",
})).gain(0.4)

// drums · hihat
const hihat = s("hh").struct(`<
  A@11 B A@15 C A@15 C A@10 D ~ A@7 C E@7 ~@9 A@15 C A@10 D ~ A@7 C E@8 A@7 C A@14 C F
>`.pickRestart({
  A: "x!8", B: "x ~ x ~ x ~ x!3 ~ x ~ x ~@3", C: "x!7 ~", D: "x ~@4 x!3", E: "~ x ~ x", F: "~ x!2 ~@13",
})).gain(0.3)

// drums · open hat
const open_hat = s("oh").struct("<~@11 A ~@15 A ~@15 A ~@19 A ~@6 B A ~@23 A ~@19 A ~@15 A ~@14 A C>".pickRestart({
  A: "~@7 x", B: "~@5 x ~@2", C: "~ x ~@2",
})).gain(0.3)

// drums · crash
const crash = s("cr").struct(`<
  ~@4 A ~@6 B A ~@7 A ~@6 B A ~@3 A ~@3 A ~@3 A ~@2 B A ~@3 A ~@3 A ~ C ~ A ~@3 A ~@3 A ~@3 A ~ B D ~@7 E A ~@7 A ~@3 A
  ~@3 A ~@3 A ~@3 A ~ C ~ A ~@3 A ~@3 A ~@3 A ~ A ~ A ~@3 A ~@3 A ~@3 A ~@2 A ~@3 A ~@4
>`.pickRestart({
  A: "x", B: "~@7 x", C: "~ x ~@2", D: "~@3 x ~@4", E: "~ x",
})).gain(0.2)

// drums · ride
const ride = s("rd").struct("<~@64 A@6 B ~ A@7 C ~@36 A@8 ~@24>".pickRestart({
  A: "x!8", B: "x!5 ~@3", C: "x!4 ~@4",
})).gain(0.25)

// drums · congas
const congas = s("conga:13").struct(`<
  A B C B A B C B A B C B A B C B A B C B A B C B A B C B A B C B A B C D A B C B A B C D A B C B A B C D ~@4 A B C B A
  B C D A B C B A B E ~@9 A B C B A B A E A B C B A B C D A B C B A B C D ~@4 A B C B A B C D A B C B A B E ~ A F C G A
  H C D A B C G A D ~ A F C G A H C D ~
// … 64 more lines

More by Sade