Strudelify

Runnin' With the Devil

Van Halen

KeyA majorTempo97 bpm
0:00/0:00
// Runnin' With the Devil — Van Halen
// 97 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 4 piano (copy of ch 2 piano); ch 5 piano (copy of ch 3 piano)
// note: Full arrangement: all 90 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(97/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 · flute
const flute = note(`<
  ~@5 A B C ~@2 D E F G H I J K ~ L@3 ~ L@3 M E N O P Q R S ~ L@3 ~ L@3 ~@5 T ~ U V W N X Y Z N S ~ L@3 ~ L@3 ~@5 L@3 ~
  L@3 ~ L@3 ~ L@3 ~ L@3
>`.pickRestart({
  A: "~@10 g5@2 ~ g#5 g5@2", B: "~ g#5 g5 g#5 g5 e5@3 ~@8", C: "~@2 e6 d6 e6 ~ g#6 g6 g#6 ~@7",
  D: "~@2 c#5 ~ c#5 ~ c#5 ~ d5@3 ~ b4 ~ a4 ~", E: "~@2 g5 ~ f#5 ~ f#5 ~ e5@5 ~@3",
  F: "~@2 e4 ~ c#5 ~ c#5 ~ d5@3 ~@3 a4 ~", G: "g5 ~ f#5 ~ e5 ~ e5 f#5 e5@4 ~@4",
  H: "~@2 c#5 ~ c#5 ~ c#5 ~ d5@3 ~@3 a4 ~", I: "g5 ~ f#5 ~ e5 ~ f#5 ~ e5@5 ~@3",
  J: "~@2 c#5 ~ c#5@3 ~ d5 ~ d5 ~ b4 ~ a4 ~", K: "~@2 g5@2 ~ g5@2 ~ g5 ~ a5@4 ~@2",
  L: "[~@8 [g5,b5] ~ [g5,b5] ~ [f#5,a5] ~ [e5,g5] [f#5,a5]@2 ~ [e5,a5]@22 ~@8]/3", // G F#m Em F#m A5
  M: "~@2 c#5 ~ c#5 ~ c#5 ~ d5 ~ d5 ~ d5@3 ~", N: "~@4 c#5 ~ c#5 ~ d5 ~ d5@4 ~@2", O: "~@2 a5 ~ f#5 ~ f#5@4 ~@6",
  P: "~@2 c#5 ~ c#5 ~ c#5 ~ d5 c#5 d5 ~@3 a4 ~", Q: "g5@2 ~ f#5@2 ~ e5 ~ f#5 e5@4 ~@3",
  R: "~@2 c#5 ~ c#5 ~ c#5 ~ d5 ~ d5@4 ~@2", S: "g5 ~ g5 ~ g5 ~ g5 ~ a5@5 ~@3", T: "~@6 d6 ~ e6@5 ~@3",
  U: "~@10 e5!2 e5@3 ~", V: "~@2 a5 ~ f#5 ~ e5 ~ f#5 ~ e5 ~ e5 ~ f#5 ~", W: "~@2 c#5 ~ e5 ~ f#5 ~ e5@4 ~@2 c#5 ~",
  X: "~@2 a5 ~ f#5 ~ e5 f#5 e5@4 ~@4", Y: "~@4 c#5 ~ c#5 ~ d5@4 ~@2 a5 ~", Z: "f#5 ~ e5@3 ~ f#5 ~ g5 ~ f#5 e5@3 ~@2",
})).s("gm_flute").gain(0.41)

// chords · piano
const piano = note(`<
  ~@2 A B C B A B C D E F E G E F E H A B C B A B C D E F E I E F E H A B C B A B C D J K J L A B C D E F E M E F E H A
  B C B A B C D J K J L A B C B A B C B A B C B A B C B A B C B
>`.pickRestart({
  A: "~ [a4,d5,f#5]@4 ~@3", B: "~@2 [b4,d5,g5] ~@3 [b4,e5,g#5]@4 ~@6", C: "~@2 [a4,d5,f#5]@5 ~@7 [b3,e4,a4,d5,f#5]!2",
  D: "~@2 [b4,d5,g5] ~@3 [b4,e5,g#5]@9 ~", E: "~@8 a3 ~ [g4,b4]@4 ~@2", F: "~@8 a3 ~ [e4,g4]@4 ~@2",
  G: "~@2 [e4,g4] ~@9 [g4,g5,b5]@3 ~", H: "~@2 [e4,g4]@3 ~@9 [b3,e4] ~",
  I: "~@2 [e4,g4]@3 ~ d4 ~@2 [e5,g#5] ~ [e5,g#5] ~ [e5,g#5] ~ [e5,g#5]", J: "[a3,e4,a4]@5 ~@11", K: "~@14 e3!2",
  L: "~@8 [f#3,b3,e4]@3 ~@5", M: "g#4 ~@4 g#4 e5 ~@2 f#5 g#5 b5 ~@4",
})).s("gm_piano").gain(0.31)

