Strudelify
My Life Has Been Saved cover art

1995 · Made In Heaven

My Life Has Been Saved

Queen

KeyG majorTempo102 bpm
0:00/0:00
// My Life Has Been Saved — Queen
// 102 bpm, 4/4, key G major. 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 83 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(102/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
const bass = note(`<
  A B C D E F G H I J K L M N O P Q R S T U V@2 W U X Y M Z M AA AB@3 AC AB AD A B C D E F G H I J K L M N O P Q R S T U
  V@2 W U X Y AB@3 AC AB@3 AC AB AD AE AF AG AH AI AJ AK@2 ~
>`.pickRestart({
  A: "c2@6 c2@9 ~", B: "e2@6 e2@7 ~ e2 d2", C: "c2@5 ~ c2@7 ~ c2@2", D: "f2@6 c2 d2 f2@4 e2@4", E: "d2@6 d2@7 ~ d2 ~",
  F: "g2@5 ~ g2@8 d2 e2", G: "f2@5 ~ f2@10", H: "e2@5 ~ e2@5 ~ e2@4", I: "a1@7 ~ a1@2 a1@2 a1@2 a1@2",
  J: "d2@5 ~ d2@8 ~@2", K: "f2@4 ~@2 f2 ~ f2@2 ~ [d2,e2] a#1@4, ~@12 c2 ~@3", L: "c2", M: "d2@5 ~ d2@10",
  N: "e2@5 ~ e2@7 ~ e2 d2", O: "c#2@6 c#2@9 ~", P: "d2@5 ~ d2@7 ~ a1 b1", Q: "d2@5 ~ d2@9 ~",
  R: "e2@5 ~ e2@6 ~@2 e2 d2", S: "c#2@5 ~ c#2@8 ~@2", T: "d2@5 ~ d2@5 ~ c#2@4", U: "b1@3 b1!5", V: "g1@3 g1!5",
  W: "f#1@3 f#1!2 f#1@2 f#1", X: "e2@3 e2!5", Y: "a1@3 a1!3 a1@2", Z: "c2@5 ~ c2@10", AA: "c2@3 c2!5", AB: "g1!8",
  AC: "d2!3 b1!5", AD: "g1@2 g1@2 g1 [c2,e2] g2@2 g2@2 g2@2 g2@2 g2@2, ~@6 f2 ~@9", AE: "c3@6 c3@7 ~ c3 d3",
  AF: "e3@6 e3@7 ~ e3 f3", AG: "g3@5 ~ g3@7 ~ g3@2", AH: "f3@6 c3 d3 f3@4 e3@4",
  AI: "d3@4 c3 [g2,a2] d2@8 ~@2, ~@6 f2 ~@9", AJ: "f2@5 ~ f2@4 ~ [d2,e2] a#1@4, ~@12 c2 ~@3", AK: "c2/2",
})).s("gm_fretless_bass").gain(0.35)

