Strudelify

Touch Me

The Doors

KeyA♭ majorTempo110 bpm
0:00/0:00
// Touch Me — The Doors
// 110 bpm, 4/4, key G# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 100 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(110/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 · church organ · "Organ"
const church_organ = note(`<
  A@2 B@2 C D E F G H I J K L M N O@2 P Q R S T Q R U O@2 A@2 B@2 C D E F G H I J K L M N O@2 P Q R S T Q R U O@2 P Q R
  S T Q R U O@2 V@6 W V@9 X Y V@13 Z AA ~
>`.pickRestart({
  A: "ab4 ~ ab4 ~ ab4@2 gb4 ab4 ~ ab4@2 gb4 ab4@2 bb4@2",
  B: "[ab4,b4] ~ [ab4,b4] ~ [ab4,b4]@2 [gb4,bb4] [ab4,b4] ~ [ab4,b4]@2 [gb4,bb4] [ab4,b4]@2 [bb4,db5]@2", // Abm Gb Abm Gb Abm Bbm
  C: "[ab4,b4,eb5] ~ [ab4,b4,eb5] ~ [ab4,eb5]@2 [gb4,bb4,db5] [ab4,b4,eb5] ~ [ab4,b4,eb5]@2 [gb4,bb4,db5] [ab4,b4,eb5]@2 [bb4,db5,e5]@2, ~@4 b4 ~@11", // Abm Ab5 Gb Abm Gb Abm Bbdim
  D: "[ab4,b4,eb5,gb5] ~ [ab4,b4,eb5,gb5] ~ [ab4,b4,eb5,gb5]@2 [gb4,bb4,f5] [ab4,b4,eb5,gb5] ~ [ab4,b4,eb5,gb5]@2 [gb4,bb4,db5,f5] [ab4,b4,eb5,gb5]@2 [bb4,db5,e5,ab5]@2, ~@3 db5 ~@4", // Abm7 Gbmaj7 Abm7 Gbmaj7 Abm7 Bbm7b5
  E: "[ab4,b4,eb5,gb5,bb5] ~ [ab4,b4,eb5,gb5,bb5] ~ [ab4,b4,eb5,gb5,bb5]@2 [gb4,bb4,db5,f5,ab5] [ab4,b4,eb5,gb5,bb5] ~ [ab4,b4,eb5,gb5,bb5]@2 [gb4,bb4,db5,f5,ab5] [ab4,b4,eb5,gb5,bb5]@2 [bb4,db5,e5,ab5,b5]@2", // Abm7 Gbmaj7 Abm7 Gbmaj7 Abm7 Bbm7b5
  F: "[eb5,gb5,bb5] ~@15, [ab4,b4] ~@7", G: "[gb4,bb4,db5]@13 ~ [gb4,bb4,db5]@2", H: "[bb4,db5,f5]@15 ~",
  I: "[b4,eb5,gb5]@15 ~", J: "[d5,gb5,a5]",
  K: "[a4,db5,e5] ~ [a4,db5,e5] ~ [a4,db5,e5]@2 ~ [a4,db5,e5] ~ [a4,db5,e5] ~ [a4,db5,e5] [a4,db5,e5]@3 ~", // A
  L: "[db5,e5,ab5] ~ [db5,e5,ab5] ~ [db5,e5,ab5]@2 ~ [db5,e5,ab5] ~ [db5,e5,ab5] ~ [db5,e5,ab5] [db5,e5,ab5]@3 ~", // Dbm
  M: "[d5,gb5,a5] ~ [d5,gb5,a5] ~ [d5,gb5,a5]@2 ~ [d5,gb5,a5] ~ [d5,gb5,a5] ~ [d5,gb5,a5] [d5,gb5,a5]@3 ~", // D
  N: "[f5,a5,c6]@15 ~, d6 ~@15", // F
  O: "[c5,e5,g5] ~ [c5,e5,g5] ~ [c5,e5,g5]@2 ~ [c5,e5,g5] ~ [c5,e5,g5] ~ [c5,e5,g5] [c5,e5,g5]@3 ~", // C
  P: "[f4,a4,c5]@15 ~", Q: "[e4,g4,b4]@7 ~", R: "[f4,a4,c5]@3 ~ [g4,b4,d5]@3 ~", S: "[c4,e4,g4]@7 ~",
  T: "[f4,a4,c5]@7 ~", U: "[f4,a4,c5]@3 ~", V: "ab1 ~ ab1 ~ ab1@2 gb1 ab1 ~ ab1@2 gb1 ab1@2 bb1@2",
  W: "ab1 ~ ab1 ~ ab1@2 gb1 ab1 ~@3 gb1 ab1@2 bb1@2, ~@5 ab1 ~@2",
  X: "ab1 ~ ab1 ~ ab1@2 ~ ab1 ~ ab1@2 gb1 ab1@2 bb1@2, ~@3 gb1 ~@4",
  Y: "ab1 ~ ab1 ~ ab1@2 gb1 ~ ab1 ~@2 gb1 ab1@2 bb1@2, ~@5 ab1 ~@2",
  Z: "ab1 ~ ab1 ~ ab1@2 gb1 ab1 ~ ab1@2 gb1 ab1@2 bb1 ~", AA: "ab1 ~ ab1@2 gb1@2 ab1@2 ~@8",
})).s("gm_church_organ").gain(0.31)

