Strudelify

Old Man

Neil Young

KeyA minorTempo75 bpm
0:00/0:00
// Old Man — Neil Young
// 75 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 4, 4/4 at bar 4, 2/4 at bar 6, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: ch 1 "Piano" named as a piano, played on piano (its acoustic guitar nylon patch is not one)
// note: Full arrangement: all 57 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(75/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 · acoustic bass · "Bass"
const bass = note(`<
  ~@2 A B C D E F G H I J K L M N O P Q R S T Q U Q V M W E L M X M Y C N Z AA Q V Q V Q U S AB B AC Q A AD AE AF K AG
  AH AI
>`.pickRestart({
  A: "f2@3 ~ c2@3 ~ f2@3 ~ c2@3 ~", B: "f2@3 ~ c2@3 ~ d2@3 ~ a1@3 ~", C: "d2@3 ~ a1@3 ~ f2@3 ~ c2@3 ~",
  D: "f2@3 ~ c2@3 ~ f2@3 ~ f2 ~ f2 ~", E: "d2@3 ~ d2@3 ~ f2@3 ~ f2@3 ~", F: "c2@3 ~ g2@3 ~ g2@3 ~ d2@3 ~",
  G: "d2@3 ~ a2@3 ~ f2@3 ~ f2@3 ~", H: "c2@3 ~ c2@3 ~ f2@3 ~ f2 ~ f2 ~", I: "d2@3 ~ d2@3 ~ f2@3 ~ c2@3 ~",
  J: "c2@3 ~ c2@3 ~ g2@3 ~ g2 ~ g2 ~", K: "d2@3 ~ a2@3 ~ f2@3 ~ c2@3 ~", L: "c2@3 ~ g2@3 ~ f2@3 ~ c2@3 ~",
  M: "d2@3 ~ d2 ~ d2 ~ f2@3 ~ c2@3 ~", N: "c2@3 ~ g1@3 ~ g2@3 ~ d2@3 ~", O: "d2@3 ~ a1@3 ~ c2@3 ~ g2@3 ~",
  P: "f2@3 ~ c2@3 ~ g2@3 ~ d2@3 ~", Q: "d2@3 ~ a1@3 ~ d2@3 ~ a1@3 ~", R: "a1@3 ~ a1 ~ a1 ~ e2@3 ~ b1@3 ~",
  S: "d2@4 a1@3 ~ d2@3 d2!2 ~ d2 ~", T: "a1@3 ~ c2 ~ d2 ~ e2@3 ~ b1@3 ~", U: "a1@3 ~ e1@3 ~ e2@3 ~ b1@3 ~",
  V: "a1@3 ~ e2@3 ~ e2@3 ~ b1@3 ~", W: "c2@3 ~ g1@3 ~ g2@3 ~ g2@3 ~", X: "c2@3 ~ c2@3 ~ g2@3 ~ d2@3 ~",
  Y: "c2@3 ~ g1@3 ~ f2@3 ~ c2@3 ~", Z: "d2@3 ~ d2 ~ d2 ~ c2@3 ~ g1@3 ~", AA: "f2@3 ~ f2@3 ~ g2@3 ~ d2@3 ~",
  AB: "a1@3 ~ e1@3 ~ e2@3 ~ e2 ~ e2 ~", AC: "d2@3 ~ a2@3 ~ d2@3 ~ a2@3 ~", AD: "f2@3 ~ c2@3 ~ d2@3 ~ a2@3 ~",
  AE: "d2@3 ~ a2@3 ~ f2@4 c2@3 ~", AF: "f2@3 f2!2 ~ f2 ~ f2@3 ~ c2@3 ~", AG: "c2@3 ~ c2 ~ c2 ~ g2@3 ~ b1 ~ g1 ~",
  AH: "d2@4 a2@3 ~ d2@3 d2 g2 ~ f#2 ~", AI: "d2@3 ~ a1@3 ~ d2@3 ~@5",
})).s("gm_acoustic_bass").gain(0.27)

