Strudelify

Ronnie

Metallica

KeyA majorTempo92 bpm
0:00/0:00
// Ronnie — Metallica
// 92 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 111 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(92/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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.

// other · distortion guitar · "Guitar 1"
const distortion_guitar = note(`<
  A B@2 C A B@2 C A B@2 C A B@2 C D E@2 F G H G I D J G H G I K L A B@2 C A B@2 C M D E@2 F G H G I D J G H G I K L A
  B@2 C A B@2 C M N@2 O ~ P@4 Q@3 R S T U V A B@2 C A B@2 C M W D E@2 F D E@2 F X T Y Z X AA AB AC AD@2 AE
>`.pickRestart({
  A: "g#3@2 [g4,a4] ~ g#4@2 g#3@2 [g4,a4] ~ g#4@2 g#3@2 b4@2", // Gsus2
  B: "[g#3@2 [g4,a4] ~ g#4@2 g#3@2 [g4,a4] ~ g#4@2 g#3@2 g#4@4 [g4,a4] ~ g#4@2 g#3@2 [g4,a4] ~ g#4@2 g#3@2 b4@2]/2", // Gsus2
  C: "g#3@2 f#5@3 ~ f#5 ~ f#5 b4 g#4@2 b4@2 c#5@2", D: "g#3@2 g#4@2 g#3@2 g#4@2 g#3@2 g#4@2 b3@2 c#4 d#4",
  E: "b3 g#3 g#4@2 g#3@2 g#4@2 g#3@2 g#4@2 b3@2 c#4 d#4",
  F: "[b3,f#4,b4]@3 ~ [a#3,f4,a#4]@3 d#3 [e3,b3,e4]@2 [f#3,c#4,f#4]@2 [f#3,c#4,f#4]!2 [c#4,g#4,c#5]@2", // B5 A#5 E5 F#5 C#5
  G: "d#4@2 [d#4,d#5] [c#4,c#5] [d#4,d#5]@2 d#3@2 [c#4,c#5] [d#4,d#5] [d#4,d#5]@2 [d#4,d#5] [c#4,c#5] [f#4,f#5]@2", // D# C# D# C# D# C# F#
  H: "d#3@2 [d#4,d#5] [c#4,c#5] [d#4,d#5]@2 d#3@2 [c#4,c#5] [d#4,d#5] [c#4,g#4]@2 [c#4,g#4]@2 d#4 f#4", // D# C# D# C# D# C#5
  I: "d#3@2 [d#4,d#5] [c#4,c#5] [d#4,d#5]!3 [c#4,c#5] [d#4,d#5] [f#4,f#5] [d#4,d#5]@2 [d#4,d#5] [f#4,f#5] [c#4,c#5]@2", // D# C# D# C# D# F# D# F# …
  J: "g#3 g#4 g#3 g#4 g#3 b4 g#3 c#5",
  K: "[c#4,g#4,c#5]@3 [c#4,g#4,c#5] c#4!2 [c#4,f#4,b4]@2 c#4!2 [c#4,f#4,b4]@2 [c#4,g#4,c#5]@2 [c#4,g#4,c#5]@2", // C#5 F#sus4 C#5
  L: "[c#4,g#4,c#5]@2 [c#4,g#4,c#5]!2 c#4!2 [c#4,g#4,c#5]!3 [b3,f#4,b4]!3 [b3,f#4,b4]@2 [a#3,f4,a#4]@2", // C#5 B5 A#5
  M: "c#5@3 ~ c#5@3 ~ d#5 [b4,c#5] g#4@2 b4@2 c#5@2", N: "[g#3@31 ~]/2", O: "a#4@2 g#4@13 ~",
  P: "[g#3@2 f#4 ~ g#4@4 ~@2 g#4 ~ g#4!2 [b4,d#5]@4 f#4 ~ g#4@4 g#4 ~ g#4!2 b4 c#5 c5@4 f#4 ~ g#4@4 g#4 ~ g#4 ~ g#4!2 b4@4 f#4!7 d#4 f#4@2 f#4 g#4 f#4@2]/4", // B
  Q: "[g#3@2 f#4 ~ g#4@4 g#4 ~ g#4!2 ~ g#4 [b4,d#5]@4 f#4 ~ g#4@2 ~@2 c#5@2 f#5 c#5@2 f#5 b4@4 f#4 ~ g#4@4 g#4 ~ g#4 ~ g#4!2 [b4,d#5]@2]/3", // B
  R: "~@2 [f#4,f#5] [g#4,g#5] [f#4,f#5]@2 [f#4,f#5] [g#4,g#5] [f#4,f#5]@2 [f#4,f#5] [g#4,g#5] [f#4,f#5] [g#4,g#5] [f#4,f#5]@2", // F# G# F# G# F# G# F# G# …
  S: "g#3!2 g#4 f#4 g#4@2 g#3!2 f#4 g#4 g#3!2 f#4 g#4 b4@2", T: "~ g#3 g#4 f#4 g#4@2 g#3!2 b4@2 c#5 b4@2 c#5 c5@2",
  U: "~ g#3 g#4 f#4 g#4@2 g#3!2 f#4 g#4!3 f#4 g#4 b4 c#5", V: "c#5@2 c#5@2 c#5@2 c#5@2 c#5!8", W: "[g#3,g#4]@15 ~",
  X: "g#3@2 g#4 f#4 g#4@2 g#3!2 f#4 g#4 g#3!2 f#4 g#4 b4@2", Y: "~ g#3 g#4 f#4 g#4@2 g#3!2 f#4 g#4!3 f#4 g#4 b4!2",
  Z: "c#5@3 ~ c#5@3 b4 [c#5,g5] ~ b4@4 g#4@2", AA: "~ g#3 g#4 f#4 g#4@2 g#3!2 [b4,d#5]@2 g#4 [b4,d#5]@2 g#4 g#4@2",
  AB: "~ g#3 g#4 g4 g#4@2 g#3!2 g4 g#4!3 g4 g#4 b4 c#5",
  AC: "c#5@3 ~ d#5 c#5 ~ b4 [c#5,f#5] ~ [b4,f#5]@2 [b4,f#5]!2 [c#5,f#5] ~", // F#5 B5 F#5
  AD: "[c#5@3 ~ c#5@3 b4 [c#5,f5] ~ c#5@4 a#4@17 [g#4,a#4]]/2", AE: "g#4@7 ~@9",
})).s("gm_distortion_guitar").gain(0.11).pan(0)

