Strudelify

Not Enough

Van Halen

KeyC majorTempo78 bpm
0:00/0:00
// Not Enough — Van Halen
// 78 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 5/4 at bar 39, 4/4 at bar 41) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 50 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(78/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 · piano
const piano = note("<A@4 B@6 C D@2 E F G H I J@2 K L M N O P Q@2 R S ~@6 T@2 U V@2 W@2 X@2 Y@3 Z AA>".pickRestart({
  A: "[~@2 g3@2 ~@2 b3@2 g3@12 ~@2 c4@2 ~ g3@5 ~@40 e4@2 c4@12 ~@2 f4@2 c4@6 c4@6 ~@4 [a#1,a#2]@24, ~@4 a3@4 [c2,c3,c4]@16 [e2,b3]@15 ~@29 d4@4 ~@28 d4@28, ~@21 g3@4 e1@15 [f1,f2]@32 [d2,d3,f4]@16 [a1,a2,e4]@15 ~@25, ~@15 g3@5 ~@13 c4@3 ~@6 c4@2 ~@20, ~@9 a3@9 ~@14]/4", // A# C E5 F Dm A5
  B: "[~@6 a3@2 f3@12 ~@2 a#3@2 f3@6 ~@40 e4@2 c4@12 ~@2 f4@2 ~ c4@6 ~@23 a#3@2 ~@22 c3@5 ~@7 g3@6 g3@6 ~ g3@25, ~@2 f3@5 ~ [a#1,a#2,a#3]@16 [f1,f2,a3]@15 ~ [c1,c2]@33 ~@27 d4@20 ~@12 g3@22 f3@38, ~@4 g3@4 ~@12 f3@4 ~@6 f3@9 ~@27 c4@6 [d2,d3,f4]@16 ~ a1@15 [a#1,a#2]@16 [f1,f2,a3]@15 ~ [c1,c2]@55 ~, ~@36 [c3,g3]@37 ~@15 [a2,e4]@15 ~@13 f3@4 ~@6 f3@9 ~@7 e3@18 e3@32, ~@68 d4@4 ~@13 c4@4 ~@6 c4@9 ~@6 g4@10 ~@12 c3@10 ~@5 c3@19 c3@25 ~]/6", // A# F C Dm A# F C C5 …
  C: "[g3,e4]@4 [a3,f4]@4 [b3,d4]@4 c4@3 ~ f3@4 ~@4 a3@4 ~@2 a#3 ~, ~@16 [f1,f2,c4]@15 ~, ~@4 a3@2 ~ a3, ~@20 f3@11 ~", // C Dm Bm F5
  D: "[~@4 d3@4 ~@4 d3@4 ~@12 c3@4 [g3,e4]@4 [a3,f4]@4 [b3,d4]@4 c4@4 f3@4 ~@4 a3@4 a3@2 a#3 ~, [g1,g2]@15 ~ [c1,c2]@24 ~@8 [f1,f2]@15 ~, [g3,b3]@8 [g3,c4]@7 ~ [g3,c4]@8 [g3,c4]@10 ~@14 [a3,c4]@8 c4@7 ~, ~@20 c3@8 ~@24 f3@11 ~]/2", // C Dm Bm G C F G C5 …
  E: "[g3,b3]@4 d3@3 ~@5 d3@3 ~@15 e4@2, [g1,g2]@15 ~ [c1,c2,g3]@16, ~@8 [g3,c4]@7 ~ c4@10 c4@6, ~@5 c3@3, ~@7 d4", // G C5
  F: "f4@4 g4@3 ~ c4 ~@3 c4@3 ~ f3@4 ~@4 a3@4 a3@2 a#3 ~, [a3,c4]@7 ~ [g3,e4]@7 ~ [f1,f2]@15 ~, ~@16 [a3,c4]@8 c4@7 ~, ~@20 f3@11 ~", // Am C F Am
  G: "~@4 [g3,c4]@2 d3@2 ~@7 d#4, [g1,g2,b3]@7 ~ [c1,c2,g3]@8, g3@4 ~@4 c4@5 c4@3, ~ d3@2 ~@2 c3@3, ~@7 d4", // C5 G C5
  H: "[g3,e4]@4 [a3,f4]@4 [b3,d4]@4 c4@3 ~ e3@4 e3@4 e3@4 e3@3 ~, ~ [a1,a2], ~@2 [a3,c4]!2", // C Dm Bm A Am
  I: "e3@4 ~@8 e3@3 ~ a3@4 ~@2 a3@4 ~@4 f3@2, [e1,e2]@15 ~ [f1,f2]@16, [g3,c4]@8 [g3,c4]@7 ~ c4@10 c4@5 ~, ~@4 e3@8 ~@4 f3 ~@3 f3@8 a3@4", // E F C5
  J: "[[g1,g2,d3,b3]@8 [c1,c2,c3,g3,c4]@2 ~@2 [c1,c2,c3,g3,c4]@36 [g3,e4]@4 [a3,f4]@4 [b3,d4]@4 c4@3 ~]/2", // G C5 C Dm Bm
  K: "f3@4 ~@4 a3@4 ~@2 a#3 ~@5 d3@4 ~@4 d3@4, [f1,f2,c4]@15 ~ [g1,g2]@15 ~, a3@8 ~@4 a3@4 [g3,b3]@9 ~@7, ~@4 f3@11 ~@9 [g3,c4]@7 ~", // F5 G C5
  L: "~@3 c3 [g3,e4] [a3,f4] [b3,d4] c4, [c1,c2]@3 ~, [g3,c4]@4 [g3,c4]@5 ~@7, ~ c3@2 ~@5", // C Dm Bm C C5
  M: "f3@4 ~@4 a3@4 a3@2 a#3 ~ [g3,b3]@4 d3@3 ~@5 d3@3 ~, [f1,f2]@15 ~ [g1,g2]@15 ~, [a3,c4]@8 c4@7 ~@17, ~@4 f3@11 ~@9 [g3,c4]@7 ~", // G F G Am C5
  N: "~@14 e4@2 f4@4 g4@3 ~ c4 ~@3 c4@3 ~, [c1,c2,g3] ~, c4@10 c4@6 [a3,c4]@7 ~ [g3,e4]@7 ~, ~ c3@3 ~@4, ~@3 d4 ~@4", // C5 Am C
  O: "f3@4 ~@4 a3@4 a3@2 a#3 ~@9 [g3,c4]@4 d3@4, [f1,f2]@15 ~ [g1,g2,b3]@14 ~@2, [a3,c4]@8 c4@7 ~@5 d3@8 ~@4, ~@4 f3@11 ~ g3@8 ~@8", // C5 F G Am
  P: "~@14 d#4@2 [g3,e4]@4 [a3,f4]@4 [b3,d4]@4 c4@3 ~, [c1,c2,g3] ~, c4@5 c4@3 ~@8, ~ c3@3 ~@4, ~@3 d4 ~@4", // C Dm Bm C5
  Q: "[[e3,a3,c4]@8 [e3,a3,c4]@8 [e3,g3,c4]@8 ~@8 [d3,f3,c4]@8 [d3,f3,c4]@8 [d3,g3,b3]@8 [d3,g3,b3]@7 ~, [a1,a2]@16 [e1,e2]@15 ~@17 [g1,g2]@15 ~, ~@24 [e3,g3,c4]@7 ~@33, ~@7 [d1,d2]@5 ~@4]/2", // Am C Dm7 G A E G C …
  R: "[a1,a2,e3,a3,c4]@8 [a1,a2,e3,a3,c4]@7 ~ [a1,a2,e3,a3,b3]@8 [a1,a2,e3,a3,b3]@7 ~", // Am Asus2
  S: "[a1,a2,e3,a3,c4]@8 [a1,a2,e3,a3,c4]@8 [a1,a2,e3,a3,c4]@8 [a1,a2,e3,a3,c4]@7 ~", // Am
  T: "[~@31 [a3,d4]@5 [a3,d4]@6 [a3,d4]@5 [a3,d4]@6 [a3,d4]@6 [a3,d4]@5]/2", // D5
  U: "~ [a3,d4]@5 ~ d4@6 [a3,d4]@11 [g3,e4]@4 [a3,f4]@4, ~@6 a3@7 ~@19", // D5 C Dm
  V: "[[b3,d4]@4 c4@3 ~ f3@4 ~@4 a3@4 ~@2 a#3 ~@5 d3@4 ~@4 d3@4 ~@12 c3@4 [g3,e4]@4 [a3,f4]@4, ~@8 [f1,f2,c4]@15 ~ [g1,g2]@15 ~ [c1,c2]@24, ~@8 a3@8 ~@4 a3@4 [g3,b3]@9 ~@7 [g3,c4]@8 [g3,c4]@10 ~@6, ~@12 f3@11 ~@9 [g3,c4]@7 ~@5 c3@8 ~@12]/2", // Bm C Dm F5 G C G C5
  W: "[[b3,d4]@4 c4@4 f3@4 ~@4 a3@4 a3@2 a#3 ~ [g3,b3]@4 d3@3 ~@5 d3@3 ~@15 e4@2 f4@4 g4@3 ~, ~@8 [f1,f2]@15 ~ [g1,g2]@15 ~ [c1,c2,g3]@16 ~@8, ~@8 [a3,c4]@8 c4@7 ~@17 c4@10 c4@6 [a3,c4]@7 ~, ~@12 f3@11 ~@9 [g3,c4]@7 ~@5 c3@12 ~@8, ~@13 d4 ~@2]/2", // Bm G F G C5 Am C5
  X: "[c4 ~@3 c4@3 ~ f3@4 ~@4 a3@4 a3@2 a#3 ~@9 [g3,c4]@4 d3@4 ~@14 d#4@2 [g3,e4]@4 [a3,f4]@4, [g3,e4]@7 ~ [f1,f2]@15 ~ [g1,g2,b3]@14 ~@2 [c1,c2,g3]@16 ~@8, ~@8 [a3,c4]@8 c4@7 ~@5 d3@8 ~@8 c3@12 ~@8, ~@12 f3@11 ~ g3@8 ~@8 c4@10 c4@6 ~@8, ~@13 d4 ~@2]/2", // C5 C Dm C F G C5 Am
  Y: "[[b3,d4]@4 c4@3 ~ [e3,a3,c4]@8 [e3,a3,c4]@8 [e3,g3,c4]@8 ~@8 [d3,f3,c4]@8 [d3,f3,c4]@8 [d3,g3,b3]@8 [d3,g3,b3]@7 ~ [a1,a2,e3,a3,c4]@8 [a1,a2,e3,a3,c4]@7 ~ [a1,a2,e3,a3,b3]@8, ~@8 [a1,a2]@16 [e1,e2]@15 ~@17 [g1,g2]@15 ~@25, ~@32 [e3,g3,c4]@7 ~@57, ~@9 [d1,d2]@5 ~@10]/3", // Bm Am C Dm7 G Am Asus2 A …
  Z: "[a1,a2,e3,a3,b3]@7 ~ [a1,a2,e3,a3,c4]@8 [a1,a2,e3,a3,c4]@8 [a1,a2,e3,a3,c4]@8", AA: "[a1,a2,e3,a3,c4]@7 ~@25",
})).s("gm_piano").gain(0.3)

