Strudelify
Roxanne cover art

Outlandos D'Amour

Roxanne

The Police

KeyG minorTempo133 bpm
0:00/0:00
// Roxanne — The Police
// 133 bpm, 4/4, key G minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 7 "ACOU BASS" acoustic bass (copy of ch 2 "FINGERDBAS" electric bass finger)
// note: Full arrangement: all 105 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): MUTED GTR.
setcpm(133/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.

// chords · electric guitar clean · "CLEAN GTR"
const electric_guitar_clean = note(`<
  A B C D E F G H I@3 J K L M N O@3 P Q@3 R S@3 T U V W@4 X@2 Y@2 Z@2 AA@2 AB@2 AC@3 AD@5 AE AF AG AH AI@3 AD AE AF AG
  AH AI@3 AH AJ AK@2 AH AL@2 X@2 Y@2 Z@2 AM@2 Y@2 Z@2 AM@2 Y@2 Z@2 AM@2 Y@2 Z@2 AM@2 Y@2 AN ~@2
>`.pickRestart({
  A: "~@3 [bb3,d4,g4] ~@2 [bb3,d4,g4] ~@2 [bb3,d4,g4] ~@2", // Gm
  B: "[bb3,d4,g4]@2 ~@4 [bb3,d4,g4]@2 ~@5 [bb3,d4,g4]@2 ~@4 [bb3,d4,g4]@2 ~@3", // Gm
  C: "~ [bb3,d4,g4]@2 ~@4 [bb3,d4,g4]@2 ~@4 [bb3,d4,g4]@2 ~@4 [bb3,d4,g4]@2 ~@3", // Gm
  D: "~ [bb3,d4,g4]@2 ~@5 f4@2 ~@4 [a3,d4,f4]@2 ~@4 [a3,d4,f4]@2 ~@2, ~@7 [a3,d4]@2 ~@15", // Gm Dm D5
  E: "~ [a3,d4,f4] ~@2 [d4,g4,bb4] ~@2 [d4,g4,bb4] ~@2 [d4,g4,bb4] ~", // Dm Gm
  F: "~@2 [d4,g4,bb4]@2 ~@5 [c4,f4,a4]@2 ~@4 [c4,f4,a4]@2 ~@4 [c4,f4,a4]@2 ~", // Gm F
  G: "~@3 [c4,f4,a4]@2 ~@4 [bb3,eb4,g4]@2 ~@4 [bb3,eb4,g4]@2 ~@4 [bb3,eb4,g4]@2 ~", // F Eb
  H: "~@2 [bb3,eb4,g4] ~@2 [bb3,c4,f4] ~@2 [bb3,c4,f4] ~@2 [bb3,c4,f4]", // Eb Bbsus2
  I: "[~@4 [bb3,c4,f4]@2 ~ [c4,d4,g4]@49 ~@3 [bb3,d4,g4]@2 ~@4 [bb3,d4,g4]@2 ~@5]/3", // Bbsus2 Csus2 Gm
  J: "[bb3,d4,g4] ~@2 [bb3,d4,g4] ~@2 [a3,d4,f4] ~@2 [a3,d4,f4] ~@2", // Gm Dm
  K: "[a3,d4,f4] ~@2 [a3,d4,f4] ~@2 [d4,g4,bb4] ~@2 [d4,g4,bb4] ~@2", // Dm Gm
  L: "~ [d4,g4,bb4]@2 ~@4 [d4,g4,bb4]@2 ~@4 [c4,f4,a4]@2 ~@4 [c4,f4,a4]@2 ~@3", // Gm F
  M: "~ [c4,f4,a4]@2 ~@4 [c4,f4,a4]@2 ~@5 [bb3,eb4,g4]@2 ~@4 [bb3,eb4,g4]@2 ~@2", // F Eb
  N: "~ [bb3,eb4,g4] ~@2 [bb3,eb4,g4] ~@2 [bb3,c4,f4] ~@2 [bb3,c4,f4] ~", // Eb Bbsus2
  O: "[~@2 [bb3,c4,f4]@2 ~@5 f4 ~@2 [c4,d4,g4]@49 ~@3 [bb3,d4,g4]@2 ~@4 [bb3,d4,g4]@2, ~@4 [bb3,c4] ~@31]/3", // Bbsus2 Csus2 Gm Bbsus2
  P: "~@2 [bb3,d4,g4] ~@2 [bb3,d4,g4] ~@2 [a3,d4,f4] ~@2 [a3,d4,f4]", // Gm Dm
  Q: "[~@5 [a3,d4,f4]@2 ~@4 [a3,d4,f4]@2 ~@4 [d4,g4,bb4]@2 ~@4 [d4,g4,bb4]@2 ~@4 [d4,g4,bb4]@2 ~@4 [d4,g4,bb4]@2 ~@4 [c4,f4,a4]@2 ~@4 [c4,f4,a4]@2 ~@5 [c4,f4,a4]@2 ~@4 [c4,f4,a4]@2 ~@4 [bb3,eb4,g4]@2 ~@4]/3", // Dm Gm F Eb
  R: "[bb3,eb4,g4]@2 ~@4 [bb3,eb4,g4]@2 ~@4 [bb3,eb4,g4]@2 ~@5 [bb3,c4,f4]@2 ~@3", // Eb Bbsus2
  S: "[~ [bb3,c4,f4]@2 ~@4 [bb3,c4,f4]@2 ~@4 [bb3,c4,f4]@2 ~ [c4,d4,g4]@49 ~@3 [bb3,eb4,g4]@2 ~@2]/3", // Bbsus2 Csus2 Eb
  T: "~@2 [bb3,eb4,g4]@2 ~@5 [eb4,g4]@2 ~@4 [bb3,eb4,g4]@2 ~@4 [bb3,c4,f4]@2 ~, ~@4 bb3 ~@7", // Eb Bbsus2
  U: "~@3 [bb3,c4,f4]@2 ~@4 [bb3,c4,f4]@2 ~@4 [bb3,c4,f4]@2 ~@4 [c4,d4,g4]@2 ~", // Bbsus2 Csus2
  V: "~@3 [c4,d4,g4]@2 ~@5 [d4,g4]@2 ~@4 [c4,d4,g4]@2 ~@4 [c4,d4,g4]@2, ~@9 c4@2 ~@13", // Csus2 G5 Csus2
  W: "[~@4 [c4,d4,g4]@2 ~@4 [c4,d4,g4]@2 ~@5 g4@2 ~@4 [eb4,g4]@2 ~@4 g4@2 ~@4 [bb3,eb4,g4]@2 ~@4 [bb3,eb4,g4]@2 ~@4 [bb3,c4,f4]@2 ~@4 [bb3,c4,f4]@2 ~@4 [bb3,c4,f4]@2 ~@4 [bb3,c4,f4] ~@12 [g2,d3]@3 [g2,d3]@3 [g2,d3]@3 [g2,d3]@3 [g2,d3]@3 [g2,d3]@3, ~@16 [c4,d4]@2 ~@4 bb3@2 ~@4 [bb3,eb4]@2 ~@38 d4@15 ~@13, ~@23 [c4,g4]@5 g3@4]/4", // Csus2 Eb Bbsus2 G5 Csus2 Eb5 C5
  X: "[[g2,d3,g3]@3 [g2,d3,g3]@3 [g2,d3,g3]@3 [g2,d3,g3]@3 [g2,d3,g3]@2 ~ [c3,g3]@2 ~@4 [bb2,f3]@6 [bb2,f3]@3 [bb2,f3]@3 [bb2,f3] ~@2 [a2,e3]@3 bb2@3 [bb2,f3]@3 [bb2,f3]@2 ~]/2", // G5 C5 Bb5 A5 Bb5
  Y: "[[a2,e3]@3 bb2@3 [bb2,f3]@3 [bb2,f3]@3 [bb2,f3] ~@2 [eb3,bb3]@2 ~@4 [f3,c4]@6 [f3,c4]@3 [f3,c4]@3 [f3,c4]@2 ~ [e3,b3]@3 [f3,c4]@3 [f3,c4]@3 [f3,c4]@3]/2", // A5 Bb5 Eb5 F5 E5 F5
  Z: "[[e3,b3]@3 [f3,c4]@3 [f3,c4]@3 [f3,c4]@3 [f3,c4] ~@2 [f2,c3]@2 ~@4 d3@6 d3@3 [g2,d3]@3 [g2,d3] ~@2 [gb2,db3]@3 g2@3 [g2,d3]@3 [g2,d3]@2 ~, ~@7 g2@3 ~@6]/2", // E5 F5 G5 Gb5 G5
  AA: "[[gb2,db3]@3 g2@3 [g2,d3]@3 [g2,d3]@3 [g2,d3] ~@2 [c3,g3] ~@5 [bb2,f3]@6 [bb2,f3]@3 [bb2,f3]@3 [bb2,f3] ~@2 [a2,e3]@3 [bb2,f3]@3 [bb2,f3]@3 [bb2,f3]@2 ~]/2", // Gb5 G5 C5 Bb5 A5 Bb5
  AB: "[[a2,e3]@3 bb2@3 [bb2,f3]@3 [bb2,f3]@3 [bb2,f3] ~@2 [eb3,bb3]@2 ~@4 [f3,c4]@6 [f3,c4]@3 [f3,c4]@3 [f3,c4] ~@2 [e3,b3]@3 [f3,c4]@3 [f3,c4]@3 [f3,c4] ~@2]/2", // A5 Bb5 Eb5 F5 E5 F5
  AC: "[[e3,b3]@3 [f3,c4]@3 [f3,c4]@3 [f3,c4]@3 [f3,c4]@3 [f3,c4]@2 ~@4 [c4,f4]@47 ~@4, ~@21 g3@49 ~@2]/3", // E5 F5
  AD: "[bb3,d4,g4] ~@2 [bb3,d4,g4] ~@2 [bb3,d4,g4] ~@2 [bb3,d4,g4] ~@2", // Gm
  AE: "[a3,d4,f4] ~@2 [a3,d4,f4] ~@2 [a3,d4,f4] ~@2 [a3,d4,f4] ~@2", // Dm
  AF: "[d4,g4,bb4] ~@2 [d4,g4,bb4] ~@2 [d4,g4,bb4] ~@2 [d4,g4,bb4] ~@2", // Gm
  AG: "[c4,f4,a4] ~@2 [c4,f4,a4] ~@2 [c4,f4,a4] ~@2 [c4,f4,a4] ~@2", // F
  AH: "[bb3,eb4,g4] ~@2 [bb3,eb4,g4] ~@2 [bb3,eb4,g4] ~@2 [bb3,eb4,g4] ~@2", // Eb
  AI: "[[bb3,c4,f4]@2 ~@4 [bb3,c4,f4]@2 ~@4 [bb3,c4,f4]@2 ~@4 [bb3,c4,f4]@2 ~ [c4,d4,g4]@48 ~@3]/3", // Bbsus2 Csus2
  AJ: "[bb3,c4,f4] ~@2 [bb3,c4,f4] ~@2 [bb3,c4,f4] ~@2 [bb3,c4,f4] ~@2", // Bbsus2
  AK: "[c4,d4,g4] ~@2 [c4,d4,g4] ~@2 [c4,d4,g4] ~@2 [c4,d4,g4] ~@2", // Csus2
  AL: "[[bb3,c4,f4]@2 ~@4 [bb3,c4,f4]@2 ~@4 [bb3,c4,f4]@2 ~@4 [bb3,c4,f4] ~@11 [g2,d3]@3 [g2,d3]@3 [g2,d3]@3 [g2,d3]@3 [g2,d3]@3 [g2,d3]@3, ~@21 [c4,d4,g4]@14 ~ g3@12]/2", // Bbsus2 G5 Csus2
  AM: "[[gb2,db3]@3 g2@3 [g2,d3]@3 [g2,d3]@3 [g2,d3] ~@2 [c3,g3] ~@5 [bb2,f3]@6 [bb2,f3]@3 [bb2,f3]@3 [bb2,f3] ~@2 [a2,e3]@3 bb2@3 [bb2,f3]@3 [bb2,f3]@2 ~]/2", // Gb5 G5 C5 Bb5 A5 Bb5
  AN: "[e3,b3]@3 [f3,c4]@3 [f3,c4]@3 [f3,c4]@3 [f3,c4] ~@11", // E5 F5
})).s("gm_electric_guitar_clean").gain(0.35).pan(0.6)

// bass · electric bass finger · "FINGERDBAS"
const bass = note(`<
  ~@2 A B C D E F G@3 H I J K L M@6 N O P@4 Q R S T U@2 V@2 W@2 X@2 Y@2 Z@2 AA@3 AB AC AB AD AE AF AG AH AI AJ@3 AK AF
  AG AH AI AL@3 AI AM AN@2 AO AP@2 AQ@2 AR@2 AS@2 AT@2 AU@2 AV@2 AW@2 AX@2 AY@2 AZ@2 BA@2 AV@2 BB@2 BC@2 BD ~@2
>`.pickRestart({
  A: "~@10 g2@3 g2@4 ~@7", B: "~@11 f2@3 f2@4 ~@6", C: "~@11 eb2@3 eb2@3 ~@7", D: "~@12 d2@3 d2@4 ~@5",
  E: "~@12 c2@3 c2@4 ~@5", F: "~@13 f1@3 f1@3 ~@5", G: "[~@4 f1 ~@2 g1@49 ~@6 g2@3 g2@3 ~@4]/3",
  H: "~@15 f2@3 f2@4 ~@2", I: "~@16 eb2@3 eb2@3 ~@2", J: "~@16 d2@3 d2@4 ~", K: "~@17 c2@3 c2@4", L: "~@17 f1@3 f1@3 ~",
  M: "[~@9 f1 ~@2 g1@47 ~@8 g2@3 g2@4 ~@17 f2@3 ~ f2@4 ~@17 eb2@3 eb2@3 ~@18 d2@3 ~]/6", N: "d2@4 ~@17 c2@3",
  O: "c2@3 ~@19 f1@2", P: "[~ f1@3 ~@9 f1 ~@2 g1@49 ~@6 c2@3 c2@3 ~@19]/4", Q: "f1@3 f1@4 ~@17", R: "g1@3 ~ g1@4 ~@16",
  S: "~ g1@3 g1@4 ~@16", T: "~@2 c2@3 c2@4 ~@15",
  U: "[~@2 f1@3 f1@3 ~@9 f1 ~@3 g1@6 g1@3 g1@3 g1@3 g1@3 g1@3 g1@3 g1@3]/2",
  V: "[g1@3 g1@3 g1@3 g1@3 g1@2 ~ c2@2 ~@4 bb1@6 bb1@2 ~ bb1@3 bb1@3 bb1@3 bb1@3 bb1@3 bb1@3]/2",
  W: "[bb1@2 ~ bb1@3 bb1@3 bb1@3 bb1 ~@2 d2@3 ~@3 f2@6 f2@3 f2@3 f2@2 ~ e2@6 f2@3 f2@3]/2",
  X: "[e2@6 f2@3 f2@3 f2 ~@2 f1@2 ~@4 g1@6 g1@3 g1@3 g1@2 ~ gb1@6 g1@3 g1@3]/2",
  Y: "[gb1@6 g1@3 g1@3 g1 ~@2 b1@2 ~@4 bb1@6 bb1@3 bb1@3 bb1@3 a1@6 bb1@2 ~ bb1@3]/2",
  Z: "[a1@6 bb1@2 ~ bb1@3 bb1 ~@2 eb2@2 ~@4 e2@6 f2@3 f2@3 f2@3 e2@6 f2@3 f2@3]/2",
  AA: "[e2@6 f2@3 f2 ~@2 f1@3 f1@2 ~@4 g1@44 ~@4 f1@3]/3", AB: "g1 ~@6 g1", AC: "f1 ~@6 f1", AD: "f1 ~@5",
  AE: "~@3 gb2@3 g2@4 ~@14", AF: "~@3 f2@3 f2@4 ~@14", AG: "~ eb2!2 ~@5", AH: "~ d2!2 ~@5", AI: "~ c2!2 ~@5",
  AJ: "[~@3 f1@3 f1@4 ~@8 f1 ~@2 g1@47 ~@4]/3", AK: "~ g2!2 ~@5", AL: "[~@3 f1@3 f1@3 ~@9 f1 ~@2 g1@48 ~@3]/3",
  AM: "~ f1!2 ~@5", AN: "~ g1!2 ~@5", AO: "~ b1 c2 ~@5",
  AP: "[~@3 f1@3 f1@3 ~@9 f1 ~@2 g1@6 g1@3 g1@3 g1@3 g1@3 g1@3 g1@3 g1@3]/2",
  AQ: "[g1@3 g1@3 g1@3 g1@3 g1 ~@2 c2@2 ~@4 bb1@6 bb1@3 bb1@3 bb1@3 a1@6 bb1@2 ~ bb1@2 ~]/2",
  AR: "[a1@6 bb1@2 ~ bb1@3 bb1@2 ~ d2@2 ~@4 e2@6 f2@3 f2@3 f2@3 e2@6 f2@3 f2@3]/2",
  AS: "[e2@6 f2@3 f2@3 f2@2 ~ f1@3 ~@3 gb1@6 g1@3 g1@3 g1@2 ~ gb1@6 g1@3 g1@3]/2",
  AT: "[gb1@6 g1@3 g1@3 g1@2 ~ b1@2 ~@4 bb1@6 bb1@3 bb1@3 bb1@2 ~ a1@6 bb1@3 bb1@2 ~]/2",
  AU: "[a1@6 bb1@3 bb1@3 bb1 ~@2 eb2@3 ~@3 e2@6 f2@3 f2@3 f2@2 ~ e2@6 f2@3 f2@3]/2",
  AV: "[e2@6 f2@3 f2@3 f2@2 ~ f1@2 ~@4 g1@6 g1@3 g1@3 g1@2 ~ gb1@6 g1@3 g1@2 ~]/2",
  AW: "[gb1@6 g1@3 g1@3 g1@2 ~ b1@2 ~@4 a1@6 bb1@3 bb1@3 bb1@2 ~ a1@6 bb1@2 ~ bb1@2 ~]/2",
  AX: "[a1@6 bb1@3 bb1@3 bb1 ~@2 d2@2 ~@4 f2@6 f2@3 f2@3 f2@3 e2@6 f2@3 f2@2 ~]/2",
  AY: "[e2@6 f2@2 ~ f2@3 f2@2 ~ f1@2 ~@4 g1@6 g1@3 g1@3 g1@2 ~ gb1@6 g1@3 g1@2 ~]/2",
  AZ: "[gb1@6 g1@3 g1@3 g1@2 ~ c2@2 ~@4 bb1@6 bb1@3 bb1@3 bb1@2 ~ a1@6 bb1@3 bb1@2 ~]/2",
  BA: "[a1@6 bb1@3 bb1@3 bb1 ~@2 d2@2 ~@4 e2@6 f2@3 f2@3 f2@2 ~ e2@6 f2@3 f2@2 ~]/2",
  BB: "[gb1@6 g1@3 g1@3 g1@2 ~ c2@2 ~@4 a1@6 bb1@3 bb1@3 bb1@2 ~ a1@6 bb1@3 bb1@2 ~]/2",
  BC: "[a1@6 bb1@3 bb1@3 bb1@2 ~ eb2@3 ~@3 e2@6 f2@3 f2@3 f2@2 ~ e2@6 f2@3 f2@2 ~]/2", BD: "e2@6 f2@3 f2@3 f2@2 ~@10",
})).s("gm_electric_bass_finger").gain(0.38)

// chords · electric guitar muted · "MUTED GTR"
const electric_guitar_muted = note(`<
  A B C D ~ E ~ F ~@2 G@2 ~@2 H ~ I@3 ~ J ~@2 K ~@3 L ~ M N O P@2 ~@5 Q R ~@3 S@3 ~@26 T ~@5 Q R ~@4 Q R ~@4 Q R ~@4 Q R
  ~@6
>`.pickRestart({
  A: "~@5 bb3@2 ~@17", B: "~@6 [bb3,d4,g4] ~@2 [bb3,d4,g4] ~@2", C: "d4 ~@11", D: "~@7 f4@2 ~@10 a3@2 ~@3",
  E: "~@4 [a3,c4,f4] ~@7", F: "~@3 [g3,bb3,eb4]@2 ~@4 f3@2 ~@13", G: "[~@23 [bb3,d4,g4]@2 ~@23]/2",
  H: "~@13 [g3,bb3,eb4]@2 ~@4 g3@2 ~@3", I: "[~@8 f3 ~@2 [g2,d3]@49 ~@3 [bb3,d4,g4]@2 ~@7, ~@11 g3@42 ~@19]/3",
  J: "~@2 [a3,d4,f4] ~@2 a3 ~@6", K: "~@9 [f3,bb3,c4] ~@2", L: "~@4 g3 ~@7", M: "~@9 [g3,d4]@2 ~@4 g3@2 ~@7",
  N: "~@8 g3 ~@2 g3", O: "~@5 eb4@2 ~@17, ~@2 g3 ~@9", P: "[~@21 d4@6 g2@2 ~@19, ~@10 g3@3 ~@11]/2", Q: "~ g2 ~@6",
  R: "~@18 e2 ~@5", S: "[~@21 d3@49 ~@2]/3", T: "~@3 g2@2 ~@19",
})).s("gm_electric_guitar_muted").gain(0.33).pan(0.4)

// chords · pan flute
const pan_flute = note("<~@34 A@2 B@8 ~@30 A@2 C@24 D@3 ~@2>".pickRestart({
  A: "[~@15 [c5,eb5]@4 ~@2 [d5,f5]@27]/2", // Cm Dm
  B: "[~@15 [d5,bb5]@3 ~@3 [c5,f5]@40 ~@2 [c5,bb5]@3 ~@3 [d5,g5]@40 ~@2 [c5,bb5]@3 ~@3 [d5,f5]@40 ~@2 [d5,bb5]@3 ~@3 [c5,a5]@27]/8", // Gm F5 C7 G5 C7 Dm Gm F
  C: "[~@15 [d5,bb5]@3 ~@3 [c5,f5]@40 ~@2 [c5,bb5]@3 ~@3 [d5,g5]@40 ~@2 [c5,bb5]@3 ~@3 [d5,f5]@27]/6", // Gm F5 C7 G5 C7 Dm
  D: "[~@15 [d5,bb5]@3 ~@3 [c5,f5]@40 ~@11]/3", // Gm F5
})).s("gm_pan_flute").gain(0.3)

// drums · kick
const kick = s("bd").struct(`<
  ~@2 A@2 B C@2 D E ~ F G H@2 I@2 C ~ J@2 K L@2 M H ~ N ~ O@2 P Q R ~ S T U@9 O ~ V@9 W ~@2 V@5 W ~@2 V@5 W ~ S T U@19
  X@7 Y ~@2
>`.pickRestart({
  A: "~@5 x ~@6", B: "~@11 x ~@12", C: "~ x", D: "~@13 x ~@10", E: "~@7 x ~@16", F: "~@7 x ~@4", G: "~@5 x ~@2",
  H: "~@2 x", I: "~@17 x ~@6", J: "~@19 x ~@4", K: "~@5 x", L: "~@7 x", M: "~@11 x", N: "~@23 x", O: "x", P: "~ x ~@22",
  Q: "~ x ~@10", R: "~ x ~@8 x ~", S: "~@5 x ~ x", T: "~ x ~@2 x!2 ~ x", U: "x!2 ~ x!3 ~ x", V: "~ x ~@6",
  W: "~ x ~@5 x", X: "~ x ~ x ~ x ~ x", Y: "~ x ~ x ~@4",
})).gain(0.38)

// drums · snare
const snare = s("sd").struct(`<
  ~@2 A B@2 C@2 D E ~ F G H I J K ~@2 L M N O P@2 Q ~@2 R S@2 E T@2 ~ U G@21 V ~@2 G@5 V ~@2 V@6 ~ U G@20 W@2 G@5 V ~@2
>`.pickRestart({
  A: "~@13 x ~@10", B: "~@7 x ~@4", C: "~@5 x ~@2", D: "~@2 x", E: "~ x ~@4", F: "~@3 x", G: "~ x ~ x",
  H: "~@6 x ~@12 x ~@4", I: "~@7 x ~@11 x ~@4", J: "~@7 x ~@12 x ~@3", K: "~@2 x ~@2 x", L: "~@11 x", M: "~@5 x ~@5 x",
  N: "~@11 x ~@11 x", O: "~@11 x ~@12", P: "x!2", Q: "~ x ~@22", R: "~ x ~@10", S: "~ x ~@6", T: "~@5 x ~@18", U: "~ x",
  V: "~ x ~@2", W: "x!4",
})).gain(0.49)

// drums · hihat
const hihat = s("hh").struct(`<
  A B C D E F G H I ~ J K L M N O P ~ Q R S T U V W ~@10 X Y Z Y Z Y Z AA X AB AC AD X AE X AE X AE X AE X AE ~ AF X AE
  X AE X AE ~@10 X Y Z Y Z Y Z AA Z AA Z AA Z AA Z AA Z AA Z AA AG@7 AH ~@2
>`.pickRestart({
  A: "~@2 x ~ x!4", B: "x ~@5 x ~@2 x ~@3 x ~@2 x ~@2 x ~@2 x ~", C: "~ x ~@5 x ~@5 x ~@2 x ~@2 x ~@2 x ~",
  D: "~ x ~@6 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x", E: "~@2 x ~@5 x ~@5 x ~@2 x ~@2 x ~@2 x",
  F: "~@2 x ~@6 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2", G: "x!2 ~ x ~ x!3", H: "~ x ~@2 x ~@5 x ~@2 x ~@2 x ~@2 x ~@2 x ~",
  I: "~ x ~@2 x ~@19", J: "~@10 x!2 ~@6 x ~@2 x ~@2", K: "x!3 ~ x!4", L: "x ~@2 x ~@2 x ~@5 x ~@6 x ~@2 x ~",
  M: "~ x ~@2 x ~@2 x ~@5 x ~@2 x ~@2 x ~@2 x ~", N: "~ x ~@2 x ~@2 x ~@6 x ~@5 x ~@2 x",
  O: "~@2 x ~@2 x ~@2 x ~@5 x ~@2 x ~@2 x ~@2 x", P: "~@2 x ~@2 x ~@3 x ~@14", Q: "~@8 x ~@2 x",
  R: "~ x ~@2 x ~@2 x ~@2 x ~@5 x ~@2 x ~@2 x ~", S: "~@2 x ~@2 x ~@2 x ~@2 x ~@5 x ~@5 x",
  T: "~@2 x ~@2 x ~@2 x ~@2 x ~@5 x ~@3 x ~@2", U: "x ~@2 x ~@2 x ~@2 x ~@2 x ~@4 x!2 ~@5",
  V: "x ~@2 x ~@2 x ~@2 x ~@2 x ~@6 x ~@2 x ~", W: "~ x ~@2 x ~@2 x ~@2 x ~@2 x ~@10", X: "x ~ x!5 ~", Y: "x!5 ~ x ~",
  Z: "~@2 x!5 ~", AA: "x!2 ~ x!4 ~", AB: "x!2 ~ x!2 ~ x ~", AC: "x!4", AD: "x ~@5 x ~@2 x ~@2 x ~@5 x ~@4 x",
  AE: "x!7 ~", AF: "~@23 x", AG: "~ x ~ x ~ x ~ x", AH: "~ x ~ x!2 ~@3",
})).gain(0.49)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  A ~ B ~ C ~ D ~@3 E ~ F ~ G ~@3 H ~ I ~ J ~@12 K ~ K ~ K ~ K ~ K ~ L M K ~ K ~ K ~ K ~ K ~@2 N K ~ K ~ K ~@11 K ~ K ~
  K ~ K ~ K ~ K ~ K ~ K ~ K ~ K ~@11
>`.pickRestart({
  A: "~@3 x ~@4", B: "~@5 x ~@6", C: "~@11 x ~@12", D: "~ x", E: "~@8 x!2 ~@4 x ~@9", F: "~@2 x", G: "~@17 x ~@6",
  H: "~@19 x ~@4", I: "~@5 x", J: "~@15 x!2 ~@4 x ~@2", K: "~ x ~@6", L: "~ x ~ x ~ x ~ x", M: "~@3 x ~@11 x ~@5 x!2 ~",
  N: "~@21 x!2 ~",
})).gain(0.27)

// drums · low tom
const low_tom = s("lt").struct("<~@33 A B ~@38 A B ~@22 C@6 ~@2>".pickRestart({
  A: "~@5 x!3", B: "x!4 ~@4", C: "~ x",
})).gain(0.44)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@16 A ~@7 B ~@2 C@2 D@2 E F G H ~@21 I ~@7 I ~@2 J@5 I G H ~@22 K@6 ~@2
>`.pickRestart({
  A: "~ x ~", B: "~@13 x ~@10", C: "~@5 x!2 ~", D: "~@16 x ~@2 x ~@4", E: "~@17 x ~@2 x ~@3", F: "~@17 x ~@6",
  G: "~@5 x!3", H: "x!4 ~@4", I: "~@3 x", J: "~@6 x!2", K: "x",
})).gain(0.44)