// chords · piano
const piano = note(`<
  ~@2 A B C D E F E G H I J K E L M N O P Q R Q S Q T U V C G C F W G X Y Z AA Q S O AB O AC Q S AD AE O AF AG X AH AI
  AJ Q AK
>`.pickRestart({
  A: "f3@2 a3 ~ c3@2 a3 ~ f3@2 a3 ~ c3@2 a3 ~", B: "f2@2 a3 ~ c2@2 a3 ~ d3@2 a3 ~ a2@2 a3 ~",
  C: "d3@2 f#3 ~ a2@2 a3 ~ f2@2 f3 ~ c2@2 f3 ~", D: "f2@2 a3 ~ c2@2 a3 ~ f3@2 a3 ~ c3@2 a3 ~",
  E: "d3@2 f#3 ~ a2@2 f#3 ~ f2@2 f3 ~ c2@2 a3 ~", F: "c3@2 e3 ~ g2@2 e3 ~ g2@2 g3 ~ d2@2 b3 ~",
  G: "c3@2 e3 ~ g2@2 g3 ~ f3@2 a3 ~ c3@2 a3 ~", H: "d3@2 a3 ~ a2@2 a3 ~ f2@2 a3 ~ c2@2 a3 ~",
  I: "c3@2 e3 ~ g2@2 g3 ~ g2@2 g3 ~ d2@2 g3 ~", J: "d3@2 a3 ~ a2@2 a3 ~ f2@2 f3 ~ c2@2 f3 ~",
  K: "c3@2 e3 ~ g2@2 g3 ~ f2@2 f3 ~ c2@2 f3 ~", L: "c3@2 e3 ~ g2@2 e3 ~ g2@2 g3 ~ d2@2 g3 ~",
  M: "d3@2 a3 ~ a2@2 a3 ~ c3@2 e3 ~ g2@2 e3 ~", N: "f2@2 f3 ~ c2@2 f3 ~ g2@2 g3 ~ d2@2 b3 ~",
  O: "d3@2 f#3 ~ a2@2 f#3 ~ d3@2 f#3 ~ a2@2 f#3 ~", P: "a2@2 c3 ~ e2@2 e3 ~ e2@2 d3 ~ b1@2 d3 ~",
  Q: "d3@2 a3 ~ a2@2 a3 ~ d3@2 f#3 ~ a2@2 a3 ~", R: "a2@2 c3 ~ e2@2 c3 ~ e2@2 d3 ~ b1@2 e3 ~",
  S: "a2@2 c3 ~ e2@2 c3 ~ e2@2 d3 ~ b1@2 d3 ~", T: "a2@2 e3 ~ e2@2 e3 ~ e2@2 d3 ~ b1@2 e3 ~",
  U: "d3@2 f#3 ~ a2@2 a3 ~ f2@2 f3 ~ c2@2 a3 ~", V: "c3@2 e3 ~ g2@2 g3 ~ g2@2 b2 ~ d2@2 b2 ~",
  W: "d3@2 f#3 ~ a2@2 f#3 ~ f3@2 a3 ~ c3@2 a3 ~", X: "d3@2 f#3 ~ a2@2 f#3 ~ f2@2 a3 ~ c2@2 a3 ~",
  Y: "c3@2 g3 ~ g2@2 g3 ~ g2@2 b2 ~ d2@2 b2 ~", Z: "d3@2 f#3 ~ a2@2 f#3 ~ c3@2 e3 ~ g2@2 e3 ~",
  AA: "f2@2 f3 ~ c2@2 a3 ~ g2@2 g3 ~ d2@2 g3 ~", AB: "a2@2 c3 ~ e2@2 c3 ~ e2@2 e3 ~ b1@2 e3 ~",
  AC: "a2@2 e3 ~ e2@2 e3 ~ e3@2 g3 ~ b2@2 g3 ~", AD: "f2@2 f3 ~ c2@2 f3 ~ d3@2 a3 ~ a2@2 a3 ~",
  AE: "d3@2 f#3 ~ a2@2 f#3 ~ d3@2 a3 ~ a2@2 a3 ~", AF: "f2@2 f3 ~ c2@2 f3 ~ f2@2 f3 ~ c2@2 f3 ~",
  AG: "f2@2 f3 ~ c2@2 a3 ~ d3@2 f#3 ~ a2@2 f#3 ~", AH: "f2@2 f3 ~ c2@2 a3 ~ f2@2 f3 ~ c2@2 f3 ~",
  AI: "d3@2 a3 ~ a2@2 a3 ~ f2@2 f3 ~ c2@2 a3 ~", AJ: "c3@2 e3 ~ g2@2 e3 ~ g2@2 b2 ~ d2@2 b2 ~",
  AK: "d3@2 f#3 ~ a2@2 f#3 ~ d3@2 ~@6",
})).s("gm_piano").gain(0.3).pan(0.2)