// bass · electric bass finger · "Bass"
const bass = note(`<
  A@5 B@2 C D E F G H I J K L@2 M N O L P N Q R L@2 A@5 B@2 C D E F G H I J K L@2 M N O L P N Q R L@2 M N O L P N Q R
  L@2 S@18 T U S@5 V S@4 V W X ~
>`.pickRestart({
  A: "[ab1,ab2] ~ [ab1,ab2] ~ [ab1,ab2]@2 [gb1,gb2] [ab1,ab2] ~ [ab1,ab2]@2 [gb1,gb2] [ab1,ab2]@2 [bb1,bb2]@2", // Ab Gb Ab Gb Ab Bb
  B: "[ab1,ab2] ~ [ab1,ab2] ~ [ab1,ab2]@2 [gb1,gb2] [ab1,ab2] ~ [ab1,ab2]@2 [gb1,gb2] [ab1,ab2]@2 bb1@2, ~@14 bb2 ~", // Ab Gb Ab Gb Ab
  C: "[ab1,ab2]@3 ~@13", D: "gb1@2 ~ gb1 gb2@2 gb1@3 ~ gb1@2 gb2@2 gb1@2",
  E: "bb1@2 ~ bb1 bb2@2 bb1@2 ~@2 bb1@2 bb2@2 bb1@2", F: "b1@2 ~ b1 eb1@4 e1@4 f1@2 ~@2",
  G: "d1@2 ~ d2 g1@4 ab1@4 a1@2 ~@2", H: "a1 ~ a1 ~ a1 ~@2 a1 ~ a1 ~ a1 a1@2 ~@2",
  I: "db2 ~ db2 ~ db2@2 ~ db2 ~ db2 ~ db2 db2@2 ~@2", J: "d2 ~ d2 ~ d2@2 ~ d2 ~ d2 ~ d2 d2@2 ~ d2",
  K: "f2@3 ~ a1@4 bb1@4 b1@2 ~@2", L: "c2 ~ c2 ~ c2@2 ~ c2 ~ c2 ~ c2 c2@2 ~@2", M: "f2@3 f2 c2@2 f2@4 c2@2 f2@2 c2@2",
  N: "e2@2 ~ e2 b1@2 e2@4 b1@2 e2@2 b1@2", O: "f2@4 c2@2 f2 c2 g2@4 d2@2 g2@2", P: "f2@2 ~ f2 c2@2 f2@4 c2@2 f2@2 c2 ~",
  Q: "f2@4 c2@2 f2 ~ g2@4 d2@2 g2@2", R: "f2@2 ~ f2 e2@2 ~ e2 d2@2 ~ d2 g1@2 a1 ~",
  S: "ab1 ~ ab1 ~ ab1@2 gb1 ab1 ~ ab1@2 gb1 ab1@2 bb1@2", T: "ab1 ~ ab1 ~ ab1@2 gb1 ab1 ~ ab1@2 gb1 ab1@2 bb1 ~",
  U: "[ab1,a1] ~ ab1 ~ ab1@2 gb1 ab1 ~ ab1@2 gb1 ab1@2 bb1@2", V: "ab1 ~ ab1 ~ ab1@2 gb1 ab1 ~ ab1@2 gb1 ab1 ~ bb1 ~",
  W: "ab1 ~ ab1 ~ ab1@2 gb1 ab1 ~ ab1@2 gb1 ab1 ~ [bb1,b1] ~", X: "ab1 ~ ab1 ~ ab1@2 gb1 ab1@2 ~@7",
})).s("gm_electric_bass_finger").gain(0.56)