// drums · open hat
const open_hat = s("oh").struct(`<
  A@2 B@2 C D@2 E ~@3 F@2 G H@2 ~@2 I@2 J@2 ~ K ~@11 L M L M L M L@3 ~@3 L@9 ~@3 L@5 ~@11 L M L M L M L@14 ~@10
>`.pickRestart({
  A: "~ x ~@6", B: "~ x ~@4", C: "~@5 x ~@18", D: "~ x ~@2", E: "~@7 x ~@16", F: "~@3 x ~@4", G: "~@5 x ~@6",
  H: "~@11 x ~@12", I: "~@13 x ~@10", J: "~@7 x ~@4", K: "~@2 x", L: "~@7 x", M: "~@5 x ~ x",
})).gain(0.38)

// drums · high tom
const high_tom = s("ht").struct("<~@16 A ~@7 B ~@7 C ~@23 D ~@7 E ~@7 E ~@32>".pickRestart({
  A: "~@5 x ~@18", B: "~@5 x ~@6", C: "~@7 x ~@4", D: "~@15 x!2 ~@7", E: "~@5 x ~@2",
})).gain(0.38)

// drums · crash
const crash = s("cr").struct(`<
  ~@8 A ~@7 B ~@7 C ~@7 D ~ E ~@2 F ~ F ~ F G ~ H ~@11 I ~@7 I ~@7 I ~ E ~@2 F ~ F ~ F G F G F G F G F G F G F G J@7 K
  ~@2
>`.pickRestart({
  A: "~@7 x ~@16", B: "~ x", C: "~@2 x", D: "~@5 x", E: "~@5 x ~ x", F: "x", G: "~ x ~@2", H: "~@2 x ~@2 x ~ x",
  I: "~@7 x", J: "x!4", K: "x!2 ~@2",
// … 19 more lines

More by The Police