// other · distortion guitar · "Guitar 2"
const distortion_guitar_2 = note(`<
  ~ A@2 B ~ A@2 B ~ A@2 B ~ A@2 B ~@17 A@2 B ~ A@2 B C ~@8 D@2 E F G H ~@3 A@2 B ~ A@2 B C I J ~@13 K ~ A@2 B ~ A@2 B C
  ~@12 L ~@3 L M ~@2
>`.pickRestart({
  A: "[~@7 c5@2 ~@7]/2", B: "~@2 c#5@3 ~ c#5 ~ c#5 ~@7", C: "f#5@3 ~ f#5@3 ~ f#5 ~@7",
  D: "[f#5@4 b5 ~ b5@3 f#5@2 d#5 f#5 d#5 b4 b4@3 g#4 f#4 [b4,d#5] [c#5,f5] [c#5,f5]@2 [c#5,f5] [b4,d#5] [c#5,f5]@2 [c#5,f5]@2 b4 c#5]/2", // B C# B C#
  E: "d#5@15 ~", F: "~@4 d#5 c#5 a#4 [c#5,f5] ~ [c#5,f5] c#5 d#5 f#5 g#5 g#5@2", G: "~ f#5 d#5@8 ~@2 d#5 f#5 g#5!2",
  H: "g#5@2 f#5 g#5 g#5@2 f#5 g#5 g#5@2 f#5 g#5 g#5@2 f#5 g#5", I: "g#4@15 [f#4,g#4]", J: "f#4@15 ~",
  K: "f#5@2 f#5@2 f#5@2 f#5@2 f#5!8", L: "f#5@3 ~ f#5@4 ~@8", M: "g5@3 ~ g5@4 ~@8",
})).s("gm_distortion_guitar").gain(0.11).pan(0)

