Strudelify
Come To My Window cover art

1993 · Yes I Am

Come To My Window

Melissa Etheridge

KeyG majorTempo96 bpm
0:00/0:00
// Come To My Window — Melissa Etheridge
// 96 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 95 bars on a 16-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): GUITAR 1, GUITAR 2.
setcpm(96/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 · acoustic guitar steel · "ACOUSTIC GUITAR"
const acoustic_guitar_steel = note(`<
  ~@2 A B A B A B A C D E F G H I J K L M L N O P O P O P O P D Q D Q D Q J R L S L N O P O P O P O T U V W X Y Z AA@2
  AB AC AB AD AE AF AE AG O P O P O P O AH AI P AJ P AJ P O P O P O P O P O P AK@4 ~
>`.pickRestart({
  A: "[c3,e3,g3,c4,g4]@2 [c3,e3,g3,c4,g4]!2 [c3,e3,g3,c4,g4]@2 [c3,e3,c4,g4] [g2,b2,d3,g3,d4]!4 [b2,d3,g3,d4,g4]@2 [g2,b2,d3,g3,d4]!3", // C G
  B: "[a2,d3,a3,d4,f#4]@2 [a2,d3,a3,d4,f#4]!2 [a2,d3,a3,d4,f#4]@2 [a2,d3,a3,d4,e4] [a2,d3,a3,d4,e4]@2 [a2,d3,a3,d4,e4]!4 [a2,d3,a3,d4,f#4] [a2,d3,a3,d4,e4]@2", // D Asus4 D Asus4
  C: "[a2,d3,a3,d4,f#4]@2 [a2,d3,a3,d4,f#4]!11 [a2,d3,a3,d4,e4]!3", // D Asus4
  D: "[c3,e3,g3,c4,g4]@2 [c3,e3,c4,g4] [c3,e3,g3,c4,g4]!3 [c3,e3,c4,g4] [g2,b2,d3,g3,d4]!4 [b2,d3,g3,d4,g4]@2 [g2,b2,d3,g3,d4]!3", // C G
  E: "[d3,a3,d4]@3 [a3,d4,f#4] [a3,d4,f#4]@2 d4 [d3,a3,d4] [a3,d4] ~ e4 f#4 g4 f#4 e4 d4, ~@9 [a3,d4]@7", // D5 D D5
  F: "g4!3 [c3,e3,g3,c4,g4]!2 ~ c4 ~ d4 [g2,b2,d3,g3,d4]!3 [b2,d3,g3,d4,g4]!2 [g2,b2,d3,g3,d4]@2, [c3,e3,g3,c4]@3 ~@2 [c3,e3,c4,g4]@2 [g2,d3,g3,b3,d4]@2 ~@7", // C G C G
  G: "[d3,a3,d4]@3 [a3,d4,f#4] [a3,d4,f#4]@3 [d3,a3,e4] [d3,a3,e4]@2 [d3,a3,e4] [a3,d4,e4]!2 [a3,d4,f#4] [a3,d4,e4]@2", // D5 D Dsus2 Asus4 D Asus4
  H: "[c3,e3,g3,c4,g4]@2 g4 [c3,e3,g3,c4] [c3,e3,g3,c4]@2 ~ [g2,d3,g3,b3]@2 [g2,b2,d3,g3,d4]!2 [g2,b2,d3,g3,d4,g4] [b2,d3,g3,d4,g4]!2 [g2,b2,d3,g3,d4]@2, ~@3 g4@3 d4@3 ~@7", // C G
  I: "[d3,a3,d4]@3 [a3,d4,f#4]@3 [a3,d4] [d3,a3,d4]!4 [a3,d4,g4]@2 [a3,d4,f#4]@3", // D5 D D5 Dsus4 D
  J: "[c3,e3,g3,c4,g4]@2 [c3,e3,g3,c4,g4]!2 [c3,e3,g3,c4,g4]@2 [c3,e3,c4,g4] [g2,b2,d3,g3,d4] [g2,b2,d3,g3,d4,g4]!4 [b2,d3,g3,d4,g4]!4", // C G
  K: "[a2,d3,a3,d4,f#4]@2 [a2,d3,a3,d4,f#4]!9 [a2,d3,a3,d4,e4] [a2,d3,a3,d4,f#4]!4", // D Asus4 D
  L: "[e2,b2,e3,g3,b3,e4]@2 [e2,b2,e3,g3,b3,e4]@2 [e2,b2,e3,g3,b3,e4]@2 [e2,b2,e3,g3,b3,e4] [c3,e3,g3,c4,g4]!4 [c3,e3,g3,c4,g4]@2 [c3,e3,g3,c4,g4]!3", // Em C
  M: "[a2,d3,a3,d4,f#4]@2 [a2,d3,a3,d4,f#4]@2 [a2,d3,a3,d4,f#4]@2 [a2,d3,a3,d4,f#4]!3 [a2,d3,a3,d4,g4]!2 [a2,d3,a3,d4,g4]@2 [a2,d3,a3,d4,f#4]!3", // D Dsus4 D
  N: "[a2,d3,a3,d4,f#4]@2 [a2,d3,a3,d4,f#4]@2 [a2,d3,a3,d4,f#4]@2 [a2,d3,a3,d4,f#4]!10", // D
  O: "[g2,d3,g3,b3,d4,g4]!7 [c3,e3,g3,c4,d4,g4]!4 [c3,e3,g3,c4,d4,g4]@2 [c3,e3,g3,c4,d4,g4]!3", // G C
  P: "[a2,d3,a3,d4,g4]!10 [a2,d3,a3,d4,f#4] [a2,d3,a3,d4,e4]@2 [a2,d3,a3,d4,f#4]@3", // Dsus4 D Asus4 D
  Q: "[d3,a3,d4]@3 [d3,a3,d4] [d3,a3,d4]@3 [d3,a3,d4,g4]@2 [a3,d4,g4] [a3,d4,f#4] [d3,a3,e4]@2 [d3,a3,d4]!3", // D5 Dsus4 D Dsus2 D5
  R: "[a2,d3,a3,d4,f#4]@2 [a2,d3,a3,d4,f#4]!9 [d3,a3,d4,g4]@2 [a2,d3,a3,d4,f#4]!3", // D Dsus4 D
  S: "[d3,a3,d4,f#4]@2 [d3,a3,d4,f#4]!2 [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4] [d3,a3,d4,g4]@2 [d3,a3,d4,f#4]!2 [d3,a3,d4,e4]@2 [d3,a3,d4,f#4]@3", // D Dsus4 D Dsus2 D
  T: "[a2,d3,a3,d4,g4]!7 [a2,d3,a3,d4,f#4]!9", // Dsus4 D
  U: "[e2,b2,e3,g3,b3,e4]@2 [e2,b2,e3,g3,b3,e4]!2 [e2,b2,e3,g3,b3,e4]@2 [e2,b2,e3,g3,b3,e4]!4 [e2,b2,e3,g3,b3,e4]@2 [e2,b2,e3,g3,b3,e4]@2 [e2,b2,e3,g3,b3,e4]!2", // Em
  V: "[e2,b2,e3,g3,b3,e4]@2 [e2,b2,e3,g3,b3,e4]!2 [e2,b2,e3,g3,b3,e4]@2 [e2,b2,e3,g3,b3,e4]!4 [e2,b2,e3,g3,b3,e4]@2 [d3,a3,d4,f#4]!2 [d3,a3,d4,f#4]@2", // Em D
  W: "[c3,e3,g3,c4,g4]@2 [c3,e3,g3,c4,g4]!2 [c3,e3,g3,c4,g4]@2 [c3,e3,g3,c4,g4]!4 [c3,e3,g3,c4,g4]@2 [c3,e3,g3,c4,g4]@2 [c3,e3,g3,c4,g4]!2", // C
  X: "[c3,e3,g3,c4,g4]@2 [c3,e3,g3,c4,g4]!2 [c3,e3,g3,c4,g4]@2 [c3,e3,g3,c4,g4]!6 [b2,f#3,b3,d4,f#4]!4", // C Bm
  Y: "[a2,e3,a3,c4,e4]@2 [a2,a3,c4,e4] [a2,e3,a3,c4,e4] [a2,e3,a3,c4,e4]@2 [a2,a3,c4,e4] [a2,e3,a3,c4,e4] [a2,a3,c4,e4] [a2,e3,a3,c4,e4] [a2,a3,c4,e4]@2 [a2,e3,a3,c4,e4]@2 [a2,a3,c4,e4] [a2,e3,a3,c4,e4]", // Am
  Z: "[a2,e3,a3,c4,e4]@2 [a2,a3,c4,e4] [a2,e3,a3,c4,e4] [a2,e3,a3,c4,e4]@2 [a2,a3,c4,e4] [a2,e3,a3,c4,e4] [a2,a3,c4,e4] [a2,e3,a3,c4,e4] [a2,a3,c4,e4] [a2,e3,a3,c4,e4] [a2,a3,c4,e4] [a2,e3,a3,c4,e4] [a2,a3,c4,e4] [a2,e3,a3,c4,e4]", // Am
  AA: "[a2,d3,a3,d4,g4]!9 [a2,d3,a3,d4,f#4]!7", // Dsus4 D
  AB: "g3@2 d4 [g3,d4,g4]@2 [g3,d4]!3 [g3,c4]!2 d4 [d4,g4]@2 [g3,d4]!3, [g2,d3]@7 ~@9", // G5 C5 G5
  AC: "~@6 a3@2 [d4,g4] [d4,f#4] ~ [d4,e4] ~ [d4,f#4] ~ [d3,g3], d3 ~, ~ a3@4 ~@11, ~@2 d4@2 ~ d4@3 ~@8, ~@3 g4@4 ~@9", // G5 D Dsus2 D G5
  AD: "~@5 d4 ~ d4 [d3,a3,d4]!3 [a3,d4,g4]!5, d3 ~, ~ a3@4 ~ a3@2 ~@8, ~ d4 ~@6, ~@3 g4@4 ~@9", // D5 Dsus4
  AE: "[c3,e3,g3,c4,g4]!8 [g2,b2,d3,g3,b3]!8", // C G
  AF: "[a2,d3,a3,d4,f#4]!8 [a2,d3,a3,d4,g4]!2 [a2,d3,a3,d4,f#4] [a2,d3,a3,d4,e4]@2 [a2,d3,a3,d4,f#4]!3", // D Dsus4 D Asus4 D
  AG: "[a2,d3,a3,d4,f#4]!16", AH: "[a2,d3,a3,d4,g4]!10 [a3,d4,f#4] [a3,d4,e4]@2 [a2,d3,a3]@3",
  AI: "[g3,b3,d4,g4]!2 [g2,d3,g3,b3,d4,g4]!2 [g3,b3,d4,g4] [g2,d3,g3,b3,d4,g4]!2 [c3,e3,g3,c4,d4,g4]!4 [c3,e3,g3,c4,d4,g4]@2 [c3,e3,g3,c4,d4,g4]!3", // G C
  AJ: "[g2,d3,g3,b3,d4,g4]!4 [g3,b3,d4,g4] [g2,d3,g3,b3,d4,g4]!2 [c3,e3,g3,c4,d4,g4]!4 [c3,e3,g3,c4,d4,g4]@2 [c3,e3,g3,c4,d4,g4]!3", // G C
  AK: "[[g2,d3,g3,b3,d4,g4]!8 [g2,d3,g3,b3,d4,g4]@48 ~@8]/4", // G
})).s("gm_acoustic_guitar_steel").gain(0.26)

// chords · overdriven guitar · "GUITAR 1"
const overdriven_guitar = note(`<
  ~@7 A ~@14 B C B C B C B ~@6 A ~@6 B C B C B C B D ~@5 E F ~@4 G ~@4 B C B C B C B H B C B C B C B ~ B C B C B C B ~@6
>`.pickRestart({
  A: "c4", B: "~@12 [d4,g4] ~@3", C: "~@15 [d4,g4]", D: "~@7 g4 ~@7 [e2,b2,e3]", E: "~ g3 ~ g3", F: "~@7 g4", G: "g4",
  H: "~@13 f#4@3",
})).s("gm_overdriven_guitar").gain(0.26)

// chords · electric guitar clean · "GUITAR 2"
const electric_guitar_clean = note(`<
  ~@22 A ~ A ~ A ~ A ~@13 A ~ A ~ A ~ A B ~@16 A ~ A ~ A ~ A C A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@6
>`.pickRestart({
  A: "~@12 g4@3 ~", B: "~@7 g3@6 ~@3", C: "~@13 f#4@3",
})).s("gm_electric_guitar_clean").gain(0.54)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note(`<
  ~@2 A@8 B@8 C D E F G H G I G H G J K@4 L@4 C D E F M@2 N@2 O@2 P Q R@2 S@2 T@2 U@2 V W V D X@4 Y@6 Z@2 Y@6 Z@2 Y@6
  Z@2 AA@5
>`.pickRestart({
  A: "[c4@7 ~@9 f#4@16, g4 ~, ~@7 d4@25]/2",
  B: "[c4@7 b3@9 a3@16 c4@7 b3@9 a3@16 c4@7 b3@9 a3@16 c4@7 b3@9 a3@16, d4]/8", C: "e4", D: "d4", E: "e4@7 g4@9",
  F: "a4", G: "[g3,d4,g4,b4]@7 [g3,d4,g4,c5]@9", H: "[g3,d4,g4]@7 [a3,d4,f#4]@9", I: "[g3,d4,g4]@7 [d4,f#4,a4]@9",
  J: "~@4 c5@2 b4 [a3,d4,f#4,a4]@9, [g3,d4,g4]@7 ~@9", K: "[c4@7 g3@9 a3@16 c4@8 ~@8 a3@16, d4]/4",
  L: "[c4@7 b3@9 a3@16 c4@7 g4@9 [a3,f#4]@16, d4]/4", M: "[b4@7 c5@9 ~@7 [a3,f#4]@9, d4, [g3,g4]@3 ~, ~ a4]/2",
  N: "[b4@7 c5@9 ~@5 c5 b4 [a3,f#4,a4]@9, d4, [g3,g4]@3 ~]/2", // D G
  O: "[~@4 b4@3 c5@14 ~ b4 [a3,f#4,a4]@9, d4, [g3,g4]@3 ~]/2", P: "~@4 b4@3 c5@9, [g3,d4,g4]",
  Q: "c4@4 b3@3 [a3,f#4]@9, d4, g4 ~", R: "[~@6 e3 d3, b3]/2", S: "[c3,g3,c4]/2", T: "[a3,c4,e4,c5]/2",
  U: "[g4 f#4 g4 f#4, [a3,d4]]/2", V: "b3@7 c4@9", W: "a3", X: "[c4@7 b3@9 a3@16 c4@7 b3@9 [a3,f#4]@16, d4]/4",
  Y: "[~@4 b4@3 c5@9 ~@7 [a3,f#4]@9, d4@31 ~, [g3,g4]@23 ~@9, ~ a4]/2", // D G
  Z: "[~@4 b4@3 c5@9 a4@6 c5 b4 a4@8, d4@31 ~, [g3,g4]@23 [a3,f#4]@9]/2", // G D
  AA: "[~@8 g3@59 ~@13, g5@67 ~@13, ~@2 d5@65 ~@13, ~@4 g4@63 ~@13, ~@6 d4@61 ~@13]/5",
})).s("gm_string_ensemble_1").gain(0.29)

// bass · fretless bass · "BASS"
const bass = note(`<
  ~@2 A B C D E F G H I J K J K L E M N O P Q R S R T R U V W K X K Y K X Z AA AB AC AD Q AE AF AG AH AI AJ AK AL AM AN
  AO AP AQ AR AS AT AU AV AW AX Z AY AZ BA BB BC BD BE AG BF BG BH BI BJ BK BL BM BN BO BP BQ BR BS BH BO BP BB BP BT@4
  ~
>`.pickRestart({
  A: "c2@7 g1 ~@2 g1@6", B: "d2@7 d2@3 d2@2 a2@4", C: "c2@7 g2@3 g2@2 a2@4", D: "d2@2 d2!6", E: "c2@7 g1@2 g1 g1@6",
  F: "d2@11 c3 d3 ~@3", G: "c2@4 d3@3 g2!3 g2@2 ~ a2@3",
  H: "[d2,a2]@7 ~@3 d2@2 ~ [b1,c2,c#2] [g#1,a1,a#1] [f1,f#1,g1], ~@7 d3@9, ~ a2, ~@3 [d1,d2]", // D5 D
  I: "c2@7 g1@3 g1@6, e1 ~@15", J: "d2", K: "c2@7 g1@3 g1@6", L: "d2@13 a1 b1@2", M: "d2@3 d2 d2@3 d2 d2@4 f#2@4",
  N: "e2@7 c2 c2@2 c2@6", O: "d2@7 d2@3 d2@3 b1 d2@2", P: "e2@7 c2 c2@2 c2@5 c2",
  Q: "d2@2 d2@2 d2@2 d2@2 d2@2 e2 d2 b1 a1 g1 e1", R: "g1@4 g1@3 c2@3 c2@3 c2 b1@2", S: "a1@4 a1@3 d2@3 d2@3 b1 a1@2",
  T: "a1@4 a1 b1 c2 d2@3 d2@3 b1 a1 d2", U: "a1@4 a1@3 d2@3 d2@3 d2 f#1@2", V: "g1@4 g1@3 c2@2 g1 c2@3 d1 g1 g#1",
  W: "a1@3 d1 a1@3 d2@2 d2!2 a1 d2!2 d2@2", X: "d2@7 d2@3 d2@3 a1 b1@2", Y: "d2@7 d2 f#2 g2 f#2 e2@3 d2@2",
  Z: "c2@7 g1@3 g1@3 a1 b1@2", AA: "d2@3 d2 d2@3 d2 d2@2 d2 a1 d2 a1 d2@2", AB: "e2@4 e1@3 c2!3 c2@2 c2@2 c2!2",
  AC: "d2@4 d2@2 a1 d2@2 d2 d2@3 a1 d2@2", AD: "e2@3 e2 e2@3 c2@2 c2 c2@4 c2 e2", AE: "g1@4 g1@3 c2@2 c2 c2@3 c2 b1@2",
  AF: "a1@4 a1@3 d2@2 d2 d2@3 b1 a1@2", AG: "g1@3 g1 g1@3 c2@3 c2@3 c2 b1@2", AH: "a1@4 a1 b1 c2 d2@2 d2 d2@3 d2 e2 d2",
  AI: "g2@4 g2@3 c2@2 c2 c2@3 c2 b1@2", AJ: "a1@3 a1 a1@3 d2@2 d2 d2@3 d2 f#1@2",
  AK: "g1@4 g1@3 c2@2 c2 c2@2 c2 e1 g1 e1", AL: "a1@3 a1 a1@2 a1 d2@2 d2!2 a1 d2 a1 d2 b1",
  AM: "e1@4 e1@3 b1@3 b1@2 d2@2 b1@2", AN: "e2@3 e2 e2@3 e1@2 e1 e1@2 e2 e1 d2@2", AO: "c2@4 c2@3 g1@3 g1@2 a1@2 g1@2",
  AP: "c2@7 g1 c2!3 g1 b1!2 g1 g#1", AQ: "a1@3 a1 a1@3 e1@3 e1@2 g1@2 e1@2", AR: "a1@2 a1!2 a1@3 a1@3 a1@3 a1 a1@2",
  AS: "d2@3 d2 d2@3 d2!3 d2@2 a1!2 b1@2", AT: "d2!7 b1", AU: "g1@4 b2@3 c3@7 a2@2", AV: "a2@7 d2@5 d2 e2 g2 e2",
  AW: "a2@7 c3@5 d3 e3@3", AX: "a2@7 d2 d2@2 d2@2 d2@2 d2@2", AY: "d2@8 e2@3 a2@3 d3@2",
  AZ: "c2@4 e3@2 c3 d3 g2@4 a2@4", BA: "d2@2 d2@2 d2@2 d2@2 d2@2 d2@2 d2!2 d2@2",
  BB: "[g1,g2]@4 g2@3 c2@2 c2 c2@3 c2 b1@2", BC: "a1@3 a1 a1@3 d2@2 d2 d2@3 a1 a1@2",
  BD: "[g1,g2]@4 g1@3 c2@3 c2@3 g1 b1 g1", BE: "a1@3 a1 a1@3 d2 ~ a1 d2@2 f#1@2 a1 f#1",
  BF: "a1@3 a1 a1@3 d2@2 a1 d2@3 g1 a1 f#1", BG: "g1@2 g1!3 a1 b1 c2@2 c2 c2@2 g1!2 b1 g1",
  BH: "a1@2 a1@2 a1 b1 c2 d2@2 d2 d2@2 e2 d2 b1 a1", BI: "g1@2 g1!2 g2@3 c2@3 c2@3 c2 b1@2",
  BJ: "a1@3 a1 a1@3 d2@3 d2@2 d2 b1 e2 d2", BK: "[g1,g2]@3 g1 [g1,g2]@3 c2@2 c2 c2@2 c2!2 b1 g1",
  BL: "a1@3 a1!2 b1 c2 d2@2 ~ d2@2 a1!2 d2 a1", BM: "g2@2 g2!2 g1@3 c2@3 c2!2 ~ c2 b1@2",
  BN: "a1@3 a1 a1@3 d2@3 d2@2 ~ d2 e2 d2", BO: "g2 e2 d2 g1@3 g1 c2@3 c2@3 c2 b1@2",
  BP: "a1@2 a1!3 b1 c2 c#2 d2 ~ d2@2 d2!2 a1 f#1", BQ: "g1!4 g1@2 g1 c2@2 g1 c2@3 g1 c2 g1",
  BR: "a1@3 a1 a1@3 d2 ~ a1 d2!2 e2 d2 b1 a1", BS: "g2!5 d2 g1 c2 ~ c2!2 g1 c2 g1 b1 g1",
  BT: "[~ g1@6 ~, g3@3 ~, ~ d3@23 ~@8, ~@4 g2@45 ~@15, ~@6 d2@43 ~@15]/4",
})).s("gm_fretless_bass").gain(0.59)

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

// drums · snare
const snare = s("sd").struct(`<
  ~@5 A B C B D E@6 B D B@3 F B@7 G B@3 H B@3 D B@3 I B@7 J B@3 H B@3 J ~@4 B K L M B@3 H B@3 N B@3 O B@3 P B@3 Q B@3 R
  ~@5
>`.pickRestart({
  A: "~@9 x!2 ~ x ~@3", B: "~ x ~ x", C: "~@4 x ~@7 x!2 ~@2", D: "~ x!3", E: "~@3 x", F: "x ~@10 x!2 ~@3",
  G: "~@2 x ~@2 x ~ x", H: "~@4 x ~@4 x ~@2 x ~@3", I: "x ~@8 x!2 ~@5", J: "~@4 x ~@3 x!6 ~@2", K: "~@12 x ~@2 x",
  L: "~@4 x ~@4 x ~@6", M: "~@10 x!5 ~", N: "~@2 x ~@3 x ~@2 x ~@6", O: "~@4 x ~@4 x ~@2 x!2 ~@2",
  P: "~@4 x!2 ~@2 x!2 ~@2 x!2 ~@2", Q: "~@4 x ~@3 x!5 ~@3", R: "~@4 x!2 ~ x!3 ~@6",
})).gain(0.72)

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

// 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 S U ~@8 V W X Y Z W AA AB S AC AD ~@17 AE AF AG AH E AI ~@31
>`.pickRestart({
  A: "x!2", B: "x!4", C: "~@2 x!3 ~ x!5 ~ x ~ x!2", D: "x ~ x!3 ~ x!3 ~ x!3 ~@3", E: "~@2 x!3 ~ x!4 ~@6",
  F: "~@3 x!2 ~@11", G: "~@2 x!3 ~ x!3 ~@3 x ~@3", H: "x ~ x ~ x ~ x!4 ~@6", I: "~@2 x!3 ~ x!4 ~@2 x!2 ~@2",
  J: "~@2 x!8 ~@2 x ~ x!2", K: "~@5 x!4 ~ x ~ x ~ x!2", L: "x ~ x!2 ~ x!4 ~ x ~ x ~ x!2",
  M: "x ~ x ~@2 x!2 ~ x ~ x ~ x ~ x!2", N: "x ~ x!2 ~ x!4 ~ x ~ x!2 ~ x", O: "~@2 x!2 ~ x!4 ~ x ~ x!4",
  P: "x ~ x!2 ~ x!5 ~@2 x!4", Q: "~@2 x!2 ~@2 x ~ x ~@3 x!2 ~@2", R: "~@2 x!2 ~@2 x!5 ~ x!2 ~@2", S: "~@2 x ~@3 x!10",
  T: "x ~ x ~@3 x!10", U: "~@9 x!2 ~@5", V: "~ x!7", W: "x ~@3 x ~ x ~ x ~ x!3 ~ x ~",
  X: "x ~ x!3 ~ x ~ x ~ x ~ x ~ x!2", Y: "x ~ x ~ x ~ x!7 ~ x ~", Z: "x!8", AA: "x ~ x!3 ~ x ~ x ~ x!3 ~ x!2",
  AB: "x ~ x!3 ~ x!6 ~@4", AC: "x ~ x!2 ~@2 x!10", AD: "~@2 x!2 ~@2 x!10", AE: "~@2 x!2 ~ x!11",
  AF: "x ~ x!3 ~ x!2 ~@8", AG: "~ x!9 ~ x!5", AH: "~ x!3 ~ x!3 ~@8", AI: "x ~ x!2 ~@2 x!2 ~@2 x!2 ~@4",
})).gain(0.64)

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

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

// drums · high tom
const high_tom = s("ht").struct("<~@89 [~@10 x!2 ~@4] [x!4 ~@12] ~@4>").gain(0.8)

// drums · crash
const crash = s("cr").struct(`<
  ~@2 A ~ A@3 ~ A@3 ~@3 A ~ A@3 ~ A@3 ~ A B A ~ A ~ A ~@7 A ~ A@3 ~ A ~ C ~ A D A B A E F G H I A ~ A@2 C A J K A ~ A B
  A B A L C ~ C B M@2 N O P Q R S T U F V W ~@4
>`.pickRestart({
  A: "x", B: "~@7 x", C: "x!2 ~@2", D: "x ~ x ~@4 x", E: "~@4 x ~@10 x", F: "x ~@3 x ~@2 x ~@2 x ~ x ~@3",
// … 36 more lines

More by Melissa Etheridge