// chords · distortion guitar
const distortion_guitar = note(`<
  ~@12 A B C D E F G H I J K L M N O P Q R S T U V W T X Y B Z AA AB AC AD Z AE AF AG AH A B C D E F G H I J K L M N O T
  U V W T U V W T X ~@9
>`.pickRestart({
  A: "[d3,a3]", B: "[e3,b3]", C: "[a2,e3,a3]", D: "[d3,a3]@3 [d3,a3]@5", E: "~@3 d4@5, [d3,a3]",
  F: "e4@3 e4@5, [e3,b3]", G: "c#4@3 ~@2 a3@3, [a2,e3], a3@5 ~@3, ~@3 c#4@5", H: "d4!2, [d3,a3]",
  I: "[f#3,b3]@3 [f#3,b3]@5, b2", J: "[g2,d3,g3]@3 [g2,d3,g3]@5", K: "[e3,a3]@3 [e3,a3]@5, g2",
  L: "[d3,a3]@3 [d3,a3]@5, f#3", M: "b3@3 ~@3 f#3@2, f#3@3 ~, b2@5 b2@3, ~@3 b3@5", N: "[e3,b3]@3 [e3,b3,e4]@5",
  O: "[a2,e3,a3]@3 a3@3 a3@2, ~@3 [a2,e3]@5", P: "d3@3 ~@3 d4@2, d4@3 ~, a3@5 a3@3, ~@3 d3@5",
  Q: "f#4@4 g4@2 e4@6 f#4 e4 d4 c#4, [c3,g3,c4]", R: "a3@3 ~@2 d3@3, d4, d3@5 ~@3, ~@3 a3@5",
  S: "f#4@4 g4@2 e4@9 ~, [c3,g3]", T: "g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~, ~@6 [e3,a3]@9 ~",
  U: "g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~, ~@3 [e3,a3]@5", // A5
  V: "g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~, ~@3 [e3,a3]@3 ~@2", // A5
  W: "f#4@2 d3 e4 [d3,d4] c#4 b2 ~ b2 ~ b2 ~ b2 ~ b2 ~, d3 ~@5 b3@9 ~", // D
  X: "g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~, ~@3 [f3,c4]@5", Y: "[c3,g3]", Z: "[c3,g3]@15 ~", AA: "[f2,c3,f3]@7 ~",
  AB: "[d3,a3]@7 ~", AC: "[g2,d3,g3]@15 ~", AD: "[f2,c3,f3]@15 ~", AE: "[a2,e3,a3]@15 ~", AF: "[d3,a3]@15 ~",
  AG: "[f2,c3,f3]@11 ~ [a#2,f3,a#3]@4", AH: "[c3,g3,c4]",
})).s("gm_distortion_guitar").gain(0.12)

// chords · pad halo
const pad_halo = note(`<
  A@2 B C D E F G H I J K ~@25 A@2 B C D E F G H I J K ~@15 L@2 M@3 L@3 ~@2 B N@2 C O P Q@3
>`.pickRestart({
  A: "[[g3,c4]@16 [b3,g4]@15 ~, e4@31 ~]/2", B: "[g3,c4,e4]", C: "[a3,c4,f4]", D: "[a3,d4,f4]", E: "[b3,d4,g4]@15 ~",
  F: "[d4,f4,a4]", G: "[c4,e4,g4]@15 ~", H: "[e4,g4,c5]", I: "[g4,c5,e5]@6 [f#4,a4,d5]@9 ~",
  J: "[f4,d5]@6 c5@5 ~ [a#4,d5]@4, a4@3 ~, ~@3 f4@5", K: "[g4,c5,e5]", L: "~@6 d5@7 ~@3", M: "~@3 d5@4 ~",
  N: "[[g3,b3,e4]@15 ~ [a#3,c4,e4]@16, g4@31 ~]/2", O: "[e4,g4]@6 [d4,f#4]@9 ~, a3@15 ~",
  P: "[a3,c4,f4]@11 ~ [a#3,d4,f4]@4", Q: "[[c4,e4,g4]@11 ~@5]/3",
})).s("gm_pad_halo").gain(0.17)

