Strudelify

Ice Cream Man

Van Halen

KeyE majorTempo172 bpm
0:00/0:00
// Ice Cream Man — Van Halen
// 172.1 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: Full arrangement: all 83 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(172.1/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.

// bass · electric bass pick
const bass = note(`<
  A B A C D E F G H I J K L M N O P Q F R S T U V W ~ X ~ Y ~ Y Z AA AB AC@2 AD@2 AE K AF AG AH AI AJ AK AL@2 AM AN@2 AO
  AP AQ AR AS AT AU AV AW AX AY AZ BA BB BC F BD BE BF@2 BG BH BI ~@2 BJ@4 BK@3
>`.pickRestart({
  A: "e1 ~@3", B: "e1@3 ~@3 e1@4 ~@6", C: "e1@4 f#1@3 ~ g1@4 g#1@3 ~", D: "a1@4 c#2@2 ~ c#2 e2@2 ~ e2 f#2@2 ~ f#2",
  E: "a1@4 c#2@2 ~ c#2 d2@2 ~ d2 e2@2 ~ e2", F: "e2@2 ~ e2 c#2@2 ~ c#2 b1@2 ~ b1 g#1@2 ~ g#1",
  G: "e1@2 ~ e1 g1@2 ~ g1 g#1@2 ~ g#1 a1@2 ~ a1", H: "b1@2 ~ b1 d#2@2 ~ d#2 f#2@2 b2@2 a#2@2 a2@2, ~@8 d#2 ~@7",
  I: "~@2 a2 ~ c#2@2 c#2 ~ d2@2 d2 ~ e2 ~ e2 ~", J: "e1@2 ~@2 g1@2 ~ g1 g#1 ~@2 g#1 a1@2 a1 ~, ~@3 e1@2 ~@11",
  K: "b1@2 ~ b1 a#1@2 ~ b1@9", L: "~ e1@3 g#1@3 g#1 b1@2 ~ b1 c#2@2 ~ c#2",
  M: "a1@2 ~ a1 c#2@2 ~ c#2 e2@2 ~ e2 f#2@2 ~ f#2", N: "e1@2 ~ e1 g#1@2 ~ g#1 b1@2 ~ b1 c#2@2 ~ c#2",
  O: "d2@2 ~ d2 c#2@2 ~ c#2 b1@2 ~ b1 g#1@2 ~ g#1",
  P: "a1@2 ~@2 c#2@2 ~@2 e2@2 ~ e2 f#2 ~@2 f#2, ~@3 a1@2 ~@2 c#2@2 ~@7",
  Q: "a1 ~@3 c#2@2 ~ c#2 d2@2 ~ d2 e2@2 ~ e2, ~@3 a1@2 ~@11", R: "e1@2 ~ e1 f#1@2 ~ f#1 g#1 ~@2 g#1 a1@2 ~ a1",
  S: "b1 ~ b1 ~ d#2 ~@2 d#2 f#2 ~@2 f#2 d#2@2 ~ f#2",
  T: "a1@2 ~@2 c#2@2 ~ c#2 d2@2 ~ d2 d#2@2 e2 ~, ~@3 a1@2 ~@3 d#2 ~@7",
  U: "e1@2 ~@2 f#1@2 ~ f#1 g#1@2 g#1 ~ a1@2 a1 ~, ~@3 e1@2 ~@11", V: "b1@2 ~ b1 a#1@2 ~ b1@8 ~", W: "e1@3 ~@3 e1@3 ~@7",
  X: "e1@4 ~@2 e1@3 ~@7", Y: "e1@2 ~ e1@2 ~@3", Z: "e1@4 f#1@4 g1@4 g#1@3 ~",
  AA: "a1 a1@2 a1 c#2@2 ~ c#2 e2 ~ e2 ~ f#2@2 ~ f#2", AB: "a1 ~ a1 ~ c#2@2 ~ c#2 d2@2 ~ d2 e2@2 ~ e2",
  AC: "[e2@2 ~@2 c#2@2 ~@2 b1@2 ~@2 g#1@2 ~@2 e1@2 ~ e1 f#1@2 ~ f#1 g#1@2 ~ g#1 a1@2 ~ a1, ~@3 e2@2 ~@2 c#2@2 ~@2 b1@2 ~@2 g#1@2 ~@15]/2",
  AD: "[b1@2 ~@2 d#2@2 ~ d#2 f#2@2 b2@2 a#2@2 ~ a2@4 a2 c#2@2 ~ c#2 d2@2 d2 ~ d#2@2 ~ d#2, ~@3 b1@2 ~@27]/2",
  AE: "e2 ~ e2@2 e1@2 ~@2 g#1@2 ~ g#1 a1@2 ~ a1, ~@7 e1@2 ~@7", AF: "~ e1 ~ e1 g#1 ~@2 g#1 b1@2 ~ b1 g#1@3 b1",
  AG: "a1@2 ~@2 c#2@2 ~@2 e2@2 e2 ~@3 e2 ~, ~@3 a1@2 ~@2 c#2@2 ~@3 c#2@4",
  AH: "e1 ~@3 g#1@2 ~@2 b1@2 ~ b1 g#1@3 b1, ~@3 e1@2 ~@2 g#1@2 ~@7",
  AI: "e1@2 ~@2 f#1@3 ~ g1@3 ~ g#1@3 e1, ~@3 e1@2 ~@2 e1@2 ~@2 e1@2 ~@3",
  AJ: "a1@3 ~ c#2@2 ~@2 e2@2 ~ e2 c#2@3 e2, ~@3 a1@2 ~@2 c#2@2 ~@7", AK: "a1@2 ~ a1 c#2@2 ~ c#2 e2@2 ~ e2 c#2@3 e2",
  AL: "[e2@2 ~@2 c#2@2 ~ c#2 b1@2 ~ b1@2 g#1 ~@2 e1@2 ~@2 f#1@2 ~ f#1 g#1@2 ~ g#1 a1@2 ~ a1, ~@3 e2@2 ~@10 g#1@2 ~@2 e1@2 ~@11]/2",
  AM: "b1@2 ~ b1 d#2@2 ~ d#2 e2@2 ~ e2 f2@2 ~ f#2",
  AN: "[a1@2 ~@2 c#2@2 ~ c#2 e2@2 ~ e2 c#2@2 ~@2 [e1,f1] ~@3 f#1@2 ~@2 g#1@2 ~@2 a1@2 ~ a1, ~@3 a1@2 ~@10 e2@2 ~@2 e1@2 ~@2 f#1@2 ~@2 g#1@2 ~@3]/2", // Fmaj7
  AO: "b1@2 ~@2 a#1@2 ~ b1@4 b1 b1@2 ~ b1, ~@3 b1@2 ~@11",
  AP: "e1@2 ~@2 f#1@2 f#1 ~ g1@2 g1 ~ g#1 ~ g#1 ~, ~@3 e1@2 ~@11",
  AQ: "a1@2 ~@2 c#2@2 ~@2 d2@2 ~@2 d#2@2 ~ d#2, ~@3 a1@2 ~@2 c#2@2 ~@2 d2@2 ~@3",
  AR: "e2@2 ~@2 c#2@2 ~ c#2 b1@2 ~ b1 g#1 ~@2 g#1, ~@3 e2@2 ~@11",
  AS: "e1@2 ~@2 f#1@2 ~ f#1 g1@2 ~ g1 g#1@2 ~ g#1, ~@3 e1@2 ~@11",
  AT: "a1@2 ~ a1 c#2@2 ~@2 e2@2 ~ e2 c#2@3 e2, ~@7 c#2@2 ~@7", AU: "a1@2 ~ a1 c#2@2 ~ c#2 d2@2 ~ d2 d#2@2 e2 ~",
  AV: "e2@2 ~ e2 c#2@2 ~ c#2 b1@2 ~ b1 c#2@3 b1", AW: "e1@2 ~ e1 f#1@2 ~ f#1 g1@2 ~ g1 g#1@2 ~ a1",
  AX: "b1@2 ~@2 c#2@2 ~ c#2 d2@2 ~ d2 d#2@2 ~ e2, ~@3 b1@2 ~@11",
  AY: "a1@2 ~@2 c2@2 ~ c2 c#2@2 ~ c#2 d2@2 d#2 ~, ~@3 a1@2 ~@11", AZ: "e1@2 ~ e1 f#1 ~@2 f#1 g1 ~@2 g1 g#1@2 ~ a1",
  BA: "b1@2 ~ b1 a#1@2 ~ b1@6 b1@2 b1", BB: "b1@2 ~ b1 g#1@2 ~ g#1 e1@2 ~ e1 f#1@2 ~ f#1",
  BC: "a1@2 ~@2 c#2@2 ~ c#2 d2@2 ~ d2 d#2@2 e2 ~, ~@3 a1@2 ~@11", BD: "e1@2 ~ e1 f#1@2 ~ f#1 g1@2 ~ g1 g#1@2 ~ g#1",
  BE: "a1@2 ~ a1 c#2@2 ~ c#2 e2@2 ~ e2 c#2@2 e2 ~",
  BF: "[a1@2 ~ a1 c#2@2 ~ c#2 e2@2 ~ e2 c#2@3 ~ e1@2 ~ e1 g#1@2 ~ g#1 b1@2 ~ b1 g#1@2 ~ b1, ~@15 e2@2 ~@15]/2",
  BG: "e1@2 ~ e1 g#1@2 ~ g#1 b1@2 ~ b1 g#1@2 ~ b1", BH: "b1@3 ~@13", BI: "~ a1@3 ~@12",
  BJ: "[~@6 e2@7 ~ e2@4 ~ g#2@7 ~ g#2@3 ~ a2@7 ~@2 a2@3 ~ a#2@7 ~ a#2@2 ~@2 b2@2 ~@6]/4",
  BK: "[~@4 f1@6 ~@4 e1@21 ~@13]/3",
})).s("gm_electric_bass_pick").gain(0.26)

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