// chords · string ensemble 2
const string_ensemble_2 = note("<~@6 A@5 ~@25 B@3 ~ C@2 D@2 ~ E@3 ~@2>".pickRestart({
  A: "[~@8 d3@16 e3@15 ~@17 a3@16 [e3,g3]@58 ~@30, ~@40 f3@33 ~@87]/5", B: "[~@28 [a3,d4]@43 ~@25]/3",
  C: "[~@4 [g3,g5]@17 ~@11]/2", D: "[~@12 c6@7 ~@13, ~ [g3,g5]@4 ~@3]/2",
  E: "[~@24 [g3,g5]@11 ~ [f3,f5]@20 [g3,g5]@14 ~@26]/3", // G F G
})).s("gm_string_ensemble_2").gain(0.25)

// bass · fretless bass
const bass = note("<~@20 A B C D A E F@2 G H I J I K I L I M@2 N@2 O@2 P@2 Q@3 R S>".pickRestart({
  A: "f1@15 ~ g1@16", B: "c2@19 ~ c3@12", C: "f1 g1", D: "c2@19 ~ c2@4 g2@8", E: "c2@3 e1",
  F: "[a1@4 e1@3 d1@5 g1@4]/2", G: "a1@3 ~ a1@3 ~ a1@3 ~ a1@3 ~ a1@3 ~ a1@3 ~ a1@3 ~ a1@3 ~",
  H: "a1@3 ~ a1@3 ~ a1@3 ~ a1@3 ~ c2@4 b1@4 a1@4 e1@4", I: "a#1 c2", J: "f1@2 g1@6 a2 f2 a2 c3 f3 a#2 a2 f2",
  K: "~ f2@2 c2@2 d#2@11 f1@4 g1@4 a1@4 c2@4", L: "f2 c2 f1@6 f1@2 g1@2 a1@2 c2@2", M: "[d2@47 ~@17]/2",
  N: "[~@8 f1@15 ~ g1@15 ~ c2@19 ~ c2@4]/2", O: "[g2@3 ~ g2@4 f1@16 g1@15 ~ c2@20 c2@4]/2",
  P: "[d2@4 g2@3 ~ f1@16 g1@15 ~ c2@24]/2",
  Q: "[e1@8 a1@15 ~ e1@11 ~ d1@20 g1@15 ~ a1@3 ~ a1@3 ~ a1@3 ~ a1@3 ~ a1@3 ~ a1@3 ~]/3",
  R: "a1@3 ~ a1@3 ~ a1@3 ~ a1@3 ~ a1@3 ~ a1@3 ~ c2@4 b1@4", S: "a1@4 e1@4 a#1@13 ~@11",
})).s("gm_fretless_bass").gain(0.54)