// chords · distortion guitar · "Guitar 3"
const distortion_guitar_3 = note(`<
  ~@8 A B@2 C A B@2 C D E@2 F G H G I D J G H G I K L A B@2 C A B@2 C ~ D E@2 F G H G I D J G H G I K L A B@2 C A B@2 C
  ~@4 M ~@8 N@3 O A B@2 C A B@2 C ~@2 D E@2 F D E@2 F D E@2 F D E@2 P Q@2 ~
>`.pickRestart({
  A: "g#3@2 f#4 ~ g#4@2 g#3@2 f#4 ~ g#4@2 g#3@2 b4@2",
  B: "[g#3@2 f#4 ~ g#4@2 g#3@2 f#4 ~ g#4@2 g#3@2 g#4@4 f#4 ~ g#4@2 g#3@2 f#4 ~ g#4@2 g#3@2 b4@2]/2",
  C: "g#3@2 f#5@3 ~ f#5 ~ f#5 b4 g#4@2 b4@2 c#5@2", D: "g#3@2 g#4@2 g#3@2 g#4@2 g#3@2 g#4@2 b3@2 c#4 d#4",
  E: "b3 g#3 g#4@2 g#3@2 g#4@2 g#3@2 g#4@2 b3@2 c#4 d#4",
  F: "[b3,f#4,b4]@3 ~ [a#3,f4,a#4]@3 d#3 [e3,b3,e4]@2 [f#3,c#4,f#4]@2 [f#3,c#4,f#4]!2 [c#4,g#4,c#5]@2", // B5 A#5 E5 F#5 C#5
  G: "d#4@3 [d#4,a#4]!3 [d#4,g#4]@2 [d#4,g#4]!2 [d#4,g#4]@2 [d#4,a#4]@3 ~", // D#5 G#5 D#5
  H: "d#4@3 [d#4,a#4]!3 [d#4,g#4] [d#4,a#4]!2 ~ [c#4,g#4]@2 [c#4,g#4]@2 d#4 f#4", // D#5 G#5 D#5 C#5
  I: "d#4@3 [d#4,a#4]!3 [d#4,g#4] [d#4,a#4]!3 [c#4,g#4]@2 [c#4,g#4]@2 [b3,f#4]@2", J: "g#3 g#4 g#3 g#4 g#3 f#4 g#3 f4",
  K: "[c#4,g#4,c#5]@3 [c#4,g#4,c#5] c#4!2 [c#4,f#4,b4]@2 c#4!2 [c#4,f#4,b4]@2 [c#4,g#4,c#5]@2 [c#4,g#4,c#5]@2", // C#5 F#sus4 C#5
  L: "[c#4,g#4,c#5]@2 [c#4,g#4,c#5]!2 c#4!2 [c#4,g#4,c#5]!3 [b3,f#4,b4]!3 [b3,f#4,b4]@2 [a#3,f4,a#4]@2", // C#5 B5 A#5
  M: "~@2 g#5 b5 g#5@7 ~@5", N: "~@2 g#4 f#4 g#4@4 ~@8", O: "c#5@2 c#5@2 c#5@2 c#5@2 c#5@2 c#5@2 c#5 b4 g#4@2",
  P: "[b3,f#4,b4]@3 ~ [a#3,f4,a#4]@3 d#3 [e3,b3,e4]@2 [f#3,c#4,f#4]@2 ~@2 [b3,f#4,b4]@2", Q: "[[c#4,g#4,c#5]@31 ~]/2",
})).s("gm_distortion_guitar").gain(0.11).pan(1)

// other · distortion guitar · "Guitar 4"
const distortion_guitar_4 = note(`<
  ~@9 A@2 B ~ A@2 B ~@17 A@2 B ~ A@2 B ~@18 A@2 B ~ A@2 B ~@16 C ~ A@2 B ~ A@2 B ~@4 D E D F D G H@3 I J K L M N@2 ~
>`.pickRestart({
  A: "[~@7 c5@2 ~@7]/2", B: "~@2 c#5@3 ~ c#5 ~ c#5 ~@7", C: "f#5!6 ~@2",
  D: "g#4@2 g#5@3 f#5@3 b4 c#5@2 d#5 c#5 b4 g#4 f#4", E: "g#4@15 ~",
  F: "g#4@2 g#5@3 f#5@3 b4 c#5 d#5 b4 c#5 d#5 c#5 d#5", G: "b4 c#5@9 ~@6",
  H: "[g#5@2 [f#5,b5] ~ [f#5,b5]@2 g#5 f#5 g#5@2 b5 c#6!2 b5 g#5@4 [f#5,b5] ~ [f#5,b5]@2 g#5 f#5 g#5 b5 c#6 c#6@2 b5 c#6@4 g#5 ~ b5@2 g#5 ~ f#5 f5 d#5 ~ c#5 b4 c#5 b4]/3", // B5
  I: "c#5@4 c#5@3 ~@9", J: "~@2 [f#5,b5] f5 d#5 c#5 b4 g#4 [c#5,f5] b4 g#4 f#4!2 g#4 [b4,d#5]@2",
  K: "~@2 [f#5,b5] f5 d#5 c#5 b4 g#4 [c#5,f5] b4 g#4 f#4 b4 ~ b4@2", L: "~@2 b4!3 g#4 b4!3 g#4 b4 c#5 c#5@2 b4 c#5",
  M: "c#5@3 ~ d#5 c#5 ~ b4 [c#5,f#5] ~ [b4,f#5]@2 [b4,f#5]!2 [c#5,f#5] ~", N: "[[c#5,f5]@31 ~]/2",
})).s("gm_distortion_guitar").gain(0.22)

