Strudelify

Dance the Night Away

Van Halen

KeyE majorTempo128 bpm
0:00/0:00
// Dance the Night Away — Van Halen
// 128 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 99 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(128/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.

// chords · distortion guitar · "guitar 1"
const distortion_guitar = note(`<
  ~@2 A B@2 C@2 D@2 E@2 F@2 G@2 H@2 I J K L@2 J M N O A B@2 C@2 D@2 P@2 Q@2 R@2 S@2 T J K U@2 J V N W A B@2 C@2 X@2 Y
  Z@2 AA@2 AB@2 AC@2 AD ~@7 A B@2 C@2 AE@2 AF@2 AG@2 AH@2 AI@2 AJ@2 AK@2 AL@2 AM@2 Y ~
>`.pickRestart({
  A: "e2@2 [b3,e4,g#4] b3 [e4,g#4] [e4,a4] ~ b3", // E A5
  B: "[[e4,g#4] [b3,d#4]!2 [d#4,f#4] [c#4,e4] c#4 [c#4,e4] [b3,e4]@2 e2 [b3,e4,g#4]@2 [b3,e4,g#4] [e4,a4] ~ b3]/2", // E B D#m C#m E5 E A5
  C: "[[e4,g#4] c#4 [a3,c#4] [b3,d#4,f#4]@4 e2@2 e2 [b3,e4,g#4]@2 [b3,e4,g#4] [e4,a4] ~ b3]/2", // E A B E A5
  D: "[[e4,g#4] [b3,d#4]!2 [b3,d#4,f#4] [a3,c#4,e4]!2 a3 [b3,e4]@2 e2 [b3,e4,g#4]!3 [b3,e4,a4] ~ b3]/2", // E B A E5 E Esus4
  E: "[[b3,e4,g#4] [a3,c#4]!2 [b3,d#4,f#4]@4 e2@3 [b3,e4,g#4]!3 [e4,a4] ~ b3]/2", // E A B E A5
  F: "[[e4,g#4] [b3,d#4]!2 [b3,d#4,f#4] [a3,c#4,e4]!2 a3 [b3,e4]@2 e2 [b3,e4,g#4]@2 [b3,e4,g#4] [c#4,a4] ~ b3]/2", // E B A E5 E F#m
  G: "[[e4,g#4] [a3,c#4]!2 [b3,d#4,f#4]@4 e2@2 e2 [e4,g#4] b3 [e4,g#4] [e4,a4] ~ b3]/2", // E A B E A5
  H: "[[e4,g#4] [d#4,f#4]!2 f#4 e4 [c#4,e4]!2 [b3,e4]@2 e2 [b3,e4,g#4]@2 [b3,e4,g#4] [e4,a4] ~ b3]/2", // E D#m C#m E5 E A5
  I: "[b3,e4,g#4] [a3,c#4]!2 [b3,d#4,f#4]@5", J: "~@2 [b2,f#3] ~ [c#3,g#3]@4", K: "b3@2 f#3 [b3,d#4]@2 b3@3",
  L: "[[c#3,g#3]!3 [c#3,g#3]@2 ~@2 [f#3,b3]@4 [b3,f#4]@2 e4 d#4 b3, ~@13 b3@2 ~]/2", // C#5 B5
  M: "[f#3,b3]@2 f#3 [b3,d#4]@2 [b3,e4] [b3,d#4] b3", N: "~@2 [c#3,g#3,c#4,e4]@3 d#4 c#4 g#4",
  O: "~ [f#3,b3,d#4] f#3 [f#3,b3,e4] ~ [f#3,b3,d#4] ~ [f#3,b3,e4]", // B Esus2 B Esus2
  P: "[[b3,e4,g#4] [a3,c#4]!2 [b3,d#4,f#4]@4 e2@3 [b3,e4,g#4] b3 [e4,g#4] [e4,a4] ~ b3]/2", // E A B E A5
  Q: "[[e4,g#4] b3!2 [b3,d#4,f#4] [a3,c#4,e4] [c#4,e4]!2 [b3,e4]@2 e2 [b3,e4,g#4]!3 [e4,a4] ~ b3]/2", // E B A C#m E5 E A5
  R: "[[e4,g#4] [a3,c#4]!2 [b3,d#4]@3 c#3 e2@2 e2 [e4,g#4] b3 [e4,g#4] [e4,a4] ~ b3]/2", // E A B E A5
  S: "[[e4,g#4] d#4!2 [b3,d#4,f#4] [a3,c#4,e4] [c#4,e4]!2 [b3,e4]@2 e2 [b3,e4,g#4]@2 [b3,e4,g#4] [e4,a4] ~ b3]/2", // E B A C#m E5 E A5
  T: "[e4,g#4] a3!2 [b3,d#4]@2 g#2 b2 e3", // E B
  U: "[[c#3,g#3]!2 [c#3,g#3]@2 ~@2 e3 [f#3,b3]@4 [b3,f#4]@2 e4 d#4 b3, ~@13 b3@2 ~]/2", // C#5 B5
  V: "[f#3,b3]@2 f#3 [b3,d#4]@2 e4 d#4 b3", W: "~ [f#3,b3,d#4] ~ [f#3,b3,e4] ~ [f#3,b3,d#4] ~ [f#3,b3,e4]",
  X: "[[e4,g#4] [b3,d#4]!2 [b3,d#4,f#4] [a3,c#4,e4]!2 a3 [b3,e4]@2 e2 [b3,e4,g#4]!3 [b3,e4,a4] g#4 e4]/2", // E B A E5 E Esus4
  Y: "[b3,d#4,f#4] b3!2 [a3,c#4,e4]@2 a2 g#2 e2", // B A
  Z: "[b2@2 b2!6 ~ [f#3,b3,d#4] [b2,f#3]!5 [a2,e3], [f#3,b3,e4]@9 ~@7]/2", // B B5 A5 Esus2
  AA: "[a2@2 a2!6 ~ [e3,a3] a2!5 [f#3,b3,e4], [e3,a3,b3]@9 ~@7]/2", // A5 Esus2 Esus4
  AB: "[b2@2 b2!6 ~ [f#3,b3,d#4] [b2,f#3]!4 b2 a2, [f#3,b3,e4]@9 ~@7]/2", // B B5 Esus2
  AC: "[[f#3,b3,d#4] a2!2 [a2,e3,a3]@6 [a3,d#4] ~ [a3,e4] ~ [a3,d#4] ~ [a3,e4]]/2", AD: "e2 ~@3",
  AE: "[[e4,g#4] [b3,d#4]!3 [a3,c#4] [c#4,e4]!2 [b3,e4]@2 e2 [b3,e4,g#4] b3 [e4,g#4] [e4,a4] ~ e4]/2", // E B A C#m E5 E A5
  AF: "[[d#4,f#4] [a3,c#4,e4]!2 [a3,c#4,e4]@4 e2@2 e2 [b3,e4,g#4] [e4,g#4]!2 [e4,a4] b3!2]/2", // D#m A E A5
  AG: "[[b3,e4] [b3,d#4]!3 [a3,c#4] [c#4,e4]!2 [b3,e4]@2 e2 [b3,e4,g#4]!2 [e4,g#4] [e4,a4] b3!2]/2", // E5 B A C#m E5 E A5
  AH: "[[b3,e4,g#4] [a3,c#4,e4]!2 [b3,d#4,f#4]@3 b2 e2@2 e2 [e4,g#4]!3 [b3,e4,a4]!2 b3]/2", // E A B E Esus4
  AI: "[[b3,e4,g#4] [b3,d#4,f#4]!3 a3 [c#4,e4]!2 [b3,e4]@2 e2 [e4,g#4] b3 [e4,g#4] [e4,a4] b3!2]/2", // E B C#m E5 E A5
  AJ: "[[e4,g#4] [a3,c#4]!2 [b3,d#4,f#4]@4 e2@3 [e4,g#4]@2 [e4,g#4] [e4,a4] b3!2]/2", // E A B E A5
  AK: "[[b3,e4,g#4] [b3,d#4,f#4]!2 [b3,d#4] [a3,c#4] [c#4,e4]!2 [b3,e4]@2 e2 [b3,e4,g#4]@2 [b3,e4,g#4] [e4,a4] b3!2]/2", // E B A C#m E5 E A5
  AL: "[[b3,e4,g#4] [a3,c#4,e4]!2 [b3,d#4,f#4]@3 c#3 e2@2 e2 [b3,e4,g#4] b3 [e4,g#4] [e4,a4] b3!2]/2", // E A B E A5
  AM: "[[e4,g#4] [b3,d#4]!3 [a3,c#4] [c#4,e4]!2 [b3,e4]@2 e2 [b3,e4,g#4]!3 [b3,e4,a4] g#4 e4]/2", // E B A C#m E5 E Esus4
})).s("gm_distortion_guitar").gain(0.25).pan(0.9)

