Strudelify

Go to the Mirror Boy

The Who

KeyC majorTempo110 bpm
0:00/0:00
// Go to the Mirror Boy — The Who
// 110 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 110 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.

// bass · fretless bass · "Bass"
const bass = note(`<
  ~ A@2 B C A D A E A@2 B C F G H I J K@2 L@2 M@2 N@2 O@2 M@4 P Q A@6 B C F G H I J K@2 L@2 M@2 N@2 O@2 M@4 P Q A D A E
  A@2 B C F G H I J R S@2 T U A B C F G H I J A D A E F G V H I@2 A@2 B C A D A E W@2 ~
>`.pickRestart({
  A: "c2@2 ~ c2 ~@6 g1@3 f1@3", B: "c2@2 ~ c2 ~@6 g1@3 ~ f1@2", C: "c2@2 ~ c2@2 ~@5 g1@3 f1@3",
  D: "c2@2 ~ c2 ~@6 g1@3 f1@2 ~", E: "c2@2 ~ c2 ~@6 g1@2 ~ f1@2 ~", F: "e2@6 ~@2 e2 ~ e2@2 ~ e2@2 e2",
  G: "a1@7 ~ a1 ~ a1@2 ~ a1 ~ a1", H: "f2@6 ~ f2!2 ~ f2 ~ f2@2 f#2@2", I: "g2@7 ~@2 g2 g2@3 ~ g2 ~",
  J: "g2@2 ~ g2@2 ~ g2@2 ~ g2@2 ~ g2 ~ g2 ~", K: "[b1@29 ~ b1 ~]/2", L: "c#2/2", M: "[c#2@31 ~]/2", N: "[a#1@31 ~]/2",
  O: "[b1@31 ~]/2", P: "c2@3 ~ c2@3 ~ c2@3 ~ c2@2 ~ c2", Q: "g1 ~ g1@2 ~ g1@2 g1 g1@2 g1 ~ g1!2 ~ g1",
  R: "g1@10 g1@2 ~ g1@2 ~", S: "g1@9 ~ g1@3 g1@2 ~", T: "g1@7 ~ g1@2 a1@2 a#1@2 b1@2", U: "c2@3 c2 ~@6 g1@3 f1@3",
  V: "f2@6 ~ f2!2 ~ f2 ~ f2@2 f2@2", W: "c2/2",
})).s("gm_fretless_bass").gain(0.55)