// chords · piano
const piano_2 = note(`<
  ~ A B C D C B C D E F G H I H G H J B C D C B C D E F G H K H G H J B C D C B C D E ~ L ~ M B C D E F G H N H G H J B
  C D C B C D E ~ L ~ M B C D C B C D C B C D C B C D C B C D C
>`.pickRestart({
  A: "~@12 a4@3 ~", B: "[g4,c5,e5] ~@13 [b3,e4,a4,d5,f#5]!2", C: "[a4,d5,f#5] ~@3 [c#5,e5,a5] ~@7 b4@3 ~",
  D: "[g4,c5,e5] ~@10 [a4,d5,f#5]!2 ~@3", E: "[a4,d5,f#5] ~@3 [c#5,e5,a5] ~@11", F: "[a3,e4,a4] ~ g3 ~ a3 ~@11",
  G: "a3 ~ [f#4,a4]@4 ~@10", H: "[a3,e4,a4] ~ g3 ~ [a3,e4] ~@11", I: "[f#4,a4] ~@3 g4 ~ b4 e5 ~ f#5 b5 ~@5",
  J: "[f#4,a4] ~@5 d4 ~ [e3,b3,e4,g4,b4,e5]@4 ~@4", K: "[f#4,a4] ~@7 [d5,f#5] ~ [d5,f#5] ~ [d5,f#5] ~ [d5,f#5] ~",
  L: "[d4,g4,d5,g5] ~", M: "[d4,g4,d5,g5]@5 ~@7 a6@3 ~", N: "~@2 [e4,g#4]@2 ~@3 d4 d5 ~@3 e6@3 ~",
})).s("gm_piano").gain(0.31)

// other · piano
const piano_3 = note("<~@41 A B C D E ~@19 A B C D E ~@20>".pickRestart({
  A: "~@13 a4 e5 a5", B: "c#6 d6 e6 d6!2 c#6 a5 e5 c#6 a5 e5@2 ~ g#4 d5 g5",
  C: "b5 c6 d6 c6!2 b5 g5 d5 b5 g5 d5@2 ~ a4 e5 a5", D: "c#6 d6 e6 d6!2 c#6 a6@2 ~ g6 a6 f#6 a6 g#4 d5 g5",
  E: "b5 c6 d6 c6 d6 ~ d#6 ~ [d6,g6]@5 ~@3", // G5
})).s("gm_piano").gain(0.41)

// bass · piano
const bass = note(`<
  A B A@3 B A@3 C D@3 E D@3 F A@3 B A@3 C D@3 F D@3 F A@3 B A@3 C G H I J A@3 C D@3 F D@3 F A@3 B A@3 C G H I J A@19 K
>`.pickRestart({
  A: "e1@3 ~ e1@3 ~ e1@3 ~ e1@3 ~", B: "e1@3 ~ e1@3 ~ e1@3 ~ e2@3 ~", C: "e1@3 ~ e1@3 ~ e1@3 ~ f#1 ~ g1 ~",
  D: "a1@3 ~ a1@3 ~ a1@3 ~ a1@3 ~", E: "a1@3 ~ a1@3 ~ e1@5 ~@3", F: "a1@3 ~ a1@3 ~ e1@3 ~ e2@3 ~", G: "a1!14 ~ a1",
  H: "g1!6 g2!8 f2 d2", I: "a1!4 a2 ~ a1!2 a2 ~ a1!2 a2 a2@2 ~", J: "g1!6 g2 ~ e3!7 ~",
  K: "e1@3 ~ e1@3 ~ e1@3 ~ f#1 ~@3",
})).s("gm_piano").gain(0.41)

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

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