// other · string ensemble 2 · "Strings"
const string_ensemble_2 = note("<~@19 A B ~@2 A C D E@2 ~@19 A F ~@2 A C G H@2 ~ A B ~@2 A C G H@2 ~@34>".pickRestart({
  A: "~ g5 e5 d5", B: "c5 ~", C: "c5 d5", D: "f5@7 ~", E: "[g5@15 ~]/2", F: "c5@11 ~@5", G: "f5", H: "[g5@31 ~]/2",
})).s("gm_string_ensemble_2").gain(0.3)

// chords · alto sax · "Sax Solo"
const alto_sax = note("<~@67 A B C D E F G F H I J K L M N O P Q R Q S T U V W X Y Z AA AB AC AD AE>".pickRestart({
  A: "~@15 gb4", B: "bb4@14 gb4 bb4, ab4 ~@15", C: "gb4@3 eb4 ~@10 gb4 ab4", D: "bb4@14 gb4 bb4",
  E: "gb4@3 eb4@2 ~@9 eb4 gb4", F: "ab4!2 gb4 ab4 ~@2 ab4!2 gb4 ab4 ~@2 ab4!2 gb4 ~", G: "bb4@3 gb4@2 ~@9 eb4 gb4",
  H: "bb4@3 eb4 ~@12",
  I: "~ [gb4,gb5] [eb4,eb5] [ab4,ab5] [gb4,gb5] [eb4,eb5] ab4 [gb4,gb5] [eb4,eb5] ab4 [gb4,gb5] [eb4,eb5] ~ [gb4,gb5] eb5 ab5, [ab4,ab5]@2 ~@4 ab5@2 ~ ab5@2 ~ [ab4,ab5]@2 eb4@2", // Gb Eb Ab Gb Eb Gb Eb Gb …
  J: "[ab4,gb5] [gb4,eb5] ~ [ab4,gb5] [gb4,eb5] [eb4,ab5] [ab4,gb5] [gb4,eb5] [eb4,ab5] [ab4,gb5] [gb4,eb5] eb4 [ab4,gb5] [gb4,eb5] eb4 gb5, ~@2 [eb4,ab5]@2 ~@7 ab5@2 ~ ab5@2", // Ab7 Ebm Ab7 Ebm Ab5 Ab7 Ebm Ab5 …
  K: "[ab4,eb5] [gb4,ab5] [eb4,gb5] eb5 [gb4,ab5] [eb4,gb5] [ab4,eb5] ab5 gb5 [ab4,eb5] [gb4,ab5] [eb4,gb5] [ab4,eb5] [gb4,ab5] eb4 eb5, ~@3 ab4@2 ~@2 gb4@2 ~@5 gb5@2, ~@4 eb4 ~@3", // Ab5 Gbsus2 Ebm Gbsus2 Ebm Ab5 Gbsus2 Ebm …
  L: "ab4 gb4 eb4 ab4 gb4 eb4 ab4 gb4 eb4 ~ gb4 ~ ab4 eb5 [eb4,gb5] [ab4,eb5], bb5@3 ~ eb5@2 ~@3 ab4@2 eb4@2 gb4@2 ~", // Ebm Ab5
  M: "ab5 gb5 eb5 ~ gb5 eb5 ~ gb5 eb5 ~ gb5 eb5 ~ gb5 [eb4,eb5] [gb4,ab5], bb4@3 ab5@2 ~ ab5@2 ~ ab5@2 ~ ab5@2 ~@2, ~@4 gb4@3 ~@9", // Eb Gbsus2
  N: "[ab4,gb5] [gb4,eb5] eb4 gb5 [gb4,eb5] eb4 gb5 [gb4,eb5] [eb4,ab5] [ab4,gb5] [gb4,eb5] eb4 [ab4,gb5] [gb4,eb5] ab5 gb5, ~@2 ab5@2 ~ ab5@2 ~@4 ab5@2 ~@3, ~@3 ab4@2 ~ ab4@2 ~@6 eb4@2", // Ab7 Ebm Ab5 Ab7 Ebm Ab7 Ebm
  O: "[ab4,eb5] gb4 [eb4,gb5] [ab4,eb5] gb4 [eb4,gb5] [ab4,eb5] gb4 [eb4,gb5] [ab4,eb5] [gb4,ab5] [eb4,gb5] [ab4,eb5] [gb4,ab5] gb5 eb5, ~ ab5@2 ~ ab5@2 ~ ab5@2 ~@5 eb4@2", // Ab5 Ebm Ab5 Ebm Ab5 Ebm Ab5 Gbsus2 …
  P: "ab4 gb4 eb4 ab4 gb4 eb4 ab4 gb4 eb4 ab4 gb4 eb4 gb4 eb4 [gb4,eb5] [eb4,gb5], bb5@3 eb5@4 ~@9", // Ebm
  Q: "ab5!2 gb5 ab5 ~@2 ab5!2 gb5 ab5 ~@2 ab5!2 gb5 [gb4,gb5], bb4@3 eb4@10 ~ eb4@2", // Gb
  R: "ab4!2 gb4 ~ eb5 ~ ab4!2 gb4 ab4 ~@2 ab4!2 [gb4,eb5] [gb4,gb5], bb5@3 ab4@2 ~@11", // Ebm Gb
  S: "[ab4,bb5] ab4 gb4 ab4@2 ~ ab4!2 gb4 ab4!2 ~ ab4!2 gb4!2, ~ bb5@2 eb5 ~@12", // Absus2
  T: "[bb4,ab5] gb5 eb5 ~ gb5 eb5 ~ gb5 eb5 ~ gb5 eb5 ab5 gb5 eb5@2, ~ bb4@2 eb4@11 ~@2, ~@3 ab5@2 ~ ab5@2 ~ ab5@2 ~@5", // Bb7
  U: "[db5,ab5] bb4 [ab4,eb5] db5 [bb4,gb5] [ab4,eb5] db5 [bb4,gb5] [ab4,eb5] [db5,ab5] [bb4,gb5] [ab4,eb5] [db5,ab5] [bb4,gb5] [ab4,eb5] db5, ~ gb5@2 ab5@2 ~ ab5@2 ~@8", // Db5 Ab5 Ebm Ab5 Ebm Ab5 Db5 Ebm …
  V: "[bb4,ab5] [ab4,gb5] db5 [bb4,eb5,ab5] [ab4,gb5] [db5,eb5] [bb4,ab5] [ab4,gb5] [db5,eb5] [bb4,ab5] [ab4,gb5] [db5,eb5] [bb4,ab5] [ab4,gb5] [db5,eb5] bb4", // Bb7 Ab7 Ebsus4 Ab7 Dbsus2 Bb7 Ab7 Dbsus2 …
  W: "[eb5,ab5] [db5,gb5] [bb4,eb5] ab5 [db5,gb5] [bb4,eb5] [eb5,ab5] [db5,gb5] [bb4,eb5] [eb5,ab5] [db5,gb5] [bb4,eb5] [eb5,ab5] [db5,gb5] [bb4,eb5] ~, ~@3 eb5@2 ~@11", // Ab5 Gb5 Eb5 Gb5 Eb5 Ab5 Gb5 Eb5 …
  X: "[gb5,ab5] [eb5,gb5] [c5,db5,eb5] [gb5,ab5] [eb5,gb5] [db5,eb5] [gb5,ab5] [eb5,gb5] [db5,eb5] [gb5,ab5] [eb5,gb5] [db5,eb5] [gb5,ab5] [eb5,gb5] [db5,eb5] ~", // Gbsus2 Ebm Cm Gbsus2 Ebm Dbsus2 Gbsus2 Ebm …
  Y: "db6 [gb5,ab5,bb5] [eb5,ab5] ab5 [gb5,bb5] eb5 ab5 [gb5,bb5] [eb5,ab5] ab5 [gb5,bb5] [eb5,ab5] db6 [gb5,bb5] [eb5,ab5] ~, ~@3 db6@2 ~ db6@2 ~ db6@2 ~ ab5@2 ~@2", // Gb Ab5 Gb Ab5 Gb Ab5 Gb Ab5
  Z: "eb6 [gb5,db6] [eb5,bb5] ab5 gb5 [eb5,db6] [ab5,bb5,eb6] [gb5,db6] eb5 [ab5,bb5,eb6] [gb5,db6] [eb5,bb5] [ab5,eb6] [gb5,db6] [eb5,bb5] eb6, ab5@2 ~ eb6@2 ~@11", // Gb5 Eb5 Eb7 Absus2 Gb5 Absus2 Gb5 Eb5 …
  AA: "[ab5,db6] [gb5,bb5] [eb5,eb6] [ab5,db6] [gb5,bb5] eb5 ab5 [gb5,bb5] [eb5,eb6] db6 [gb5,bb5] [eb5,eb6] [ab5,db6] gb5 eb5 eb6, ~@5 eb6@2 ~@9, ~@6 db6@2 ~ ab5@2 ~@2 bb5@2 ~", // Db5 Gb Eb Db5 Gb Eb Gb Eb …
  AB: "[ab5,gb6] [gb5,eb6] [eb5,db6] gb6 gb5 [eb5,db6] gb6 [gb5,eb6] [eb5,db6] ~ [gb5,eb6] [eb5,db6] [ab5,gb6] [gb5,eb6] [eb5,db6] ~, ~@3 ab5@2 ~ ab5@2 ~ [ab5,gb6]@2 ~@5, ~@2 eb6 ~@5", // Ab7 Ebm Eb7 Ebm Eb7 Ebm Eb7 Ab7 …
  AC: "[gb5,ab6] gb6 eb6 ab6 gb6@2 eb6 [gb6,ab6] ~ [eb6,ab6] gb6 eb6 ~ gb6 eb6@2, ~@2 gb5@5 ~, ~@6 ab6 ~", // Gbsus2 Ab5
  AD: "ab5 ~ ab5@2 gb6@2 [ab5,ab6]@2 [eb6,gb6] [bb5,db6] [eb5,gb5,ab5,bb5] [ab4,bb4,db5] [bb3,db4,eb4,gb4] [eb3,gb3,ab3,bb3] [bb2,db3] [eb2,gb2,ab2,bb2], ab6@4 gb5 ~@11", // Ab Ebm Bbm Ebm Bbm7 Ebm7 Ebm Bbm …
  AE: "[bb1,db2] ab1 ~@14", // Bbm
})).s("gm_alto_sax").gain(0.48)