// chords · piano
const piano = note(`<
  A B C D E F G H I J K L M N O P Q R S T U V@2 W X Y Z AA AB AC AD AE AF AG AH AI AJ A B C D E F G H I J K L M N O P Q
  R S T U V@2 W X Y Z AK AF AG AH AL AF AG AH AI AJ AM AN AO AP AQ AR AS@2 ~
>`.pickRestart({
  A: "[g3,c4,e4]@3 [g3,c4,e4]@3 [g3,c4,e4,g4]@2, [c2,c3]", // C
  B: "[g3,b3,e4,g4]@3 ~@4 a4, e2, e3@5 e3@3, ~@3 g3@5, ~@3 [b3,e4,g4]@3 [b3,e4,g4]@2", // Em
  C: "[c4,e4,g4,a#4]@6 [c4,e4,g4,a#4]@2 [c4,e4]@3 c4@3 [c4,g4]@2, c2, c3 [c3,a#4], ~@4 g4@3 ~, ~@11 [e4,a4]@5", // C7 C C5 C7 A5
  D: "[c4,f4,a4]@3 [c4,f4,a4] [f2,f3,c4,f4,a4]@2 [e2,e3,c4,e4,g4]@2, [f2,f3] ~", // F C F
  E: "[d4,f4,a4]@4 f4 e4 ~ c4, d3, ~ [d2,a3], ~@3 d4", F: "~@2 g3@2 ~@3 g4, g2, d4@3 d4, ~ [d3,g3], ~@5 b3@3",
  G: "[d4,f4,a4]@6 [d4,f4,a4]@2 [f4,a4]@3 ~@3 f4@2, f2, ~ [f3,d4], ~@11 g4@5", // Dm F Dm
  H: "e4 ~@9 [e4,g4,c5]@5 ~, e2@7 ~, g4@4 e3@3 ~, c4@2 c4@5 ~, ~ e4@4 ~@3", I: "[g4,c5]@5 [g4,c5,e5]!3, [a2,a3,e4]",
  J: "[d3,d4,g4,c5,e5]@3 d4@3 d4@2, ~@3 [d3,f#4,a4,d5]@5", // C D
  K: "[f2,f3,f4,a4,d5]@3 [f2,f3,f4,a4,c5]@3 [a#2,a#3,f4,a#4,d5]@2", L: "[c3,c4,g4,c5,e5]",
  M: "[a3,d4,f#4]@5 ~ [a3,d4,f#4]@10, d3", N: "~@7 b3, e3, ~ b3@3 e2@4, ~ e4@3, ~@3 g4@2 b3 g4@2",
  O: "[a3,c#4,e4]@3 a3@4 a3, c#3, ~@3 [c#4,e4]@5", P: "[a3,d4,f#4]@3 a3@4 a3, d3, ~@3 [d4,f#4]@5",
  Q: "[a3,e4] ~@6 f#4, d3@3 d3@5, ~ f#4@3 f#4@3 ~, ~@2 a3@3 a3@3", R: "~@3 e4, e4@5 e3@3, e3 b3, b3@3 g4@5, g4 e2@3",
  S: "[c#3,a3,c#4,e4]@3 [c#3,a3,c#4,e4]@5", T: "a3!4 [d3,a3,d4,f#4]@2 [c#3,a3,c#4,f#4]@2, [d3,d4,f#4] ~",
  U: "[b3,f#4]@2 d4 ~ [b3,d4,f#4] ~ [d4,f#4] ~ [d4,f#4] ~ [b3,d4,f#4] ~ [b3,d4,f#4] ~ [b3,d4,f#4]@2, b2, d4 ~@5 b3@2 ~@8", // B5 Bm D Bm
  V: "[d4@2 [d4,g4] ~ [d4,g4] ~ [b3,d4,g4]@2 [d4,g4] ~ [b3,d4,g4] ~ [b3,d4,g4] ~ [b3,d4,g4] ~ [c#4,e4] ~ [c#4,e4] ~ [a3,c#4,e4] ~ [a3,c#4] ~ [a3,c#4] ~ [a3,c#4,e4] ~ [a3,c#4,e4] ~ [a3,c#4,e4] ~, g2@31 ~, b3@5 ~@11 a3@2 ~@14, g4 ~@21 e4@2 ~@8]/2", // G5 G G5 G C#m A
  W: "[a3,f#4]@2 d4 ~ [a3,d4,f#4] ~ [a3,d4] ~ [a3,d4,f#4] ~ [a3,d4] ~ [a3,d4] ~ [a3,d4,f#4] ~, f#2@5 ~ f#2@10, d4 ~@5 f#4@2 ~@2 f#4@2 f#4@2 ~@2", // D D5 D D5 D
  X: "[b3,d4] ~ [b3,d4] ~ [b3,d4,f#4] ~ [b3,f#4]@2 [b3,d4] ~ [b3,d4,f#4] ~ [b3,d4] ~ [b3,d4] ~, b2@3 b2@5, f#4@2 ~@4 d4 ~@5 f#4@2 ~@2", // Bm B5 Bm
  Y: "[e4,g4]@2 b3 ~ [b3,e4,g4] ~ [b3,e4,g4]@2 [b3,g4] ~ [b3,e4,g4] ~ [e4,g4]@2 b3 ~, e3, b3 ~@7 e4@2 ~@2 b3 ~@3", // Em
  Z: "[a3,e4]@2 c#4 ~ [a3,c#4,e4] ~ [a3,c#4,e4]@2 [a3,c#4] ~ [c#4,e4]@2 [a3,c#4] ~ [a3,c#4] ~, a2@6 a2@9 ~, c#4 ~@9 a3 ~ e4@2 ~@2", // A5 A C#m A
  AA: "[a3,d4,f#4]@5 ~ [a3,d4,f#4]@10, [d2,d3]", AB: "~@2 g4 [g3,c4,e4]@3 [g3,c4,e4]@2, [c3,g3,c4,f#4]@3 c3@5",
  AC: "[d3,a3,d4,f#4]@3 a3@2 ~@2 a3, d2@3 d2, ~@3 [d3,d4,f#4]@5, ~@5 a3@2 ~", // D
  AD: "~@2 g4 [c3,g3,c4,e4]@4 ~, [c3,g3,c4,f#4]@3 ~@5", // C
  AE: "g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~, [g3,b3,d4]@6 [a3,c#4,e4]@9 ~", // G A
  AF: "g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~, [g3,b3,d4]@5 ~ [a3,c#4,e4]@5 ~ [a3,c#4,e4]@4", // G A
  AG: "g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~, [g3,b3,d4]@5 ~ [a3,c#4,e4]@8 ~@2", // G A
  AH: "d3 ~ d3 ~ d3 ~ b2 ~ b2 ~ b2 ~ b2 ~ b2 ~, [a3,d4,f#4]@5 ~ [b3,d4,f#4]@6 [b3,d4,f#4]@4", // D Bm
  AI: "g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~, [b3,d4,g4]@5 ~ [c#4,e4,a4]@9 ~", // G A
  AJ: "g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~, [b3,d4,g4]@5 ~ [f4,a4,c5]@10", // G F
  AK: "g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~, d3@3 ~, [g3,a3,b3,d4,f#4]@6 [a3,c#4,e4]@9 ~", // Gmaj7 A
  AL: "g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~, [g3,b3,d4,g4]@6 [a3,c#4,e4]@9 ~", // G A
  AM: "c3@2 ~ g3@2 g3 [g3,c4,e4]@2, [g3,c4,e4]@3 [c4,e4]@3 ~@2, ~ c3@3", // C
  AN: "g3 ~@6 g3, e2@2 g3 e4, [b3,e4,g4]@3 [b3,g4]@5, e3 e3@3, ~ g3@2 e4@2 e2@3", // Em
  AO: "g3@2 g3 g3@2 ~ c3@2, c3@3 ~, [a#3,c4,e4]@3 [a#3,c4,e4]@5, ~@5 g3@3", // C7
  AP: "a3 ~@2 a3 ~@2 [a3,c4,f4]@2, f4@4 a3 f2@3, f2@3 c4@3 ~@2, c4 f3@3, f3 a3@2 a4@5", // F
  AQ: "[a3,c4,g4]@3 [a3,d4,f#4]@5, d3", AR: "[f3,a3,c4,f4]@3 [f3,a3,c4,f4]@3 [a#2,a#3,f4,a#4,d5]@2, f2@3 ~",
  AS: "[[c3,c4,g4,c5,e5]@31 ~]/2", // C
})).s("gm_piano").gain(0.46)

