Strudelify

So What

Metallica

KeyD majorTempo120 bpm
0:00/0:00
// So What — Metallica
// 120 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 3 "Track 3" electric guitar jazz (copy of ch 1 "Track 1" fretless bass)
// note: Full arrangement: all 47 bars on a 32-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · "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 · "Track 1"
const bass = note(`<
  A B C D E F G@2 H I@3 J C D E F G@2 H I@3 J C D E F G@2 H I@3 J C D E F G@2 H I@3 J ~
>`.pickRestart({
  A: "~ g2@4 a2@2 ~ a2@2 a2 ~ a2@3 g2@3 a2@2 ~@2 a2 ~ a2 a2@4 g2@3",
  B: "a2@3 g2@3 a2@3 g2@4 a2@2 ~ a2 ~ a2@4 ~@3 d3@2 ~@2 d3@2 ~",
  C: "d3@2 ~@2 d3@2 ~ d3@2 ~ d3@2 ~@2 d3@2 ~ d3@2 ~@2 d3@2 ~ d3@2 ~@2 d3@2 ~ d3",
  D: "~ d3@2 ~@2 g2@4 a2@2 a2 ~@2 a2 a2@4 g2@3 a2@2 ~ a2 ~ a2 ~ a2@3",
  E: "~ g2@3 a2@4 g2@3 a2@4 g2@3 a2@2 ~@2 a2 ~ a2 ~ a2@3 ~@3",
  F: "d3@2 ~@2 d3@2 ~ d3@2 ~@2 d3@2 ~ d3@2 ~@2 d3@2 ~ d3@2 ~@2 d3@2 ~ d3@2 ~@2",
  G: "[d3@2 ~ d3@2 ~ d3@2 ~@2 d3@2 ~ g2@3 ~ a2@2 ~ a2 ~ a2 ~ a2@4 g2@3 a2@2 ~ a2 ~ a2 ~ a2@4 g2@3 a2@4 g2@4 a2@4 ~@3 a2@2 ~ a2, ~@57 g2@5 ~@2]/2",
  H: "~@2 a2 a2@5 ~ f2@3 ~ f2@2 ~ f2@2 ~ f2 ~ f2@3 a#2@3 ~ a#2 ~@2 a#2",
  I: "[~ a#2@2 ~ g2@3 a2@2 ~@2 a2 ~ a2 ~ a2@3 g2@4 a2@2 ~@2 a2 ~ a2 ~ a2@5 ~ f2@3 ~ f2@2 ~ f2 ~@2 f2 ~ f2@2 ~ a#2@3 ~ a#2 ~@2 a#2 ~ a#2@3 g2@4 a2@2 ~ a2 ~ a2 ~@2 a2@3 g2@4 a2@2 ~ a2 ~@2 a2 a2@4 g2@3]/3",
  J: "~ a2@4 g2@4 a2@4 g2@3 ~ a2@2 ~ a2 ~ a2 ~ a2@2 ~@6",
})).s("gm_fretless_bass").gain(0.41)

// drums · kick
const kick = s("bd").struct(`<
  ~ A B C D E F G H I J K L B C D E F G H I J K L B C D E F G H I J K L B C D E F G H I J K L ~
>`.pickRestart({
  A: "~ x ~@6 x ~@21 x ~", B: "~@4 x ~@6 x ~@5 x ~@6 x ~@6 x", C: "~@5 x ~@6 x ~@6 x ~@6 x ~@5",
  D: "~ x ~@5 x ~@6 x ~@4 x ~@12", E: "x ~@6 x ~@6 x ~@6 x ~@6 x ~@3", F: "~@3 x ~@6 x ~@6 x ~@6 x ~@6 x",
  G: "~@6 x ~@6 x ~@5 x ~@2 x ~@2 x ~@3 x ~@2", H: "x ~@2 x ~@6 x ~@4 x ~@2 x ~@3 x ~@3 x ~@3 x ~",
  I: "~ x ~@6 x ~@4 x ~@3 x ~@2 x ~@3 x ~@2 x ~@3 x", J: "~@5 x ~@4 x ~@2 x ~@4 x ~@3 x ~@3 x ~@3 x ~",
  K: "~@2 x ~@6 x ~@4 x ~", L: "~@3 x ~@6 x ~@21",
})).gain(0.41)

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

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

// drums · crash
const crash = s("cr").struct(`<
  ~ A ~ B ~@2 C D ~ E ~ F G ~ B ~@2 C D ~ E ~ F G ~ B ~@2 C D ~ E ~ F G ~ B ~@2 C D ~ E ~ F G ~
>`.pickRestart({
  A: "~@13 x ~@2", B: "~ x ~@3 x ~@2", C: "~@9 x ~@5 x", D: "~@12 x ~@7 x ~@6 x ~@4", E: "~@4 x ~@6 x ~@4",
  F: "~@3 x ~@14 x ~@12 x", G: "~@8 x ~@8 x ~@7 x ~@6",
})).gain(0.41)

stack(bass, kick, snare, open_hat, crash)

More by Metallica