// drums · kick
const kick = s("bd").struct(`<
  A@7 B C@2 D@2 E F A G F A H@2 I A J K L M A@9 B C@2 N O F@2 A P F A H@2 I M Q K I R F A S H I T H U I V A@2 M@32 W ~
>`.pickRestart({
  A: "x ~ x ~ x ~ x!2 ~ x ~ x!2 ~ x ~", B: "x", C: "x ~@2 x ~@2 x ~@3 x ~@3 x ~", D: "x ~@2 x ~@2 x ~ x ~ x ~ x ~@3",
  E: "x ~@3 x ~ x!2 ~ x ~ x!2 ~ x ~", F: "x ~ x ~ x ~ x!2 ~ x ~ x!2 ~ x!2", G: "x ~ x!3 ~ x ~ x ~ x ~ x ~ x ~",
  H: "x ~@2 x!2 ~ x ~@3 x ~@3 x ~", I: "x ~@2 x!2 ~ x ~ x ~@2 x!2 ~ x ~", J: "x!4 ~ x!3",
  K: "x ~@2 x!2 ~ x ~@3 x ~ x ~ x ~", L: "x ~ x!3 ~ x!2", M: "x!8", N: "x ~@2 x ~@2 x ~ x ~ x ~@3 x ~",
  O: "x ~@2 x!2 ~ x ~ x ~ x ~ x ~ x ~", P: "x ~ x!3 ~ x!3 ~ x!3 ~ x ~", Q: "x!4 ~ x ~ x",
  R: "x ~ x!3 ~ x!3 ~ x!2 ~@2 x ~", S: "x!2 ~ x ~ x ~ x", T: "x ~@3 x ~@4 x ~@2 x ~@3",
  U: "x ~ x!2 ~@2 x ~@3 x ~@3 x ~", V: "x ~@2 x!2 ~ x!3 ~ x!3 ~ x ~", W: "x!4 ~@4",
})).gain(0.36)