// chords · pad metallic
const pad_metallic = note("<~@21 A@2 B@2 ~ C@3 ~@6 D@4 ~ E@2 F@2 G@2 H ~@3>".pickRestart({
  A: "[~@16 e4@8 d4@3 ~ d4@4 c4@8 ~@24, ~@16 g4@11 ~ g4@12 ~@24]/2",
  B: "[~@4 e4@2 d4!2 c4@2 ~@6, ~@16 g4@11 ~ g4@12 ~@24]/2", C: "[~@16 g4@8 f4@3 ~ f4@19 ~ d4@8 e4@4 e4@36]/3",
  D: "[~@15 c5@9 d5@3 ~@7 f4@15 ~@15 e4@40 ~@24, ~@28 c5@81 ~@19, ~@49 g4@60 ~@19]/4",
  E: "[~@22 g4 ~ [e4,c5]@8 [d4,b4]@3 ~ [d4,b4]@4 [c4,a4]@7 ~@17, ~@24 g4@11 ~ g4@11 ~@17]/2", // C G F
  F: "[~@24 [e4,c5]@8 [d4,b4]@3 ~ [d4,b4]@4 [c4,a4]@6 ~@18, ~@22 g4@13 ~ g4@11 ~@17]/2", // C G F
  G: "[~@24 g4@7 f4@4 ~ f4@4 e4@8 ~@8 g4@8]/2", H: "f4@3 ~ f4@19 ~@9",
})).s("gm_pad_metallic").gain(0.64)