// chords · acoustic guitar steel · "Guitar"
const acoustic_guitar_steel = note(`<
  ~@2 A B@3 C D E F G H G I J K L M N O P Q N R P S G T U I V W X Y Z AA AB AC AD AE P AF P R AG AH AI AJ AK AL AM@3 AN
  AO AG AP
>`.pickRestart({
  A: "~@7 [f4,a4]@9, [a3,c4]", // F Am
  B: "[~@5 c4@3 ~@7 [f#4,a4]@9 ~@12 f4@4 ~@5 c4@3, [f4,a4]@8 ~@24 a3@8 ~@3 a3@5, ~@3 a3@5 [a3,d4]@16 [c4,a4]@16 [f4,a4]@8]/3", // F#m F D5 F
  C: "~@5 d4 ~@2 a3@3 ~@2 c4@3, [a3,f#4]@8 a4@7 ~, ~@11 a3@5", D: "c4@3 [e4,g4] ~ c4 [e4,g4] ~@6 b3@3, g3 [d4,g4]",
  E: "a3@3 ~@2 d4@3 c4@3 ~@3 c4@2, a4@7 ~ f4@8, ~@3 a3@5 ~@3 a3@5",
  F: "~@5 g3@3 ~@5 a3@3, [g3,c4]@5 ~@3 [c4,f4]@8, ~@3 g4@4 ~@9", // C5 F5
  G: "~@5 a3@3 a3@3 ~@2 c4@3, [d4,f#4]@8 a4@7 ~, ~@11 a3@5", // D
  H: "~@3 [e4,g4]@5 d4@3 ~@3 d4@2, ~ g3@7 ~@3 b3@5, ~ c4@3 g4@4", I: "~@5 c4 ~@7 a3@3, [g3,e4] [c4,f4]",
  J: "~@5 a3@3 c4@3 ~@3 c4@2, [d4,f#4] f4, ~@11 a3@5", // D
  K: "c4@3 [e4,g4] ~ c4 [e4,g4] ~ d4@3 [g4,b4] ~ d4 [g4,b4] ~, g3 b3", // Em G
  L: "~@5 d4 ~@7 c4@3, [a3,f#4] [e4,g4], ~@11 g3@5", M: "~@5 c4@3 d4@3 ~@3 d4@2, [f4,a4] g4, ~@3 a3@5 ~@3 b3@5",
  N: "~@7 [f#4,a4]@9, [a3,d4]", O: "~@3 [a3,c4]@5 g3@3 ~@2 b3@3, ~ e3@7 ~@3 g3@5, ~@2 g3@6 e4@7 ~",
  P: "~@3 f#4, [d4,a4], ~ a3", Q: "~@5 g3@3 g3@3 ~@3 g3@2, [a3,c4] b3, ~@3 e3@5 ~@3 e3@5",
  R: "g3@3 [a3,c4] ~ g3 [a3,c4] ~@6 g3 ~@2, e3 [e3,b3]", S: "~@3 [a3,c4]@5 ~@5 g3 ~@2, ~ e3@7 [e3,b3]@8, ~ g3@3 ~@4",
  T: "c4@3 ~@3 c4@2 d4@3 ~@3 d4@2, e4 g4, ~@3 g3@5 ~@3 b3@5",
  U: "d4@3 [f#4,a4] ~ d4 [f#4,a4] ~ c4@3 ~@3 c4@2, a3 f4, ~@11 a3@5", // F#m
  V: "~@5 d4 ~@2 c4@3 ~@3 c4@2, [a3,f#4] f4, ~@11 a3@5", W: "~@5 g3@3 ~@5 b3@3, [c4,e4] [d4,g4]",
  X: "d4@3 [f#4,a4] ~ d4 [f#4,a4] ~@6 c4@3, a3 [f4,a4], ~@11 a3@5", Y: "~@5 g3@3 ~@5 c4 ~@2, [c4,e4] [a3,f4]",
  Z: "~@5 a3@3 ~@5 c4 ~@2, [d4,f#4] [a3,f4]", AA: "c4@3 ~@3 c4@2 ~@5 d4@3, e4 [g4,b4], ~@3 g3@5 ~@3 b3@5",
  AB: "~@5 d4 ~@7 g3@3, [a3,f#4] [c4,e4]", AC: "~@5 c4@3 ~@5 b3@3, [f4,a4] [d4,g4], ~@3 a3@5 ~@8",
  AD: "~@3 f#4, ~@3 a3@13, ~@7 d4@9", AE: "~@5 e3@3 ~@5 e3@3, [e3,g3]@5 ~@3 [g3,b3]@8, ~@3 c4@4 ~@9",
  AF: "g3@3 ~@3 g3@2 ~@5 e3@3, a3 [g3,b3], ~@3 e3@5 ~@8", AG: "~ d4, [a3,f#4,a4]",
  AH: "~@5 g3@3 ~@5 g3 ~@2, [a3,c4] ~, ~@3 e3@5 [e3,b3]@8", AI: "~@5 c4 ~@2 a3@3 ~@2 d4@3, [a3,f4]@8 a4@7 ~, ~@11 a3@5",
  AJ: "a3@3 ~@2 d4@3 a3@3 ~@2 d4@3, a4@7 ~ a4@7 ~, ~@3 a3@5 ~@3 a3@5", AK: "a3@4 ~ a3@3 a3@4 ~ a3@3, f#4!2",
  AL: "~@3 f4, [c4,a4], ~ a3", // F
  AM: "[~@5 c4 ~@9 [f#4,a4]@9 ~@12 f4@4 ~@5 a3@3, [a3,f4]@8 [a3,d4]@16 ~@3 a3@13 ~@8, ~@31 c4@9 [c4,f4]@8]/3", // F#m Dm D5 F5
  AN: "~@5 a3@3 ~@5 c4@3, [d4,f#4] [f4,a4], ~@11 a3@5", AO: "~@5 c4 ~@2 b3@3 ~@2 d4@3, [g3,e4]@8 b4@7 ~, ~@11 b3@5",
  AP: "a3 ~ d4@2, f#4 ~, ~@5 a3@11",
})).s("gm_acoustic_guitar_steel").gain(0.24).pan(0.7)

// drums · kick
const kick = s("bd").struct(`<
  ~@10
  [x ~@3 x ~@3 x ~@2 x!2 ~@3]!36
  [x!4]!3
  [x ~@3 x ~@3 x ~@2 x!2 ~@3]
  [x!4]
  [x ~@2 x!2 ~@3 x ~@3 x ~@3]!2
  [x ~@3 x ~@3 x ~@2 x!2 ~@3]!3
  [x!3 ~]
>`).gain(0.24)

// drums · kick · soft notes
const kick_soft = s("bd").struct(`<
  ~@10
  [~@3 x ~@12]!36
  [~@3 x ~@7 x ~@4]!3
  [~@3 x ~@12]
  [~@3 x ~@7 x ~@4]
  [~@11 x ~@4]!2
  [~@3 x ~@12]!4
>`).gain(0.12)

// drums · rim
const rim = s("rim").struct("<[x!2] [x!4] ~@55>").gain(0.28)

// drums · hihat
const hihat = s("hh").struct("<~@10 [~ x ~ x ~ x ~ x]!46 [~ x ~ x ~@4]>").gain(0.24)

stack(bass, piano, acoustic_guitar_steel, kick, kick_soft, rim, hihat)

More by Neil Young