// other · overdriven guitar · "guitar 2"
const overdriven_guitar = note(`<
  ~@26 A@3 B@4 C D ~@15 A@3 B@4 E F@2 G@2 ~@4 H I J K L M J N O@3 P O@3 P O@3 P O@3 P O@3 P O@3 P ~
>`.pickRestart({
  A: "[~@2 g#5@3 a5 g#5 g#5@2 f#5 d#5 b4 e5 c#5 a4 g#4@2 b3 g#5@3 a5 g#5 ~]/3",
  B: "[e5 c#5 e5 f#5@2 d#5 b4 e2@3 g#5@3 a5 g#5 g#5@2 f#5 d#5 b4 e5 c#5 a4 g#4@2 b3 g#5@3 a5 g#5 ~]/4",
  C: "e5 c#5 e5 f#5@2 d#5 b4@2", D: "~ b5@3", E: "e5 c#5 e5 e5@2 c#5 e5@2", F: "f#5/2", G: "b4/2",
  H: "e2@2 [b4,e5,g#5]!4 ~ [b4,d#5,f#5]", I: "~ [b4,d#5,f#5] [a3,c#4,e4]@3 e5 c#5 a4",
  J: "[e2,g#4]@2 [b4,e5,g#5]!4 ~ [a4,c#5,e5]", K: "~ [a4,c#5,e5] [b4,d#5,f#5]@3 d#5!2 b4",
  L: "[e2,g#4]@2 [b4,e5,g#5]!4 ~ [b4,d#5,f#5]", M: "~ [b4,d#5,f#5] [a4,c#5,e5]@3 e5 c#5 a4",
  N: "~ a4 [b4,d#5,f#5]@4 e3@2", O: "[e2@2 g#5@3 a5 g#5 g#5@2 f#5 d#5 b4 e5 c#5 a4 g#4@2 b3 g#5@3 a5 g#5 ~]/3",
  P: "e5 c#5 e5 f#5@2 d#5 b4 e2",
})).s("gm_overdriven_guitar").gain(0.24).pan(0.1)