// chords · pad warm
const pad_warm = note("<~@12 A B@3 C@6 D E@5 F G@2 H I@3 J K ~@12 A B@3 C@6 D L@4 H M@3 H I@3 J K ~@9>".pickRestart({
  A: "[a3,d4,f#4]", B: "[[b3,g4]@16 c#4@16 [d4,f#4]@15 ~, e4@2 ~, ~ a3@2]/3",
  C: "[[a3,d4,f#4]@15 ~@17 c#4@16 ~@32 g4@16, ~@15 [b3,g4]@16 ~ a3@32 b3@32, ~@16 e4@32 d4@47 ~, ~@3 f#4@2 ~]/6", // D Em
  D: "[e4,a4], c#4@7 ~", // A5
  E: "[a3@15 ~@17 g4@16 [a3,c#4]@15 [a3,d4,f#4]@16 ~, [d4,f#4]@32 e4@31 ~@17, ~@16 b3@31 ~@33]/5", // A D
  F: "[d4,f#4]@3 g4@3 [g3,c4,e4]@10, a3@5 ~@11", // D C
  G: "[f#4@11 ~ f#4@3 ~ f#4@4 g4@2 [g3,e4]@10, [a3,d4]@15 a3@6 ~@11, ~ c4]/2", H: "[g3,b3,d4]@3 [c#4,e4]@5, ~@3 a3@4 ~",
  I: "[[b3,d4,g4]@6 [c#4,e4,a4]@9 ~ [g4,b4]@6 [e4,a4,c#5]@9 ~ [f#4,a4]@5 ~ b4@8 ~@2, ~@15 d4@5 ~@11 d5@6 [f#4,d5]@8 ~@3]/3", // G A G A F#m D
  J: "[g3,b3,d4]@3 [a3,c#4,e4]@4 ~", K: "[d4,g4,b4]@3 [f4,a4,c5]@5",
  L: "[a3@15 ~@17 g4@16 [a3,c#4]@15 ~, [d4,f#4]@32 e4@31 ~, ~@16 b3@31 ~@17]/4", // A D
  M: "[[b3,d4,g4]@6 [c#4,e4,a4]@9 ~ [g4,b4]@6 [e4,a4,c#5]@9 ~ [f#4,a4]@5 ~ b4@9 ~, ~@15 d4@5 ~@11 d5@6 [f#4,d5]@9 ~@2]/3", // G A G A F#m D
})).s("gm_pad_warm").gain(0.17)

