Strudelify

My My, Hey Hey (Out of the Blue)

Neil Young

KeyA minorTempo134 bpm
0:00/0:00
// My My, Hey Hey (Out of the Blue) — Neil Young
// 134 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: ch 7 "Bass cpoint (high)" named as a bass, played on electric bass finger (its electric guitar clean patch is not one); ch 8 "Bass counterpoint" named as a bass, played on electric bass finger (its overdriven guitar patch is not one)
// note: duplicate parts dropped: ch 6 "Solo assist" french horn (copy of ch 5 "Solo" overdriven guitar)
// note: Full arrangement: all 88 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): Lead v/g (high/fill).
setcpm(134/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.

// other · electric guitar clean · "Lead/cpoint"
const electric_guitar_clean = note(`<
  A B C D A B C@2 E@2 F ~ G H F I J K L M E@2 F ~ N@2 F ~ O P F I J K L M Q@3 ~ N@2 F ~ O P F I J K L M R@3 ~@17 E@2 F ~
  G H F I J K L M A S T ~
>`.pickRestart({
  A: "~@4 e2@9 ~@3", B: "~@4 d2@9 ~@3", C: "~@4 f2 ~ e2 ~ f2 ~ e2 ~ f2 ~ e2 ~",
  D: "~@4 f2 ~ e2 ~ f2 ~ e2 ~ [a1,c2,f2] ~ e2 ~", E: "[~@8 e3@4 ~@2 d3@5 ~@5 e3@4 ~@2 d3@2]/2", F: "~ c3 a2 ~@13",
  G: "~@8 e3@3 ~ e3@3 ~", H: "d3@3 ~ c3@3 ~ e3 ~ e3@3 ~ d3@2", I: "~@14 g2 ~", J: "e3@5 ~@3 e3@3 ~ e3 ~ g3@2",
  K: "~@2 e3@11 ~@3", L: "~@4 e3@3 ~ e3@3 ~ d3 ~ g3@2", M: "~@2 e3@9 ~@5",
  N: "[~@8 e3 ~ e3 ~ e3 ~ d3@5 ~@3 a2 ~ e3 ~ e3 ~ e3 ~ d3@2]/2", O: "~@6 a2 ~ e3@3 ~ e3@3 ~",
  P: "d3@3 ~ c3 ~ c3 ~ e3 ~ e3@3 ~ d3@2", Q: "[~@4 g3 ~ g3 ~ g3 ~ g3 ~ g3 ~ f3@5 ~@3 f3 ~ g3 ~ g3 ~ g3 ~ e3@5 ~@13]/3",
  R: "[~@6 g3 ~ g3@3 ~ g3 ~ f3@5 ~@3 f3 ~ g3 ~ g3 ~ g3 ~ e3@5 ~@13]/3", S: "~@4 g2@8 a0 f1 a1 c2", T: "e2",
})).s("gm_electric_guitar_clean").gain(0.6).pan(0.3)

// other · overdriven guitar · "Solo"
const overdriven_guitar = note("<~@56 A@2 B ~ C D E F G H I@2 J@2 K@2 ~@16>".pickRestart({
  A: "[~@8 e3@6 d3@5 ~@5 e3@4 ~@2 d3@2]/2", B: "~ c3 a2@5 ~@9", C: "~@8 e3 ~ e3 ~ e3@2 e3 ~",
  D: "d3@3 ~ c3@3 ~ e3@2 e3@4 d3@2", E: "~ c3 a2@13 ~", F: "~@7 g2", G: "e3@5 ~@3 e3@2 e3 ~ e3 ~ g3@2",
  H: "~@2 e3@13 ~", I: "[~@4 e3@3 ~ e3@3 ~ d3 ~ g3@4 e3@9 ~@5]/2", J: "[~@8 e3@4 ~@2 d3@5 ~@5 e3@4 ~@2 d3@2]/2",
  K: "[~ c3 a2@19 ~@11]/2",
})).s("gm_overdriven_guitar").gain(0.59).pan(0.4)

// chords · electric bass finger · "Bass cpoint (high)"
const electric_bass_finger = note(`<
  A B C@2 A B C@2 D E F@2 G H F@2 I@2 J@2 D E F@2 D E F@2 G H F@2 K@2 L@2 D E F@2 D E F@2 G H F@2 I@2 J@2 D E F@2 D E
  F@2 G H F@2 I@2 J@2 D E F@2 D E F@2 G H F@2 I@2 J@2 A M ~@2
>`.pickRestart({
  A: "~@4 [a3,c4]@9 ~@3", B: "~@4 [g3,b3]@9 ~@3", C: "~@4 [a3,c4] ~@3 [a3,c4] ~@3 [a3,c4] ~@3",
  D: "~@4 [c4,e4,a4]@3 ~@9", E: "~@4 [b3,d4,g4]@3 ~@9", F: "~@4 [a3,c4,f4] ~ b3 ~ [a3,c4,f4] ~ b3 ~ [a3,c4,f4] ~ b3 ~",
  G: "~@4 [c4,e4]@3 ~@5 [a4,c5]@3 ~", H: "~@4 [d4,g4]@3 ~@9", I: "[[g4,c5]@5 ~@9 b4@12 ~@6]/2",
  J: "[[c4,e4,a4]@3 ~@5 [a4,c5]@3 ~@3 [a4,c5]@10 ~@4 [a3,c4,f4] ~ e4 ~]/2", K: "[[g4,c5]@5 ~@9 b4@8 ~@10]/2",
  L: "[[c4,e4,a4]@3 ~@5 [a4,c5]@3 ~@3 a4@10 ~@4 [a3,c4,f4] ~ e4 ~, ~@7 c5@4 ~@5]/2", M: "~@4 [b3,d4]@9 ~@3",
})).s("gm_electric_bass_finger").gain(0.64).pan(0.6)

// bass · electric bass finger · "Bass counterpoint"
const bass = note(`<
  A B C@2 A B C@2 D E F@2 G H F@2 I@2 J@2 D E F@2 D E F@2 G H F@2 K@2 L@2 D E F@2 D E F@2 G H F@2 I@2 J@2 D E F@2 D E
  F@2 G H F@2 I@2 J@2 D E F@2 D E F@2 G H F@2 I@2 J@2 A M ~@2
>`.pickRestart({
  A: "~@4 [a2,c3]@9 ~@3", B: "~@4 [g2,b2]@9 ~@3", C: "~@4 [a2,c3] ~@3 [a2,c3] ~@3 [a2,c3] ~@3",
  D: "~@4 [c3,e3,a3]@3 ~@9", E: "~@4 [b2,d3,g3]@3 ~@9", F: "~@4 [a2,c3,f3] ~ b2 ~ [a2,c3,f3] ~ b2 ~ [a2,c3,f3] ~ b2 ~",
  G: "~@4 [c3,e3]@3 ~@5 [a3,c4]@3 ~", H: "~@4 [d3,g3]@3 ~@9", I: "[[g3,c4]@5 ~@9 b3@12 ~@6]/2",
  J: "[[c3,e3,a3]@3 ~@5 [a3,c4]@3 ~@3 [a3,c4]@10 ~@4 [a2,c3,f3] ~ e3 ~]/2", K: "[[g3,c4]@5 ~@9 b3@8 ~@10]/2",
  L: "[[c3,e3,a3]@3 ~@5 [a3,c4]@3 ~@3 a3@10 ~@4 [a2,c3,f3] ~ e3 ~, ~@7 c4@4 ~@5]/2", M: "~@4 [b2,d3]@9 ~@3",
})).s("gm_electric_bass_finger").gain(0.56).pan(0.4)

// bass · electric bass pick · "Bass"
const bass_2 = note(`<
  A@3 B C@3 B C@3 D E@3 D F G H I C@3 D C@3 D E@3 D F G H I C@3 D C@3 D E@3 D F G H I C@3 D C@3 D E@3 D F G H I C@3 D
  C@3 D E@3 D F G H I J@2 K@2
>`.pickRestart({
  A: "[a1@5 ~@3 a1 ~ b1 ~ c2 ~@3 g1@5 ~@3 b1 ~ a1 ~ g1 ~ a1@12 ~@6, ~@14 d2@7 ~@27]/3", B: "a1@7 ~@9",
  C: "[a1@5 ~@3 a1 ~ b1 ~ c2 ~@3 g1@5 ~@3 b1 ~ a1 ~ g1 ~@3 f2@10 ~@6, ~@14 d2@7 ~@9 a1@12 ~@6]/3", D: "[a1,f2]@11 ~@5",
  E: "[a1@5 ~@3 a1 ~ b1 ~ c2 ~@3 g1@5 ~@3 b1 ~ a1 ~ g1 ~@3 f2@11 ~@5, ~@14 d2@7 ~@9 a1@13 ~@5]/3",
  F: "c1@5 ~@3 c1 ~ d1 ~ e1 ~ f1 ~", G: "g1@5 ~@3 g1@3 ~ f1 ~ g1 ~", H: "a1@5 ~@3 a1@3 ~ g1@3 ~",
  I: "f1@5 ~@3 a1@3 ~ a0@3 ~", J: "[a1@5 ~@3 a1 ~ b1 ~ c2 ~@3 g1@5 ~@3 b1 ~ a1@2 g1@3 ~, ~@14 d2@7 ~@11]/2",
  K: "[a1@5 ~@3, f2@9 ~@7]/2",
})).s("gm_electric_bass_pick").gain(0.52).pan(0.7)

// chords · electric guitar muted · "Chords"
const electric_guitar_muted = note(`<
  ~@8 A B C@2 A B C@2 D E A F A B C@2 A B C@2 A B C@2 D E A F A B C@2 A B C@2 A B C@2 D E A F A B C@2 A B C@2 A B C@2 D
  E A F A B C@2 A B C@2 A B C@2 D E G F H I J K
>`.pickRestart({
  A: "[a2,c3,e3]@11 ~@5", B: "[g2,b2,d3]@11 ~@5", C: "[a2,c3,f3]@11 ~@5", D: "[c3,e3,g3]@11 ~@5",
  E: "[g2,b2,d3,e3]@11 ~@5", F: "[c3,f3,a3]@11 ~@5", G: "[a2,c#3,e3]@11 ~@5", H: "[a2,c3,e3]", I: "[g2,b2,d3]",
  J: "[c3,e3,f3,a3]", K: "[a2,c#3,e3]@3 ~@13",
})).s("gm_electric_guitar_muted").gain(0.54).pan(0.8)

// other · electric guitar clean · "Guitar 1"
const electric_guitar_clean_2 = note(`<
  A@3 B C@3 D C@3 E C@3 E F G H I C@3 E C@3 E C@3 E F G H I C@3 E C@3 E C@3 E F G H I C@3 E C@3 E C@3 E F G H I C@3 E
  C@3 E C@3 J F G H I K@2 E L
>`.pickRestart({
  A: "[a2@8 a2@2 b2@2 c3@2 ~@2 g2@6 ~@2 b2@2 a2@2 g2@2 a2@13 ~@5, ~@7 d3@4 ~@13]/3", B: "a2@7 ~@9",
  C: "[a2@6 ~@2 a2@2 b2@2 c3@2 ~@2 g2@6 ~@2 b2@2 a2@2 g2@2 ~@2 f3@11 ~@5, ~@14 d3@8 ~@8 a2@13 ~@5]/3", D: "a2@3 ~@13",
  E: "[a2,f3]@11 ~@5", F: "c2@3 ~ c2 d2 e2 f2", G: "g2@6 ~@2 g2@3 ~ f2@2 g2@2", H: "a2@6 ~@2 a2@3 ~ g2@3 ~",
  I: "f2@6 ~@2 a2@3 ~ a1@3 ~", J: "[f2,a2]@11 ~@5",
  K: "[a2@6 ~@2 a2@2 b2@2 c3@2 ~@2 g2@6 ~@2 b2@2 a2@2 g2@3 ~, ~@7 d3@4 ~@5]/2", L: "[b1,a2]@3 ~@13",
})).s("gm_electric_guitar_clean").gain(0.56).pan(0.7)

// chords · violin · "Last note" · Am
const violin = note("<~@86 [[a2,c3]] ~>").s("gm_violin").gain(0.72).pan(0.4)

// drums · kick
const kick = s("bd").struct(`<
  ~@3 A B@3 C B@3 C B@3 C B@3 C B@3 C B@3 C B@3 C B@7 C B@3 C B@3 C B@7 C B@3 C B@3 C B@3 C B@3 C B@3 C B@3 C B@5 D ~ D
>`.pickRestart({
  A: "~@7 x", B: "x!2", C: "x ~@3 x ~@2 x", D: "x",
})).gain(0.66)

// drums · snare
const snare = s("sd").struct("<~@3 [~@3 x] [~ x ~ x]!81 ~@2 x>").gain(0.59)

// drums · hihat
const hihat = s("hh").struct("<~@3 [~@6 x!2] [x!8]!81 x ~@2>").gain(0.52)

// drums · crash
const crash = s("cr").struct(`<
  ~@4 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@7 A ~@3 A ~@3 A ~@7 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@6 A
>`.pickRestart({
  A: "x",
})).gain(0.52)

stack(
  electric_guitar_clean, overdriven_guitar, electric_bass_finger, bass, bass_2, electric_guitar_muted,
  electric_guitar_clean_2, violin, kick, snare, hihat, crash
)

More by Neil Young