// drums · kick · soft notes
const kick_soft = s("bd").struct(`<
  ~@4 A@4 B A@2 C A@7 ~ A@2 B ~@9 A@7 C A@3 D A@7 ~ A@11 ~ A@2 B A ~ A ~ B ~@11
>`.pickRestart({
  A: "~@3 x ~@7 x ~@4", B: "~@3 x ~@12", C: "~@11 x ~@4", D: "~@3 x ~ x ~@10",
})).gain(0.2)

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

// drums · hihat
const hihat = s("hh").struct("<[~@2 x!2] [x!4]!2 ~@21 [x!4]!7 ~@52>").gain(0.31)

// drums · mid tom
const mid_tom = s("mt").struct("<~@23 [~@12 x!2 ~ x] ~@59>").gain(0.26)

// drums · open hat
const open_hat = s("oh").struct("<~@4 A@4 B A@2 C ~@7 D ~@19 C ~@11 D A@11 D A@2 B A B A B@2 ~@11>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2", C: "x ~@2 x", D: "~@3 x",
})).gain(0.31)

// drums · open hat · soft notes
const open_hat_soft = s("oh").struct("<~@4 A B@4 A B ~@41 A B@3 A B@3 A@2 B ~ A@2 B A@5 ~@11>".pickRestart({
  A: "~ x", B: "x!2",
})).gain(0.2)

// drums · high tom
const high_tom = s("ht").struct("<~@23 [~@8 x!2 ~ x ~@4] ~@59>").gain(0.26)

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

// drums · ride
const ride = s("rd").struct("<~@12 A@7 ~ A@3 ~@10 A@6 ~ B C@2 D A@2 B C A@3 ~@25 E F G H ~@3>".pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@2 x!2 ~@2 x!2 ~@2 x", C: "x ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x", D: "x", E: "~@5 x ~ x",
  F: "~@7 x ~@3 x ~@4", G: "~@3 x ~@3 x ~@8", H: "x!2 ~@2",
})).gain(0.31)

// drums · ride · soft notes
const ride_soft = s("rd").struct("<~@12 A B@6 ~ B A@2 ~@9 A B A B A B A ~@5 A B ~@2 A@3 ~@32>".pickRestart({
  A: "~ x", B: "x!2",
})).gain(0.2)

stack(bass, kick, kick_soft, snare, hihat, mid_tom, open_hat, open_hat_soft, high_tom, crash, ride, ride_soft)

More by Van Halen