Strudelify

Trapped Under Ice

Metallica

KeyG majorTempo162 bpm
0:00/0:00
// Trapped Under Ice — Metallica
// 162 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 6 distortion guitar (copy of ch 2 distortion guitar)
// note: Full arrangement: all 161 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): guitar program 30.
setcpm(162/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.

// chords · distortion guitar
const distortion_guitar = note(`<
  A@2 B@2 C D C D C D C D C D C D C D C D E F E F E F E G E F E F E F E F H I H J K L H M E F E F E F E F E F E F E F E
  F H I H J K L H M N O P Q R S T Q R S T U V W X U V W X U V W X U V W X Q R S T Q R S T Q R S T Q R S T@2 Y@2 Z R E F
  E F E F E F E F E F E F E F H I H J K L H M H I H J K L H AA@3 N AB E F E F E F E G ~
>`.pickRestart({
  A: "[e2 ~ e2 [d3,a3,d4]@3 [e3,b3,e4]@26]/2", B: "[e2 ~ e2 d3@3 [a2,e3,a3,c#4,e4]@18 b2!4 [b2,f#3,b3]@2 ~@2]/2",
  C: "e2 ~ e2 [d3,a3,d4]@3 [e3,b3,e4]@10", // D5 E5
  D: "e2 ~ e2 [d3,a3,d4]@3 [e3,b3,e4]@2 [d3,a3,d4]@2 [f3,c4,f4] ~ [f3,c4,f4]@4", E: "e2 f#2!7 e2 f#2!7",
  F: "e2 f#2!7 [c3,g3]@2 [b2,f#3]@2 [a2,e3]@2 [b2,f#3]@2", G: "e2 f#2!7 [b2,f#3,b3]!4 [b2,f#3,b3]@2 ~@2",
  H: "[g#2,d#3,g#3]@2 [a2,e3,a3] [a2,e3,a3]@13", I: "[g#2,d#3,g#3]@2 [a2,e3,a3]!2 [a2,e3,a3]@2 e2@2 [e2,e3,b3,e4]@8",
  J: "[g#2,d#3,g#3]@2 [a2,e3,a3]!2 [a2,e3,a3]@2 e2@2 e2@2 [a2,e3,a3]@2 [a2,e3,a3]@2 e2@2", // G#5 A5
  K: "[f#2,c#3,f#3]@2 [g2,d3,g3] [g2,d3,g3]@13", // F#5 G5
  L: "[f#2,c#3,f#3]@2 [g2,d3,g3]!2 [g2,d3,g3]@2 e2@2 e2@2 [g2,d3,g3]@2 [g2,d3,g3]@2 e2@2", // F#5 G5
  M: "[a2,e3,a3]@2 [a#2,f3,a#3] [a#2,f3,a#3]@3 [a2,e3,a3]@2 [a2,e3,a3]@2 ~@6", // A5 A#5 A5
  N: "[a2,e3,a3]@2 [a#2,f3,a#3] [a#2,f3,a#3]@3 [a2,e3,a3]@2 [a#2,f3,a#3] ~ [a#2,f3,a#3]@6", // A5 A#5 A5 A#5
  O: "[g2,d3,g3] ~ [g2,d3,g3]@6 [a2,e3,a3] ~ [a2,e3,a3]@4 [e2,b2,e3]@2", P: "[f2,c3,f3] f2!7",
  Q: "e2@2 e2!2 e2@2 [g3,d4,g4]@6 [g3,d4,g4]@2 e2@2", R: "c3 b2 a2 g#2 f3 e3 c3 b2",
  S: "e2@2 e2!2 e2@2 [e3,b3,e4]@4 e2@2 [d3,a3,d4]@4", T: "a#2@2 a#2!2 a#2@2 a#2!2 a#2@2 a#2!2 a#2@2 a#2!2",
  U: "[e3,b3,e4] ~@2 [e3,b3,e4] ~@2 [e3,b3,e4]@10", V: "[d3,a3,d4] ~@2 [d3,a3,d4] ~@2 [d3,a3,d4]@10",
  W: "[c3,g3,c4] ~@2 [c3,g3,c4] ~@2 [b2,f#3,b3]@6 g2@2 f#2@2", X: "[e2,b2,e3]",
  Y: "a2@2 a2!2 a2@2 a2!2 a2@2 a2!2 a2@2 a2!2", Z: "a2!16",
  AA: "[a2,e3,a3]@2 [a#2,f3,a#3] [a#2,f3,a#3]@3 [a2,e3,a3]@2 [a2,e3,a3]@2 a2!6", // A5 A#5 A5
  AB: "[g2,d3,g3] ~ [g2,d3,g3]@6 [a2,e3,a3] ~ [a2,e3,a3]@6", // G5 A5
})).s("gm_distortion_guitar").gain(0.25)

// chords · distortion guitar
const distortion_guitar_2 = note(`<
  ~@12 A B C D A B C E F G H I J K L ~@17 M@2 N O P Q R S ~@64 T U V W X Y Z AA ~@36 AB
>`.pickRestart({
  A: "b3", B: "[f#3,c4,f#4]", C: "[g3,d4,g4]", D: "[a3,a4]@2 [c4,g4,c5] [b3,f#4,b4]", E: "[a3,a4] e4",
  F: "~@4 e5 ~@2 e5 f#5 e5 ~@2 e5@2 e5 ~", G: "a5 ~@3 a5 ~ e5 c#5!3 e5 c#5 b4 a4!2 ~",
  H: "[b4,d5]@4 [b4,d5]@4 [b4,d5]@4 [b4,d5]@3 [b4,d5]", I: "c#5@2 b4 ~ e5@2 ~@2",
  J: "a#5 g#5 ~ e5 g#5 ~ e5 d5 f#5 e5 d5 c#5 e5 d5 c#5 b4", K: "d5 c#5 b4 a4 c#5 b4 a4 g#4 b4 a4 g#4 f#4 ~ g#4 ~ e4",
  L: "a4 g#4 e4 a4 g#4 e4 a4 [e4,g#4] ~ b3!2 e4 b3!2 e4 [b3,d4]", // E Bm
  M: "[b3 g3 a3 g3 a3 ~ g3 ~ g3 e3 ~ e3 ~ d3 e3 d3@5 b4@12]/2",
  N: "~ [c#5,f5] ~ [c#5,f5] e5 c#5@2 [c#5,f5] ~ c#5@2 [c#5,f5] e5 c#5@2 ~", // C#
  O: "a5 g#5 ~ e5!2 d5 c#5 b4 f#4@2 c#4@2 ~@4", P: "~@2 a3@2 b3 c#4 e4@2 f#4 e4 c#4 e4 ~ a4 b4@2", Q: "[b4,d5]!4",
  R: "~@2 a4!2 a4@2 e4 ~ a4 a4@3 e4 ~ a4@2", S: "~@2 e4 ~ a4@2 ~@2 e5@8",
  T: "b5 a5 ~ b5 a5 ~ e5 ~ b5 a5 ~ b5 a5 ~ e5 ~", U: "b5 a5 ~ b5 a5 ~ e5 ~ c#6@4 b4@2 e5 f#5",
  V: "a5 ~ e5 ~ a5 ~ e5 c#5!3 e5 c#5 b4 a4!2 ~", W: "c#5@4 [c#5,e5]@3 [c#5,e5]@5 ~@3 c#5",
  X: "~ [c#5,d5] b4 [g#4,a4] e5 [c#5,d5] b4 [g#4,a4] ~ [c#5,d5] b4 [g#4,a4] e5 [c#5,d5] b4 [g#4,a4]", // Dmaj7 Amaj7 Dmaj7 Amaj7 Dmaj7 Amaj7 Dmaj7 Amaj7
  Y: "~ [c#5,d5] g#4@2 ~ g#4 a#4 g#4 f#4 e4 c#4 b3 g#3 f#3@3", // Dmaj7
  Z: "b4!3 [g#4,b4] g#4!2 b4!2 [b4,c#5] c#5!2 [c#5,d5] d5!2 e5!2", AA: "f#5 ~@2 g#5!3 [g#5,a5] b5!3 c#5@2 ~@4",
  AB: "[f#2,c#3,f#3] ~@3", // F#5
})).s("gm_distortion_guitar").gain(0.25).pan(0.3)

// bass · electric bass finger
const bass = note(`<
  ~@3 A B C B C B C B C B C B C B C B C D E D E D E D F D E D E D E D E G H G I J K G L D E D E D E D E D E D E D E D E
  G H G I J K G L M N O P Q R S P Q R S T U V W T U V W T U V W T U V W P Q R S P Q R S P Q R S P Q R S@2 X@2 Y Q D E D
  E D E D E D E D E D E D E G H G I J K G L G H G I J K G Z@3 M AA D E D E D E D F AB
>`.pickRestart({
  A: "~@8 b1!4 b1@2 ~@2", B: "e1 ~ e1 d2@3 e2@10", C: "e1 ~ e1 d2@3 e2@2 d2@2 f2 ~ f2@4", D: "e1 f#1!7 e1 f#1!7",
  E: "e1 f#1!7 c2@2 b1@2 a1@2 b1@2", F: "e1 f#1!7 b1!4 b1@2 ~@2", G: "g#1!2 a1@2 a1@2 a1!2 a1@2 a1!2 a1@2 a1!2",
  H: "g#1!2 a1@4 e1 ~ e1@2 e1!2 e1@2 e1!2", I: "g#1@2 a1 a1@3 e1 ~ e1@2 a1@2 a1@2 e1@2",
  J: "f#1!2 g1@2 g1@2 g1!2 g1@2 g1!2 g1@2 g1!2", K: "f#1@2 g1 g1@3 e1 ~ e1@2 g1@2 g1@2 e1@2",
  L: "a1@2 a#1 a#1@3 a1@2 a1@2 ~@6", M: "a1@2 a#1 a#1@3 a1@2 a#1 ~ a#1@6", N: "g1 ~ g1@6 a1 ~ a1@4 b1@2", O: "f1!8",
  P: "e1@2 e1!2 e1@2 g2@6 g2@2 e1@2", Q: "c2 b1 a1 g#1 f2 e2 c2 b1", R: "e1@2 e1!2 e1@2 e2@4 e1@2 d2@4",
  S: "a#1@2 a#1!2 a#1@2 a#1!2 a#1@2 a#1!2 a#1@2 a#1!2", T: "e2 ~@2 e2 ~@2 e2@10", U: "d2 ~@2 d2 ~@2 d2@10",
  V: "c2 ~@2 c2 ~@2 b1@6 g1@2 f#1@2", W: "e1", X: "a1@2 a1!2 a1@2 a1!2 a1@2 a1!2 a1@2 a1!2", Y: "a1!16",
  Z: "a1@2 a#1 a#1@3 a1@2 a1@2 a1!6", AA: "g1 ~ g1@6 a1 ~ a1@6", AB: "f#1 ~@3",
})).s("gm_electric_bass_finger").gain(0.28)

// other · pan flute
const pan_flute = note("<~@87 [~@3 a5]!3 ~ [~@3 a5]!3 ~@67>").s("gm_pan_flute").gain(0.64)

// drums · kick
const kick = s("bd").struct(`<
  ~@4 A@15 B A@3 C A@3 D A@6 E ~ A@7 F A@7 E A@6 E ~ A@7 F D ~@5 G ~@3 G H I H B H I H B H I H B H I H B J H J G J H J G
  J H J G J H J G ~@4 K A@6 B ~ A@6 E ~ A@18 D L A@7 D B
>`.pickRestart({
  A: "x!16", B: "x", C: "x!9 ~ x ~ x ~ x ~", D: "x!8 ~@8", E: "x!2 ~@14", F: "x!9 ~@7", G: "x!5 ~@11", H: "x ~@4 x ~@2",
  I: "x ~@9 x!2 ~@4", J: "x ~@2 x ~ x ~@2", K: "x!8", L: "x!2 ~@2 x!2 ~@2",
})).gain(0.48)

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

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

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@34 A B ~@22 A B ~@26 C ~@7 C ~@3 D ~@3 D ~@3 D ~@3 D E F@2 ~@8 G ~@7 A B ~@18 H ~@10
>`.pickRestart({
  A: "~@10 x!6", B: "x", C: "x!3 ~@9 x!3 ~", D: "~ x", E: "x!2", F: "x!4", G: "~@12 x!4", H: "~@4 x!2 ~@2",
})).gain(0.48)

// drums · mid tom
const mid_tom = s("mt").struct("<~@35 A ~@23 A ~@8 B C D ~ E ~ F ~ E ~ F ~@7 G ~@7 G ~@28 H ~@7 A ~@29>".pickRestart({
  A: "~@2 x!7 ~ x!6", B: "~@4 x!2 ~@2", C: "x!2 ~@2 x!2 ~@2", D: "x!8", E: "~@4 x!3 ~ x!3 ~@5", F: "~ x",
  G: "~@8 x!3 ~@5", H: "~@2 x!10 ~@4",
})).gain(0.48)

// drums · high tom
const high_tom = s("ht").struct("<~@70 A ~ B ~@3 B ~@46 C ~@37>".pickRestart({
  A: "x!8", B: "~@12 x!3 ~", C: "~@12 x!4",
})).gain(0.48)

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

stack(distortion_guitar, distortion_guitar_2, bass, pan_flute, kick, snare, hihat, low_tom, mid_tom, high_tom, crash)

More by Metallica