// chords · piano · "Piano 1"
const piano = note(`<
  ~ A@12 B C D E@2 ~@16 A@8 F G H I@2 ~@16 A@8 B C D E@2 J K L M A@4 F G H I@2 A@4 B C D@2 N O@2 A@7 P@2 ~
>`.pickRestart({
  A: "[c4,e4,g4]@3 [c4,e4,g4] ~@6 [g2,g3,b3,d4]@3 [f2,a3,c4]@3, c3@8 ~@5 f3 ~@2", // C G F
  B: "[e3,g#3] ~ [e3,g#3,b3]@4 ~@2 [e3,g#3,b3]@2 ~@2 e2 ~ e2@2, e2@11 ~@5, b3@2 ~@9 [e3,g#3,b3]@3 ~@2", // E
  C: "[a3,c4,e4] ~ [a3,c4,e4]@5 ~ [a3,c4,e4]@3 [a3,c4,e4]@3 a2@2, a2@3 ~", // Am
  D: "[f3,a3,c4]@6 ~@7 [f3,a3,c4]@2 ~, f2@9 ~ f2@6, ~@6 [f3,a3,c4]@7 ~@3", // F
  E: "[[g3,b3,d4]@7 ~ [g3,b3,d4] ~ [g2,g3,c4,e4]@2 ~ [g3,c4]@2 ~ [b3,d4]@3 ~ [g3,b3,d4]@5 ~ [g2,c4,e4]@2 ~ [g2,b3,d4] ~@2, g2@8 ~@4 g2@13 ~@7, ~@13 e4 ~ g3@4 ~@7 g3@3 ~@3]/2", // G C C5 Bm G C G
  F: "[e2,b3]@2 ~@2 f#3 e2@3 [e2,e3,g#3,b3]@3 [e2,e3] e2!2 e2@2, [e3,g#3] ~ [g#3,b3]@4 ~@5 [g#3,b3]@3 ~@2, ~ e3!2 ~@3 e3 ~, ~@3 e2@2 ~@11", // E5 E G#m
  G: "[a3,c4,e4] ~@4 a2@3 [a2,a3,c4,e4]@3 [a2,a3] ~ a2 a2@2, a2@2 [c4,e4]@5 ~@4 [c4,e4]@3 ~@2, ~@2 a3@2 a3@3 ~@5 a3@2 ~@2, ~@3 a2@2 ~@11", // Am A C
  H: "[f2,f3]@3 ~@5 f2@2 f2 ~ f3 ~ f#2 f#3, [a3,c4]@3 ~@5, ~@3 f2@2 f2@3 ~@3 f2@2 [f2,f3,a3,c4]@3, ~@4 f3@2 [f3,a3,c4]@7 ~@3", // F Am F
  I: "[[g2,g3] g2@2 g2@3 [g2,g3]@2 [g3,b3,d4] g2!3 [g2,g3] [g2,g3,c4]@2 g3 ~@2 g3 ~@5 g3 g2!3 ~ [g2,b3,d4] g3 g2, [b3,d4]@7 ~@6 e4 ~@2 [g3,b3,d4]@3 ~ [b3,d4]@5 ~@7, ~ g3@5 ~@4 [g3,c4,e4]@2 ~@3 g2@2 g2@2 g2@2 g2@2 g2@2 ~@7, ~@10 g3!2 ~ [g3,c4,e4] g3 ~]/2", // G C5 G Bm G Bm C
  J: "[g1,g3,b3,d4]@8 ~@2 [g3,c4,e4]@3 [g3,c4,e4]@3, ~ g1", K: "[g3,b3,d4]@10 [g3,c4,e4]@3 [g3,c4,e4]@3, g1, f1 ~@7",
  L: "[g3,b3,d4]@9 ~ [g3,c4,e4]@2 ~ [g3,c4,e4]@3, g1", M: "[g3,b3,d4]@8 [g3,c4,e4]@4 [g1,g3,b3,d4]@3 ~, g1@3 ~",
  N: "[g3,b3,d4]@7 ~ [g3,b3,d4] ~ [g2,g3,c4,e4]@2 ~ [g3,c4]@2 g3, g2@2 ~ g2, ~@13 e4 ~@2", // G C C5
  O: "[[g3,b3,d4]@7 ~ [g3,b3,d4] ~ [g2,g3,c4,e4]@2 ~ [g3,c4]@2 ~ [c4,e4,g4]@3 [c4,e4,g4] ~@6 [g2,g3,b3,d4]@3 [f2,a3,c4]@3, g2@8 ~@4 g2@13 ~@7, ~@13 e4 ~ g3@4 ~@10 f3 ~@2, ~@2 c3 ~]/2", // G C C5 C G F
  P: "[c2,c3,c4,e4,g4]/2", // C
})).s("gm_piano").gain(0.56).pan(0.3)

// chords · french horn
const french_horn = note(`<
  ~ A B C D E@4 F@2 G F H I J K@2 ~@16 L M@2 N O F G F H I J K@2 ~@16 E@4 F@2 G F H I J K@2 ~@4 O F G F H I J K@2 E@4 ~
  I J P@2 Q@2 R C D E@4 S@2 ~
>`.pickRestart({
  A: "g5 e5 c5 e5 g4@4 ~@2 [g3,b3,c5] d5 e5 [f3,a3,d5] c5 ~, [g3,c4]@7 ~@9", // Cmaj7 Dm C5
  B: "g5 e5 c5 e5 g4@4 ~@2 [g3,c5] ~@2 [f3,a3] ~@2, [g3,c4]@8 ~ b3@2 ~ d5@3 ~", // C5 F C5
  C: "g5 e5 c5 e5 g4@4 ~@2 [g3,b3,c5] d5 e5 [f3,a3,d5] c5 ~, [g3,c4] ~", // Cmaj7 Dm C5
  D: "g5 e5 c5 e5 g4@4 ~@2 [g3,b3,c5] ~@2 [f3,a3] ~@2, [g3,c4]@8 ~@4 d5@3 ~", // Cmaj7 F C5
  E: "[[g4,c5,g5]@6 ~@4 [b4,d5,f5] e5 f5 c5 f5 ~ [g4,c5]@6 ~@4 [b4,c5,d5] ~ d5 [c5,e5] e5 ~ [g4,c5,g5]@5 d#4 ~@4 [b4,d5,f5] e5 f5 [c5,e5] d5 ~ [g4,c5]@6 ~@4 [b4,c5,d5] ~ d5 [c5,e5] e5 ~, [g3,c4], ~@13 e5@2 ~@49]/4", // C5 Bdim C5 Bm C C5 Bdim C …
  F: "[g3,c4]@9 ~ [g3,b3]@2 ~ [f3,a3] ~@2", G: "[g3,c4]@9 ~ b3@2 ~ [f3,a3] ~@2, ~@9 g3@2 ~@5", H: "[e3,g#3]",
  I: "[a3,c4]@15 ~, b3 ~@15", J: "[f3,a3]@15 ~", K: "[g3,b3]/2", L: "[c4,e4,g4]@8 ~@2 [b3,d4,g4] ~@2 [f4,a4,c5]@2 ~",
  M: "[c4,e4,g4]@8 ~@2 [b3,d4,g4]@2 ~ [f4,a4,c5]@2 ~", // C G F
  N: "~@6 f5 e5 f5 ~ [b3,d4,d5] c5 ~@2 d5@2, [c4,e4,g4]@9 ~ g4@2 b4@2 ~@2, ~@13 [c4,f4,a4]@2 ~", // Bm C F
  O: "[c4,e4,g4]@8 ~@2 [g3,b3]@2 ~ [f3,a3] ~@2, [g3,c5]@5 ~@3", P: "[g3,b3]",
  Q: "[g3@16 g5 e5 c5 e5 g4@4 ~@2 c5 d5 e5 [f3,a3,d5] c5 ~, b3@13 ~@3, ~ c4, ~@8 g3@5 [g3,b3]@3]/2", // Dm G
  R: "g5 e5 c5 e5 g4@4 ~@2 c5 ~@2 [f3,a3] ~@2, c4@15 ~, g3@9 b3@2 ~ d5@3 ~, ~@10 g3@5 ~", S: "[g3,c4]/2",
})).s("gm_french_horn").gain(0.38)