// drums · low tom
const low_tom = s("lt").struct("<~@41 [~@14 x!2] ~@40 [x!2]!4 ~@4>").gain(0.51)

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

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@9 A ~@3 A ~@11 A ~@3 B ~@11 C ~@3 D ~@3 A ~@3 B ~@11 E ~@3 D ~@19 F>".pickRestart({
  A: "~@13 x!2 ~", B: "~@13 x ~ x", C: "~@12 x!2 ~@2", D: "~@14 x!2", E: "~@10 x!6", F: "~@3 x!2 ~@11",
})).gain(0.51)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~ A B C B C B C B C B@3 C B@3 C D E D E F A G H B@3 C B@3 C I A J K L A L A ~@4 M N O P Q B@2 C B@3 C R S T U V W X Y
  ~@8 Z AA N@2 AB AC AD AC ~@8
>`.pickRestart({
  A: "x!3 ~", B: "~ x ~ x", C: "~ x ~@2", D: "~@2 x!3 ~ x ~", E: "x ~ x!3 ~@3", F: "~ x!2 ~ x ~ x ~", G: "~ x!3",
  H: "x ~ x!2 ~@4", I: "~@2 x ~ x!4", J: "~@2 x!6", K: "x ~ x!4 ~@2", L: "~@2 x ~ x ~ x!2", M: "~@3 x!3 ~@2",
  N: "x!2 ~ x!3 ~@2", O: "~ x!5 ~@2", P: "x!2 ~@2 x ~@3", Q: "~@3 x", R: "~@2 x ~ x ~@2 x", S: "x!2",
  T: "x ~@2 x!3 ~@2", U: "x!2 ~@5 x", V: "x!2 ~ x!2 ~@2 x", W: "x ~@3 x!2 ~ x", X: "x!2 ~ x!3 ~ x", Y: "x",
  Z: "~@3 x!3 ~ x", AA: "x ~@2 x!3 ~ x", AB: "~@4 x ~@2 x", AC: "x!2 ~@2 x!2 ~ x", AD: "x ~@3 x!2 ~@2",
})).gain(0.46)

// drums · open hat · soft notes
const open_hat_soft = s("oh").struct(`<
  ~@18 A B A B C D C E ~@8 F D ~ G H D H I ~@4 J ~ J F ~@8 H K G L M I ~ E ~@9 E J ~ H F N F ~@8
>`.pickRestart({
  A: "~@5 x ~ x", B: "~ x ~@3 x ~@2", C: "~@3 x ~ x ~ x", D: "~ x ~ x ~ x ~@2", E: "~ x ~@6", F: "~@3 x ~@4",
  G: "~ x ~@5 x", H: "~@3 x ~ x ~@2", I: "~ x ~ x ~@4", J: "~@7 x", K: "~ x ~ x ~ x ~ x", L: "~@3 x!3 ~@2",
  M: "~@5 x ~@2", N: "~ x ~ x ~@3 x",
})).gain(0.2)

// drums · high tom
const high_tom = s("ht").struct("<~@9 A ~@3 B ~@11 A ~@3 C ~@11 D ~@3 A ~@3 A ~@3 C ~@15 A ~@15 E ~@3 F>".pickRestart({
  A: "~@12 x!2 ~@2", B: "~@3 x", C: "~@11 x!2 ~@3", D: "~@10 x!2 ~@4", E: "~@7 x", F: "~@2 x!2 ~@12",
})).gain(0.51)

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

// drums · ride
const ride = s("rd").struct("<~@42 A@2 B C ~@20 A@2 D E ~@12 F@3 G ~@4>".pickRestart({
  A: "~@2 x!3 ~ x ~ x ~ x!2 ~ x!2 ~", B: "x!3 ~ x ~ x ~ x ~ x!2 ~ x!2 ~", C: "~ x!3 ~@4",
  D: "x ~ x!3 ~ x ~ x ~ x!2 ~ x!2 ~", E: "~@2 x!3 ~ x ~@9", F: "~ x ~ x ~ x ~ x", G: "~ x ~ x ~ x ~@2",
})).gain(0.46)

stack(
  flute, piano, piano_2, piano_3, bass, kick, snare, low_tom, hihat, hihat_soft, mid_tom, open_hat, open_hat_soft,
  high_tom, crash, ride
)

More by Van Halen