// drums · rim
const rim = s("rim").struct("<~@87 x ~@12>").gain(0.26)

// drums · snare
const snare = s("sd").struct(`<
  A B A C@2 D C E ~@30 F ~@27 G H I J K L M N O P Q ~ R ~ S T U T V ~@2 W ~ X Y Z AA AB AC ~@5
>`.pickRestart({
  A: "x!15 ~", B: "x!3 ~ x!3 ~ x!8", C: "x!16", D: "x!3 ~ x!12", E: "x", F: "~@3 x ~@12",
  G: "~@2 x!2 ~ x!2 ~@3 x ~@2 x!2 ~", H: "~@2 x ~@3 x!2 ~@2 x ~@3 x!2", I: "~@2 x!2 ~ x!3 ~@2 x ~@3 x!2",
  J: "~@2 x ~ x ~ x!2 ~ x!7", K: "~@2 x ~ x ~ x!2 ~@2 x!5 ~", L: "~@2 x ~@3 x!9 ~", M: "x ~ x ~ x!4 ~ x!7",
  N: "~@2 x ~ x ~ x!2 ~ x!5 ~@2", O: "x ~ x ~@2 x!3 ~@2 x!5 ~", P: "~@2 x!6 ~ x!6 ~", Q: "x ~ x ~ x!4 ~ x!6 ~",
  R: "~@2 x ~@2 x!2 ~ x ~@7", S: "~@2 x ~@2 x ~@2 x!4 ~ x!3", T: "~@7 x", U: "x ~ x!6 ~ x!5 ~@2", V: "x ~ x!6 ~ x!7",
  W: "x ~ x ~ x ~ x!2 ~ x ~ x!4 ~", X: "~@14 x!2", Y: "x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~@2", Z: "~ x ~@12 x!2",
  AA: "x!2 ~@6 x!2 ~@6", AB: "x!2 ~ x ~@12", AC: "x!3 ~@13",
})).gain(0.36)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<A B A ~@2 C ~@62 D E F G ~@4 H ~@3 I ~@10 J ~@8>".pickRestart({
  A: "~@15 x", B: "~@3 x ~@3 x ~@8", C: "~@3 x ~@12", D: "~@9 x ~@3 x ~@2", E: "x!2 ~@14", F: "x ~@8 x ~@6",
  G: "x ~@3 x!2 ~@10", H: "~ x", I: "~@3 x ~@4", J: "x",
})).gain(0.2)