// chords · overdriven guitar · "Elec Guitar"
const overdriven_guitar = note(`<
  ~ A B C D E B F G H I J K L M N O@2 P@2 Q R S@2 T@2 U@2 V W X@2 Y Z H I AA I AA I J K L M N O@2 P@2 Q R S@2 T@2 U@2 V
  W X@2 Y Z E B F G H I J K L M N O@2 AB AC AB AD H I J K L M N O@2 E B F G L M N ~ AE AF AG B C D E B F G AH@2 ~
>`.pickRestart({
  A: "[g3,c4]@4 ~@6 [g3,b3]@2 ~ [f3,a3]@2 ~", B: "[g3,c4]@5 ~@5 [g3,b3]@2 ~ [f3,a3]@2 ~",
  C: "[g3,c4]@6 ~@4 [g3,b3]@2 ~ [f3,a3]@2 ~", D: "[g3,c4]@6 ~@4 [g3,b3] ~@2 [f3,a3] ~@2",
  E: "[g3,c4]@5 ~@5 [g3,b3]@2 ~ [f3,a3] ~@2", F: "[g3,c4]@7 ~@3 [g3,b3]@2 ~ [f3,a3] ~@2",
  G: "[g3,c4]@8 ~@2 [g3,b3] ~@2 [f3,a3]@2 ~", H: "[g3,c4]@4 ~@6 [g3,b3]@2 ~ [f3,a3] ~@2",
  I: "[g3,c4]@4 ~@6 [g3,b3] ~@2 [f3,a3] ~@2", J: "[g3,c4]@9 ~ [g3,b3]@2 ~ [f3,a3] ~@2",
  K: "[g3,c4]@8 ~@2 [g3,b3]@2 ~ [f3,a3]@2 ~", L: "[e3,g#3]@15 ~", M: "[a3,c4]@15 ~", N: "[f3,a3]@15 ~",
  O: "[b3@10 c4@6 b3@15 ~, g3@31 ~]/2", P: "[d#5@19 ~ d#5@2 f5 ~ f#5 ~ g#5 ~ f#5 ~ f5@2]/2", Q: "f5@3 ~",
  R: "~@8 a#4 g#4 f#4@2 g#4@2 f#4@2", S: "[g#4 a#4@18 ~ g#4 ~ f#4 ~ f4@2 f#4@2 f4@4]/2", T: "[f4@9 ~@6 a#4]/2",
  U: "[c#5 ~ d#5@18 ~@2 f5@2 f#5@2 g#5@2 f#5@2 f5@2, ~@5 d#5 ~@2]/2", V: "f5", W: "~@8 a#4 g#4 f#4@2 g#4@2 a#4 ~",
  X: "[~ [g#4,a#4] ~@2 [g#4,a#4] ~ g#4 a#4@2 g#4@10 ~ f#4 ~ f4@2 d#4@3 ~ c#4@3 ~]/2", Y: "c4",
  Z: "b4 g5 ~ b4 g5@2 b4 g5@8 ~, b3@15 ~", AA: "[g3,c4]@8 ~@2 [g3,b3]@2 ~ [f3,a3] ~@2",
  AB: "[g3,b3]@3 ~ [g3,b3]@5 ~ [g3,c4]@2 ~ [g3,c4]@2 ~", AC: "[g3,d4]@3 ~ [g3,d4]@5 ~ [g3,c4]@3 [g3,c4]@2 ~",
  AD: "[g3,d4]@3 ~ [g3,d4]@5 ~ [g3,d4]@3 [g3,d4]@2 ~", AE: "b3@5 c4@3, g3", AF: "~@5 c4@3, [g3,b3]",
  AG: "g3@10 b3@2 ~ [f3,a3]@2 ~, c4@4 ~@6 g3@5 ~", AH: "[[g3,c4]@3 ~]/2",
})).s("gm_overdriven_guitar").gain(0.4).pan(0.7)

