Strudelify

Ain't Talkin 'bout Love

Van Halen

KeyA minorTempo135 bpm
0:00/0:00
// Ain't Talkin 'bout Love — Van Halen
// 135 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 131 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(135/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.

// other · distortion guitar · "Guiter"
const distortion_guitar = note(`<
  A B A B A B A B ~@35 C ~ D E@2 F@2 G@2 H@2 I J ~@27 C ~ D K ~@8 L F@2 G@2 M@2 N O ~@27
>`.pickRestart({
  A: "a2 e3 c4 a3 e4 f4 c4 a3", B: "g4 d4 g2 c3@3 b2 c3", C: "~ [c4,c5]!2 [d4,d5]!2 [e4,e5]!2 [g4,g5]",
  D: "~ g4!4 a4!2 c5", E: "[c3 d3 e3 a3 e2!2 [g2,d3,g3]@8 e4 g4]/2",
  F: "[[e4,a4]@3 [e4,a4]@2 [e4,a4] [e4,b4]@8 e4 g4]/2", // A5 E5
  G: "[[e4,a4]@3 [e4,b4]@2 [e4,c5] [e4,b4]@3 [e4,g4] e4@4 e4 g4]/2", // A5 E5 C E5 Em
  H: "[[e4,a4]@3 [e4,b4]@2 [e4,c5] [e4,d5]@3 c5 d5 e5 e5@2 e4@2]/2", I: "e4", J: "d#4 d4 c4 a3 c4@4",
  K: "c3 d3 e3 a3 e2!2 [g2,d3,g3]@2", L: "~@6 e4 g4", M: "[[e4,a4]@3 [e4,b4]@2 [e4,c5] [e4,d5]@3 c5 d5 e5 e5@4]/2",
  N: "e4@3 d#4", O: "d4",
})).s("gm_distortion_guitar").gain(0.8)

// chords · overdriven guitar · "Guiter2"
const overdriven_guitar = note(`<
  ~@8 A@2 B@2 A@2 C@2 D@8 A@8 D@8 A@8 E@2 F@2 G@2 H I A@6 J@2 K L K L K L K M N@2 O@2 P@2 Q@2 A@10 R@2 A@2 S@2 T@2 U@2
  V@2 W X A@2 Y@2 A@2 Z@10 AA@2 AB@2 AC@2 AD AE AF@3
>`.pickRestart({
  A: "[[a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4] a2 e2 [g2,d3,g3]@4 e2 c3@3 b2 c3]/2", // A5 G5
  B: "[[a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4] a2 e2 [g2,d3,g3]@3 [c4,c5]!2 [d4,d5]!2 [e4,e5]!2 [g4,g5]]/2", // A5 G5 C D E G
  C: "[[a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4] a2 e2 [g2,d3,g3]@3 e4@2 e4 e4@4]/2", // A5 G5
  D: "[a2 e3 c4 a3 f4 a3 [d4,g4]@4 g2 c3@3 b2 c3]/2", E: "[[e4,a4]@3 [e4,a4]@2 [e4,a4] [e4,b4]@8 e4 g4]/2",
  F: "[[e4,a4]@3 [e4,b4]@2 [e4,c5] [e4,b4]@3 [e4,g4] e4@4 e4 g4]/2", // A5 E5 C E5 Em
  G: "[[e4,a4]@6 [e4,b4]@4 c5@2 d5@6 c5@2 d5@2 e5@2 e5@2 g5@2 e5 g5 e5 d#5]/2", // A5 E5
  H: "e5 g5 e5 d#5 e5 g5 e5 d#5 e5 [e5,g5] d5 e5 e5@2 d5 c5", I: "g3 ~",
  J: "[[a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4] a2 e2 [g2,d3,g3]@10]/2", K: "a2 e3 c4 a3 f4 c4 g4 d4",
  L: "g3@3 c3@3 b2 c3", M: "g3 d3 g2 c3@2 c3 b2 c3", N: "[[a2,e3,a3] ~ [a2,e3,a3] ~ d6 g6 b6@3 g6 d6 b5@2 d6 g6 b6]/2",
  O: "[[a2,e3,a3] ~ [a2,e3,a3] ~ b6 g6 d6@3 a5 f#6@2 d5 b5 g5@2]/2", // A5
  P: "[[a2,e3,a3] ~ [a2,e3,a3] ~ d6 g6 b6@4 b6 g6 d6 b5 g5@2]/2", Q: "[[a2,e3,a3] ~ [a2,e3,a3] ~ d6 g6 b6@8 ~@2]/2",
  R: "[[a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4] a2 e2 [g2,d3,g3]@3 a5!5 a5@2]/2", // A5 G5
  S: "[[a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4] a2 e2 [g2,d3,g3]@3 g2!5 e4 g4]/2", // A5 G5
  T: "[[e4,a4]@3 [e4,a4]@2 [e4,a4] [e4,b4]@6 [e4,b4]@2 e4 g4]/2", // A5 E5
  U: "[[e4,a4]@6 [e4,b4]@4 [e4,c5]@2 [e4,b4]@6 [e4,g4]@2 e4@6 e4!2 e4@2 g4@2]/2", // A5 E5 C E5 Em
  V: "[[e4,a4]@4 [e4,a4]@2 [e4,b4]@4 [e4,c5]@2 d5@6 c5@2 d5@2 e5@2 e5@2 g5@2 e5 g5 e5@2]/2", // A5 E5 C
  W: "e5 g5 e5 d#5 e5 g5 e5 d#5 e5@2 ~@6", X: "~ e2 d2@14",
  Y: "[[a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4] a2 e2 [g2,d3,g3]@4 e4@2 g4@2 a4@2]/2", // A5 G5
  Z: "[[a2,e3,a3,e4,a4] a2!2 [a2,e3,a3,e4,a4] a2 e2 [g2,d3,g3]@3 e2 c3@2 c3@2 c3@2]/2", // A5 G5
  AA: "[[a2,e3,a3,e4,a4]@2 a2 [b2,f#3]@2 ~ [c3,g3,c4,e4]@4 ~@2 e2 g2 c3 b2]/2", // A5 B5 C
  AB: "[[a2,e3,a3]@2 a2 [b2,f#3]@2 ~ [e2,b2,e3]@10]/2", // A5 B5 E5
  AC: "[[a2,e3,a3,e4,a4]@2 a2 [b2,f#3]@2 ~ [c3,g3]@4 ~@2 e2 g2 c3 b2]/2", AD: "[a2,e3,a3]@4 a2@2 ~ [b2,f#3]@8 ~",
  AE: "~ [e3,d4,f#4,b4]@15", AF: "[~ e3@19 [e3,d4,f#4,b4]@14 ~@14]/3",
})).s("gm_overdriven_guitar").gain(0.64)