// drums · clap
const clap = s("cp").struct("<~@90 [~ x ~@14] ~@9>").gain(0.31)

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

// drums · hihat
const hihat = s("hh").struct(`<
  A B A@5 C D E F G H F@2 I F@2 J F@2 K F G F@3 G A@7 C L M F@3 A@2 F@3 N@2 F O N@2 F@4 N@2 F@6 P A Q R@16 S T R@11 U V
  W ~
>`.pickRestart({
  A: "x!8", B: "~ x!7", C: "x", D: "~@2 x!6", E: "x ~ x ~ x!4", F: "x!4", G: "x ~ x ~ x ~ x!2", H: "x!3 ~ x ~ x ~",
  I: "x ~ x ~ x ~@2 x", J: "x ~@2 x ~@2 x ~", K: "x ~ x ~@3 x!2", L: "x ~ x!2 ~ x ~ x", M: "~ x ~@4 x ~",
  N: "x ~@2 x ~@4", O: "x ~ x!2", P: "x!3 ~ x!3 ~", Q: "~@5 x ~ x ~ x ~ x ~ x ~ x",
  R: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x", S: "x!4 ~ x ~ x ~ x ~ x ~ x ~ x", T: "~ x ~@4 x!2 ~ x ~ x ~ x ~ x",
  U: "~ x ~ x ~ x ~ x ~ x ~ x ~@2 x!2", V: "~ x ~ x ~ x ~ x ~ x ~ x ~@2 x ~", W: "x!4 ~@4",
})).gain(0.36)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@77 A ~ B ~ C ~ D ~ E ~@2 F ~@4 G H I J K L ~>".pickRestart({
  A: "~@5 x ~ x ~ x ~@2 x ~@3", B: "~@5 x ~@8 x ~", C: "~@4 x!2 ~ x ~@3 x ~@4", D: "~@4 x ~ x ~@2 x ~ x ~ x ~@2",
  E: "~@8 x!4 ~@4", F: "~@6 x!2 ~@2 x ~@5", G: "~@9 x!2 ~ x ~@3", H: "~@7 x!3 ~@6", I: "~ x ~@4 x ~@3 x ~@3 x ~",
  J: "~@7 x ~@3 x ~@3 x", K: "~@3 x ~@3 x ~@6 x!2", L: "~ x ~@6",
})).gain(0.41)