// chords · acoustic guitar steel · "Steelstr Guitar"
const acoustic_guitar_steel = note(`<
  ~ A B C D@2 E C F A B C D G H I J K ~@16 A B A B A B C D G H I J K ~@16 L E C F A B C D G H I J K M N O P A B C D G H
  I J K L E C F Q H I@2 J@2 A B C D@2 E C F R@2 ~
>`.pickRestart({
  A: "[c3,g3,c4,e4]!4 [g3,c4,e4] ~@5 [g2,g3,b3,d4]@2 ~ [f2,a3,c4]@3, ~@4 c3@3 ~@6 f3 ~@2", // C G F
  B: "[c3,g3,c4,e4]!4 [g3,c4,e4] ~@5 [g3,b3,d4] ~@2 [f3,a3,c4] ~@2, ~@4 c3@5 ~ g2@3 f2@3", // C G F
  C: "[c3,g3,c4,e4]!4 [g3,c4,e4] ~@5 [g2,g3,b3,d4]@2 ~ [f3,a3,c4] ~@2, ~@4 c3@4 ~@5 f2@3", // C G F
  D: "[c3,g3,c4,e4]!4 [g3,c4,e4]@2 ~@4 [g3,b3,d4] ~@2 [f3,a3,c4] ~@2, ~@4 c3@4 ~@2 g2@3 f2@3", // C G F
  E: "[c3,g3,c4,e4]!4 [g3,c4,e4]@2 ~@4 [g2,g3,b3]@3 [f3,a3,c4] ~@2, ~@4 c3@4 ~@2 d4 ~@2 f2@3", // C G F
  F: "[c3,g3,c4,e4]!4 [g3,c4,e4] ~@5 [g2,g3,b3,d4]@2 ~ [f2,f3,a3,c4]@2 ~, ~ c3 ~@2", // C G F
  G: "[c3,e3,g#3,b3] ~ [e3,g#3,b3]@2 ~ [e3,g#3,b3] ~@4 [e3,g#3,b3]@2 ~ [e3,g#3,b3] ~@2", // E
  H: "[a3,c#4,e4]@2 ~ [a3,c#4,e4] ~@3 [a3,d#4] ~@2 [a3,c#4,e4]@2 ~ [a3,c#4,e4] ~@2, ~@3 [c#4,e4] ~@4", // A Adim A C#m
  I: "[f3,a3,c4] ~ [f3,a3,c4]@2 ~@2 [f3,a3,c4]@3 c4 ~@2 [f3,a3,c4] ~ [f3,a3,c4] ~", // F
  J: "[g3,b3,d4]@2 ~ [g3,b3,d4] ~@2 [g3,b3,d4]@2 ~@2 [g3,c4,e4]@2 ~ [g3,c4,e4]@2 ~", // G C
  K: "[g3,b3,d4]@2 ~ [g3,b3,d4] ~@2 [g3,b3,d4]@2 ~ [g3,b3,d4] ~@2 [g3,b3,d4] ~ [g3,b3,d4] ~", // G
  L: "[g3,c4,e4] [c3,g3,c4,e4]!3 [g3,c4,e4]@2 ~@4 [g3,b3,d4] ~@2 [f3,a3,c4] ~@2, ~@4 c3@4 ~@2 g2@3 f2@3", // C G F
  M: "[g3,b3]@4 [b3,g4]@3 ~@3 [d3,g3,c4]@2 ~@2 e4@2, d3@7 b3@2 e4@3 f4@2 ~@2, ~@4 g3@4 [d3,c4]@2 ~@3 [d3,g3,c4]@3", // G Em Csus2 D7 Csus2
  N: "[d3,g3,d4]@3 ~ [d3,g3,d4,g4]@4 [b3,c4] ~ [d3,g3,c4]@2 ~@2 e4@2, b3@4 ~@5 e4@3 f4@3 ~, ~@13 [d3,g3,c4]@2 ~", // G5 Cmaj7 Csus2
  O: "[d3,g3,b3]@3 ~ [b3,g4]@3 b3 c4 ~ [d3,g3,c4]@2 ~@2 e4@2, ~@4 [d3,g3]@5 e4@3 f4@2 ~@2, ~@13 [d3,g3,c4]@2 ~", // G Em Csus2 G5 Csus2
  P: "[d3,g3,b3,d4]@3 ~ g4@3 b3 c4 ~ [d3,g3,c4]@2 ~@2 e4@2, ~@4 [d3,g3,d4]@5 e4@3 f4@2 ~@2, ~@13 [d3,g3,c4]@3", // G Csus2 G5 Csus2
  Q: "[e3,g#3,b3] ~ [e3,g#3,b3]@2 ~ [e3,g#3,b3] ~@4 [e3,g#3,b3]@2 ~ [e3,g#3,b3] ~@2", R: "[g3,c4,e4]/2",
})).s("gm_acoustic_guitar_steel").gain(0.54)