// bass · electric bass finger · "Bass"
const bass = note(`<
  ~@8 A B A C A B A D A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A E F@2 G@2 F@2 H@2 A B A B A B I@2
  J@2 K L M@2 N O P B P B Q B Q R A B A B A B A B A B A R A B A E F@2 S@2 F@2 T U A B A B A B A V A W A W A W A W X@2
  Y@2 Z AA AB AC@4
>`.pickRestart({
  A: "a1!6 g1!2", B: "g1!2 e1 c2@3 b1 c2", C: "g1!2 e1 c2@3 b1 g1", D: "g1!2 e1 c2@2 g1@3", E: "g1!6 g1@2",
  F: "[a2 a1!2 a2 a1!2 [g2,d3]@4 e1 c2@3 b1@2]/2", G: "[a2 a1!2 a2 a1!2 [g2,d3]@4 e1 c2@2 b1 g1@2]/2",
  H: "[a2 a1!2 a2 a1!2 [g2,d3]@10]/2", I: "[a1!6 g1 g2@9]/2", J: "[a2@6 [g2,d3]@4 e1 c2@2 c2 b1 c2]/2",
  K: "a1@3 a2@2 a2 g2 d3", L: "g2@2 e1 c2@3 b1 c2", M: "[a1@5 e1 g1@4 e1 c2@3 b1 c2]/2", N: "a1@4 ~ a2 g2 d3",
  O: "g2@2 e1 c2@3 b1 g1", P: "a1 ~ a1 ~ a1!2 g1!2", Q: "a1 ~ a1!4 g1!2", R: "g1!2 e1 c2@2 b1 g1@2",
  S: "[a2 a1!2 a2 a1!2 [g2,d3]@4 e1 c2@2 e2 c2@2]/2", T: "a2 a1!2 a2 a1!2 [g2,d3]@2", U: "~@2 e1!4 ~ e1",
  V: "g1!2 e1 e2@2 d2 ~ g1", W: "g1!2 e1 c2!5", X: "[a1@2 a1 b1@2 b1 c2@3 c3!3 c3@2 e1 g1]/2",
  Y: "[a1@2 a1 b1@2 b1 e1@7 e1 c2 b1]/2", Z: "a1@2 a1 b1@2 b1 c2@2", AA: "e1!8", AB: "a1@4 a1@2 ~ b1@9",
  AC: "[~ e1@35 e2@14 ~@14]/4",
})).s("gm_electric_bass_finger").gain(0.64)

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

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

// drums · hihat
const hihat = s("hh").struct("<~@64 A B@7 C B C B C B C B ~@51>".pickRestart({
  A: "x ~ x!6", B: "x!8", C: "~ x ~ x!5",
})).gain(0.41)

// drums · low tom
const low_tom = s("lt").struct("<~@121 [~@12 x!4] ~ [~@8 x!3 ~ x!3 ~] ~ [x!3 ~ x!3 ~@9] ~@5>").gain(0.46)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@121 A ~ B ~ C ~@2 D ~@2>".pickRestart({
  A: "~@6 x!6 ~@4", B: "x!3 ~ x!3 ~@9", C: "~@8 x!3 ~ x!3 ~", D: "x!2 ~ x!2 ~ x ~@2 x ~@6",
})).gain(0.46)

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

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

stack(distortion_guitar, overdriven_guitar, bass, kick, snare, hihat, low_tom, open_hat, mid_tom, ride, crash)

More by Van Halen