// other · overdriven guitar
const overdriven_guitar = note(`<
  ~@37 A B C D E F G H I J K L ~@11 M N O P Q@2 ~@2 R@2 ~@2 S T U V W X Y Z AA@2 ~
>`.pickRestart({
  A: "~@6 c4@3 d4@3 g4@2 e4@2", B: "g4@6 g4 ~@7 g4 a4", C: "a#4@6 a#4@2 a#4 ~ d5@4 a#4@2",
  D: "a#4@2 a4@2 f4@3 ~ a3@4 c4@2 ~@2", E: "d4@5 ~ d4@2 f4@2 e4@2 d4@2 c4@2", F: "c4@2 b3@2 g4@10 d5 e5",
  G: "f5@6 a5@5 ~ g5@2 f5@2", H: "f5 e5 c5 g4 e4@6 e4 a4 e5@2 d5 c5", I: "a4@9 a4 b4 c5 d5 e5 d5 ~", J: "e5@3 d5@5",
  K: "d5@4 c5@7 ~ d5@4", L: "e5@3 ~", M: "f#3@2 f#4@3 f#4 e4 d4 e4 d4 b3 a3 b3 a3 f#3 e3", N: "[b2,f#3]", O: "[e3,b3]",
  P: "[a2,e3]", Q: "[~ d3, a3@31 ~, d3 ~, ~@14 a2@17 ~]/2", R: "[~ d3, a3@31 ~, ~@14 a2@17 ~]/2", S: "~@3 [a2,e3]@5",
  T: "~@3 [d5,f5]@5, [g2,d3]@15 ~", U: "~@9 d4@3 g4@2 e4@2", V: "g4@7 ~", W: "c5@6 e5@5 ~ d5@4", X: "a4@4 f5 e5 d5 c5",
  Y: "e5@6 d5@9 ~", Z: "d5@3 c5@3 d5@2", AA: "[e5@31 ~]/2",
})).s("gm_overdriven_guitar").gain(0.29)