// chords · piano · "Piano 2"
const piano_2 = note("<~@18 A@2 B@4 C@2 D@2 E@2 F@2 G H ~@13 A@2 B@4 C@2 D@2 E@2 F@2 G H ~@47>".pickRestart({
  A: "[[b3,d#4,f#4]@6 ~@2 [b3,d#4,f#4]@7 ~@5 b2@4 [b3,d#4,f#4]@4 b2@4, b2@5 ~@3, ~@8 [b3,d#4,f#4]@3 ~@5]/2", // B
  B: "[[c#4,f4,g#4]@6 ~@10 [c#4,f4,g#4]@7 ~@9 [c#4,f4,g#4]@6 ~@2 [c#4,f4,g#4]@4 ~@4 [c#4,f4,g#4]@6 ~@2 [c#2,c#4,f4,g#4]@4 [c#2,c#3]@4, c#3@11 ~ c#3@14 ~@2 c#3@14 ~@2 c#3@14 ~@6, ~@8 [c#4,f4,g#4]@7 ~@9 [c#4,f4,g#4]@6 ~@2 c#2@8 c#2@7 ~ c#2@8 ~@8]/4", // C#
  C: "[[a#3,d4,f4]@7 ~@9 [a#3,d4,f4]@7 ~ [a#3,d4,f4]@4 a#2@3 ~, a#2@11 ~ a#2@14 ~@6, ~@8 [a#3,d4,f4]@7 ~@17]/2", // A#
  D: "[[b3,d#4,f#4]@7 ~@9 [b3,d#4,f#4]@8 [b3,d#4,f#4]@4 ~@2 g#4 ~, b2@11 ~ b2@15 ~ b2@4, ~@4 [b3,d#4,f#4]@3 ~@9]/2", // B
  E: "[c#4,f4,g#4]@6 ~@6 c#3@3 ~, c#3@5 ~@3, ~@8 [c#4,f4,g#4]@7 ~", // C#
  F: "[[c#4,f4,g#4]@3 ~@5 [c#2,c#4,f4,g#4]@3 ~ [c#4,f4,g#4]@2 c#2@2, c#2@14 ~@8 c#2@5 ~@5, c#3@5 ~ c#3@7 ~ c#3 ~, ~@4 [c#4,f4,g#4]@3 ~@9]/2", // C#
  G: "[c4,e4,g4]@7 ~@5 c3@4, c3@11 ~@5, ~@4 [c4,e4,g4]@3 ~", // C
  H: "~@2 g1@3 ~ g1 ~ [g1,g2,b3,d4,g4]@3 g1 [b3,d4,g4]@2 [g1,g2]@2, [g2,b3,d4,g4]@7 ~@4 g2@2 ~@3, ~@12 g1 ~@3", // G
})).s("gm_piano").gain(0.35).pan(0.4)