// bass · slap bass 2 · "bass"
const bass = note(`<
  ~@5 A@2 B@2 C@2 D@2 E@2 F@2 G H I J@2 H I K L M N@2 O@2 D@2 P@2 D@2 E@2 F@2 G H I J@2 H I K L M N@2 O@2 D@2 Q R@2 S T
  U V W@2 ~@6 X Y Z F@2 C@2 F@2 AA@2 F@2 C@2 F@2 AB Z F@2 C@2 F@2 AC@2
>`.pickRestart({
  A: "[~@7 e1@2 e1!7]/2", B: "[b1!4 a1!3 e1@2 e1 e2!2 e1!4]/2", C: "[a1!4 g#2 b2 g#2 e1@2 e1!7]/2",
  D: "[b1!4 a1!3 e1@2 e1!7]/2", E: "[a1!4 c#2 b1 g#1 e1@2 e1!7]/2", F: "[b1!4 a1!2 g#1 e1@2 e1!7]/2", G: "a1!4 b1!3 ~",
  H: "~@2 b1 ~ c#2@4", I: "b1@2 g#1!2 f#1!2 e1!2", J: "[c#2!2 ~@5 b1@2 b1 g#1!2 f#1!2 e1@2]/2", K: "~ c#2@3",
  L: "~ b1 ~ b1 ~ b1 ~ b1", M: "e1@3 e1 e1@3 e1", N: "[b1@3 b1 a1@3 e1@2 e1!7]/2", O: "[a1!4 c#3 b2 g#2 e1@2 e1!7]/2",
  P: "[a1!3 b1 a1 g#1 f#1 e1@2 e1!7]/2", Q: "b2 a2 b2 e3@2 a2 g#2 e2", R: "b1!8", S: "a1!8", T: "a1 a2@7",
  U: "b1 ~ b1!6", V: "b1 b2 b1!6", W: "[a1 ~@2 a1@13]/2", X: "~ e1!7", Y: "e1!4 b1 a1 b1 g#1", Z: "e1!8",
  AA: "[a1!4 c#3 b2 c#3 e2@2 e2 e1!6]/2", AB: "a1!4 c#3 b2 c#3 e2", AC: "[a1!4 c#3 b2 c#3 e2@2 ~@7]/2",
})).s("gm_slap_bass_2").gain(0.57)

// other · guitar harmonics
const guitar_harmonics = note("<~@61 A@4 ~@34>".pickRestart({
  A: "[~ b4@15]/4",
})).s("gm_guitar_harmonics").gain(0.46)

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

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

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@5 A ~@14 B ~@23 B ~@12 C ~@41>".pickRestart({
  A: "~@4 x!3 ~@9", B: "~@5 x!2 ~", C: "~@6 x!2",
})).gain(0.57)

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

// drums · high tom
const high_tom = s("ht").struct("<~@5 A ~@14 B ~@2 C ~@20 B ~@2 C ~@9 D ~@3 E ~@37>".pickRestart({
  A: "x!3 ~@13", B: "~@2 x!3 ~@3", C: "~@14 x!2", D: "~@4 x!2 ~@2", E: "~@5 x!2 ~",
})).gain(0.57)

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

// drums · cowbell
const cowbell = s("cb").struct("<[x ~@2 x ~ x ~@2]!2 [x ~@2 x ~@2 x ~]!3 ~@94>").gain(0.57)

stack(
  distortion_guitar, overdriven_guitar, bass, guitar_harmonics, kick, snare, hihat, mid_tom, open_hat, high_tom, crash,
  cowbell
)

More by Van Halen