// bass · electric bass finger · "Bass"
const bass = note(`<
  ~@8 A B A C A B A C D E@2 F G H G I D@2 G H G I J K A B A C A B A C ~ D E@2 F G H G I D@2 G H G I J K A B A C A B A C
  ~ L@16 A B A C A B A C ~@2 D E@2 F D E@2 F D E@2 F D E@2 M N@2 ~
>`.pickRestart({
  A: "g#1!7 b1", B: "g#1!8", C: "g#1@2 d#1@2 d#1@2 d#1@2 d#2 [b1,c#2] g#1@2 b1@2 c#2@2",
  D: "g#1@2 g#1@2 g#1@2 g#1@2 g#1@2 g#1@2 b1@2 c#2 d#2", E: "b1 g#1 g#1@2 g#1@2 g#1@2 g#1@2 g#1@2 b1@2 c#2 d#2",
  F: "b1@3 ~ a#1@3 d#1 e1@2 f#1@2 f#1!2 c#2@2", G: "c#2 d#2!2 c#2 d#2@2 d#2 d#1 c#2 d#2 d#2@2 d#2 c#2 f#2@2",
  H: "d#1 d#2!2 c#2 d#2@2 d#2 d#1 c#2 d#2 c#2@2 c#2@2 d#2 f#2", I: "d#1 d#2!2 c#2 d#2!3 c#2 d#2 f#2 d#2!3 f#2 c#2!2",
  J: "c#2@3 c#2 b1 c#2!3 b1 c#2!3 b1 c#2!3", K: "c#2@2 c#2!7 b1!5 a#1!2", L: "g#1@2 g#1!6 g#1@2 g#1!6",
  M: "b1@3 ~ a#1@3 d#1 e1@2 f#1@2 ~@2 b1@2", N: "[c#2@31 ~]/2",
})).s("gm_electric_bass_finger").gain(0.72)

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

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

// drums · low tom
const low_tom = s("lt").struct("<~@40 A ~@26 B ~ C ~ D@2 ~@2 E ~ F ~@33>".pickRestart({
  A: "~@4 x!2 ~@2", B: "~@2 x!2", C: "~@5 x ~@3 x ~@3 x ~@2", D: "~@2 x!2 ~@12", E: "~@2 x!2 ~@4 x ~@3 x ~@3",
  F: "~@4 x!2 ~@10",
})).gain(0.72)

// drums · hihat
const hihat = s("hh").struct("<~@91 [x!4] ~@19>").gain(0.72)

// drums · mid tom
const mid_tom = s("mt").struct("<~@75 [~ x ~@14] ~@35>").gain(0.72)

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

// drums · crash
const crash = s("cr").struct(`<
  ~@8 A ~@3 A ~@8 B ~@5 B ~ B A ~ A ~@3 A ~@9 B ~@5 B ~@2 A ~ A ~@3 A ~@8 C ~@2 D C ~ C ~ C D E F A ~@3 A ~@20 G A ~@2
>`.pickRestart({
  A: "x", B: "~@5 x ~ x", C: "~ x ~@2", D: "~ x ~ x", E: "~@2 x!2 ~@2 x!2", F: "~@5 x ~@2", G: "x!2 ~@2",
})).gain(0.72)

// drums · tambourine
const tambourine = s("tb").struct("<~@68 [~ x ~@2] ~@42>").gain(0.72)

stack(
  distortion_guitar, distortion_guitar_2, distortion_guitar_3, distortion_guitar_4, bass, kick, snare, low_tom, hihat,
  mid_tom, open_hat, crash, tambourine
)

More by Metallica