// other · flute
const flute = note("<~@18 A@2 B C D@2 E@2 F@2 B C G@2 H I ~@13 A@2 B C D@2 E@2 F@2 B C G@2 H I ~@47>".pickRestart({
  A: "[d#5 d#5@27 ~@4]/2", B: "d#5", C: "c#5@3 ~", D: "[d#5@4 c#5@23 ~@5]/2", E: "[a#4@7 ~ a#4@20 ~@4]/2",
  F: "[d#5 ~ d#5@26 ~@4]/2", G: "[d#5 c#5@6 ~]/2", H: "c5", I: "b4",
})).s("gm_flute").gain(0.53)

// chords · pad warm · "Warm Pad"
const pad_warm = note("<~@17 A@3 B@4 C@8 D@2 ~@12 E@3 B@4 C@8 D@2 ~@47>".pickRestart({
  A: "[~@5 [b3,d#4,f#4]@10 ~, ~@5 b2@11]/3", B: "[[c#4,f4,g#4]@15 ~, c#3]/4",
  C: "[[a#2,a#3,d4,f4]@31 ~ [b3,d#4,f#4]@30 ~@2 [c#4,f4,g#4]@64, ~@31 b2@32 c#3@64 ~]/8", // A# B C#
  D: "[g#4 [e4,g4]@14 ~ [g2,b3,d4]@15 ~, [c3,c4]@15 g4@15 ~@2]/2", E: "[~@14 [b3,d#4,f#4]@33 ~]/3",
})).s("gm_pad_warm").gain(0.37).pan(0.7)

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

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@14 A B ~@27 A B ~@27 A B ~@11 A B ~@7 A B@2 ~@13>".pickRestart({
  A: "~@8 x!4 ~ x!3", B: "x",
})).gain(0.27)

// drums · clap
const clap = s("cp").struct("<~@33 [~@5 x ~@2] ~@28 [~@5 x ~@2] ~@47>").gain(0.54)

// drums · low tom
const low_tom = s("lt").struct(`<
  A ~@11 B ~@4 C ~@15 D ~@7 B ~@4 C ~@15 D ~@7 B ~@4 C ~@3 E ~@3 B ~@4 C ~@21
>`.pickRestart({
  A: "~@7 x", B: "~@11 x!2 ~ x ~", C: "~@12 x!3 ~", D: "~@8 x ~ x ~ x!2 ~ x", E: "~@13 x ~ x",
})).gain(0.54)

// drums · hihat
const hihat = s("hh").struct("<~ A@12 B@5 ~@14 C D A@8 B@5 ~@14 C D A@8 B@5 ~@4 A@4 B@5 A@4 B@6 A@8 ~@3>".pickRestart({
  A: "x!16", B: "x!2 ~ x!3 ~ x!3 ~ x!3 ~ x", C: "~ x!3", D: "x!4",
})).gain(0.27)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  A ~@11 B ~@4 C ~@14 D E ~@7 B ~@4 C ~@14 D E ~@7 B ~@4 C ~@3 F ~@3 B ~@4 C ~@21
>`.pickRestart({
  A: "~@13 x ~@2", B: "~ x", C: "~@2 x ~@2 x ~ x!2 ~ x ~@5", D: "~@15 x", E: "x!3 ~@5", F: "~@6 x!3 ~ x ~ x ~@3",
})).gain(0.54)

// drums · open hat
const open_hat = s("oh").struct("<~@33 [~@5 x ~ x] ~@28 [~@5 x ~ x] ~@47>").gain(0.54)

// drums · high tom
const high_tom = s("ht").struct("<A ~@16 B ~@28 B ~@28 B ~@12 B ~@21>".pickRestart({
  A: "~@3 x", B: "~@2 x ~@2 x ~ x ~@8",
})).gain(0.54)

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

// drums · ride
const ride = s("rd").struct(`<
  ~@18 A B C D C E C F G H I E J K L M ~@13 A B C D C E C F G H I E J K L M ~@47
>`.pickRestart({
  A: "x!2", B: "x ~@3 x ~ x ~ x ~ x!3 ~ x ~", C: "x ~@3 x ~@2 x", D: "x ~@5 x ~ x ~ x ~ x ~ x!2",
  E: "x ~@5 x!3 ~ x ~ x ~ x ~", F: "x ~@5 x!5 ~ x!2 ~ x", G: "x ~ x!2", H: "x ~ x ~ x!4", I: "x!2 ~ x",
  J: "x ~@7 x ~@5 x!2", K: "x ~ x ~@2 x ~@2 x ~ x ~ x ~ x ~", L: "x ~@2 x!2 ~@2 x",
  M: "x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2",
// … 6 more lines

More by The Who