// other · overdriven guitar · soft notes
const overdriven_guitar_soft = note("<~@48 A ~ B C ~@2 B C ~@16 D ~ E ~@8>".pickRestart({
  A: "~@12 d5 ~@3", B: "~@4 g3 a3 g3 f#3", C: "e3", D: "[g2,d3]@3 ~@5", E: "[c5,e5]@5 ~@3",
})).s("gm_overdriven_guitar").gain(0.18)

// other · overdriven guitar
const overdriven_guitar_2 = note("<~@37 A B C D E F G H I J@3 ~@25 K L M@2 N O@4>".pickRestart({
  A: "~@8 c4@3 d4@3 g4@2", B: "e4@2 g4@6 g4 ~@7", C: "g4 a4 a#4@6 a#4@2 a#4 ~ d5@4",
  D: "a#4@2 a#4@2 a4@2 f4@3 ~ a3@4 c4@2", E: "~@2 d4@5 ~ d4@2 f4@2 e4@2 d4@2", F: "c4!2 b3 g4@5",
  G: "d5 e5 f5@6 a5@5 ~ g5@2", H: "f5@2 f5 e5 c5 g4 e4@6 e4 a4 e5@2", I: "d5 c5 a4@9 a4 b4 c5 d5 e5",
  J: "[d5 ~ e5@6 d5@10 d5@4 c5@7 ~ d5@4 e5@12 d5 ~]/3", K: "~@6 d4 g4", L: "e4 g4@7",
  M: "[~@2 c5@6 e5@5 ~ d5@4 a4@8 f5@2 e5@2 d5@2]/2", N: "c5 e5@3 d5@4", O: "[~@2 d5@6 c5@6 d5@4 e5@31 ~@15]/4",
})).s("gm_overdriven_guitar").gain(0.19)

// other · piano
const piano_2 = note(`<
  ~@27
  [~ e4 ~@5 e4 ~@8]
  [~ e4 ~@3 e4 ~@3 e4!2 ~@2 e4!2 ~]
  [~ e4!2 ~@2 e4!2 ~@2 e4!2 ~@2 e4!2 ~]
  [~ e4!2 ~@2 e4!2 ~@3 e4 ~@3 e4 ~]
  ~@52
>`).s("gm_piano").gain(0.31)

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

// drums · kick · soft notes
const kick_soft = s("bd").struct(`<
  ~@2 A ~@28 B@2 C@2 B D E A@2 ~ E A@2 F E G A ~@16 B@2 C@2 B@2 C@2 B D ~@9
>`.pickRestart({
  A: "~@7 x", B: "~ x ~@6", C: "~ x ~ x ~@3 x", D: "~ x ~ x ~@4", E: "~@3 x ~@3 x", F: "~@3 x ~@4", G: "~@5 x ~ x",
})).gain(0.3)

// drums · rim
const rim = s("rim").struct("<~@12 A B A B A B A B ~@7 A B A B ~@18 A B A B A B A B ~@26>".pickRestart({
  A: "x!2 ~@2", B: "~ x ~@2",
})).gain(0.24)

// drums · rim · soft notes
const rim_soft = s("rim").struct("<~@13 A ~ A ~ A ~ A ~@8 A ~ A ~@19 A ~ A ~ A ~ A ~@26>".pickRestart({
  A: "x",
})).gain(0.18)

// drums · snare
const snare = s("sd").struct("<A@8 B@3 ~ A@8 B@7 A@3 C B@5 D B@11 ~ A@8 B@16 D A@6 ~@3>".pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~@3 x!5", D: "~@2 x ~@3 x!2",
})).gain(0.54)

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

// drums · low tom
const low_tom = s("lt").struct("<~@26 A ~@3 B ~@32 A ~@15 A ~@3>".pickRestart({
  A: "~@7 x", B: "~@3 x!5",
})).gain(0.3)

// drums · open hat
const open_hat = s("oh").struct("<A@8 ~@12 B ~@8 C ~@6 D ~@10 B ~@9 B ~@15 D A@5 E ~@3>".pickRestart({
  A: "~@3 x ~@4", B: "~@3 x", C: "~@7 x", D: "~@6 x!2", E: "~@3 x ~@2 x ~",
})).gain(0.24)

// … 12 more lines

More by Queen