// drums · kick
const kick = s("bd").struct("<~@28 A ~ B C B D B C B ~@2 E@7 F A G ~>".pickRestart({
  A: "~ x ~@2", B: "x ~@2 x!2 ~@2 x", C: "~ x", D: "~@5 x ~@11 x ~@14", E: "~@2 x ~@2 x!2 ~", F: "~ x ~ x ~@2 x ~",
  G: "x",
})).gain(0.38)

// drums · rim
const rim = s("rim").struct("<~@39 [~ x] [x!2]!7 x ~@2>").gain(0.38)

// drums · snare
const snare = s("sd").struct("<~@28 A B C@3 D C@3 ~@10 B ~@2>".pickRestart({
  A: "x ~@5 x!2 ~@8", B: "~ x", C: "~ x ~ x", D: "~@9 x ~@13 x ~ x ~@6",
})).gain(0.42)

// drums · low tom
const low_tom = s("lt").struct("<~@28 A B ~@3 C ~@4 D E ~@9 F>".pickRestart({
  A: "~@3 x", B: "~@4 x ~@7 x ~ x!2", C: "~@29 x ~@2", D: "~@31 x", E: "x", F: "x!2 ~@6",
})).gain(0.38)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@28 A B ~@3 C ~@13 D E ~>".pickRestart({
  A: "~@10 x ~ x ~@2 x", B: "x!3 ~@7 x ~@5", C: "~@27 x ~@4", D: "~@3 x", E: "~@4 x ~@2 x",
})).gain(0.42)

// drums · open hat
const open_hat = s("oh").struct("<~@27 A ~@11 B@2 C B@3 C D E F ~>".pickRestart({
  A: "~@3 x", B: "~ x ~@2", C: "~ x ~ x", D: "~@6 x!2", E: "x!2 ~ x ~ x ~ x", F: "~ x ~@3 x ~@2",
})).gain(0.34)

// drums · high tom
const high_tom = s("ht").struct("<~@48 [~@5 x!2 ~@4 x!2 ~@3] ~>").gain(0.38)

// drums · crash
const crash = s("cr").struct("<~@28 A ~ B ~ B ~ B ~ B C D ~@8 A E ~>".pickRestart({
  A: "~ x ~@2", B: "x ~@6 x", C: "~@25 x!7", D: "x!9 ~@23", E: "x",
})).gain(0.13)

// drums · crash · soft notes
const crash_soft = s("cr").struct("<~@37 [~@16 x!9 ~@7] ~@12>").gain(0.04)

// drums · ride
const ride = s("rd").struct("<~@30 A B A C A B A ~@13>".pickRestart({
  A: "~@2 x ~ x ~ x ~ x!3 ~ x ~@3", B: "~@2 x ~ x ~ x ~ x!3 ~ x ~ x ~", C: "~ x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@10",
})).gain(0.29)

stack(
  piano, string_ensemble_2, bass, pad_metallic, kick, rim, snare, low_tom, hihat, mid_tom, open_hat, high_tom, crash,
  crash_soft, ride
)

More by Van Halen