// drums · mid tom · soft notes
const mid_tom_soft = s("mt").struct("<~@81 A ~ B ~@4 C ~@5 D E ~ C ~@2>".pickRestart({
  A: "~@3 x ~@4", B: "~ x ~@2", C: "~ x", D: "~@10 x!2 ~@4", E: "~@15 x",
})).gain(0.26)

// drums · open hat
const open_hat = s("oh").struct("<~@15 A ~@50 B C@16 D E C@12 F G ~>".pickRestart({
  A: "~@3 x", B: "x!4 ~ x!3", C: "x!8", D: "x ~ x ~ x!3 ~ x ~ x ~ x ~ x ~", E: "x ~ x ~ x ~@2 x!2 ~ x ~ x ~ x ~",
  F: "x!7 ~", G: "x!4 ~@4",
})).gain(0.36)

// drums · high tom
const high_tom = s("ht").struct("<~@77 A ~@3 B ~@3 C ~@2 D E ~@3 F G H I J ~@2>".pickRestart({
  A: "~@2 x!3 ~@11", B: "~@6 x!2 ~ x ~@6", C: "~@2 x ~ x!2 ~@10", D: "~@14 x!2", E: "x!2 ~ x ~@12", F: "~@3 x",
  G: "~@6 x!2", H: "x ~ x!2 ~ x ~ x!3 ~ x!3 ~ x", I: "~@2 x ~ x ~ x ~ x!3 ~ x!3 ~", J: "x!3 ~ x!3 ~ x!2 ~@6",
})).gain(0.41)

// drums · crash
const crash = s("cr").struct(`<
  ~ A@7 B@2 A ~ A@3 C A ~ B@2 D A B@2 D A E F ~@2 A@6 B A@7 G ~ B@2 D A B@2 D A@3 ~@34 H ~@5 I ~@3
>`.pickRestart({
  A: "x", B: "x ~@2 x ~@4", C: "x!2 ~@2", D: "x!2", E: "x ~@6 x ~ x ~@6", F: "x ~@6 x ~@8", G: "x!2 ~@6", H: "~ x ~@6",
  I: "~@5 x ~@2",
})).gain(0.41)

// drums · crash · soft notes
const crash_soft = s("cr").struct(`<
  ~@14 A@2 ~@4 B ~@6 C ~@8 B ~@6 B ~@3 D ~@14 E ~@10 F ~@16 F ~ F ~@4 A ~@2
>`.pickRestart({
  A: "~ x ~@6", B: "~ x ~@2", C: "~@3 x", D: "~@7 x", E: "x", F: "~@3 x ~@4",
})).gain(0.26)

// drums · ride
const ride = s("rd").struct(`<
  ~ A@7 B@2 C D E F@2 G H I J K L M K N O P H F@3 H Q H F@2 A R S T U H V I W H I X Y Z AA K AB AC S H F AD K AE AF Y@2
  O AG H AH AI ~@33
>`.pickRestart({
  A: "x", B: "x ~@2 x ~@4", C: "x ~ x ~ x!4", D: "x ~ x!3 ~ x!3 ~ x!3 ~ x ~", E: "x ~ x ~ x ~@2 x ~ x ~ x!2 ~ x ~",
  F: "x ~ x ~ x ~ x!2 ~ x ~ x!2 ~ x ~", G: "x ~@3 x!4", H: "x ~ x ~ x ~ x!2 ~ x ~ x!2 ~ x!2",
// … 33 more lines

More by The Doors