Strudelify

He Ain't Heavy... He's My Brother

Olivia Newton-John

KeyC majorTempo100 bpm
0:00/0:00
// He Ain't Heavy... He's My Brother — Olivia Newton-John
// 100 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 89 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(100/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 · synth bass 2
const bass = note(`<
  ~ A B C D E F G H I J K L M N O P Q R S T E F G H I J K L M N O P Q R S T U V@2 W X F Y Z AA AB AC AD E F G H I J K L
  M N O P Q R S T E F G H I J K L AE AF AG AH AE AF AG AH AI AJ AK AL A B C D
>`.pickRestart({
  A: "c2@3 c2", B: "g2@3 g2", C: "f2@3 d2", D: "g2@7 ~@9", E: "c2@4 c2@4 c2@3 ~@2 c3@3, ~@6 c2 ~", F: "g2!4",
  G: "f2@4 f2@3 ~ f2@3 ~ f2 e2@3", H: "d2@4 d2@3 d2 g2@3 ~ g2@3 g2", I: "a2@3 ~ a2@3 a2 e2@2 a2 a2@3 e2@2",
  J: "a#2@3 ~ a#2@3 f2 a#2 ~ a#2 ~@3 a#2@2, ~@11 f2@5", K: "g2@4 g2@3 d2 g2@3 ~ g2@4",
  L: "g2@3 ~ g2@3 d2 g2@3 g2@3 g2 ~", M: "c3@3 ~ c3@3 g2 c3@2 ~ c3@2 c3 ~ c3", N: "g2@4 g2@3 d2 g2@2 ~ g2@3 g2@2",
  O: "a2@3 ~ a2@3 e2 a2@2 ~ a2@3 a2@2", P: "g#2@3 ~ g#2@3 d#2 g#2!2 ~ g#2@2 ~ g#2@2", Q: "c3@4 c3@3 g2 c3@3 c3@3 c3@2",
  R: "d2@6 e2 f2 g2@3 g2@3 g2@2", S: "c3@4 c3@4 c3@2 ~ c3@3 c3@2", T: "d2@4 d2 e2 f2@2 g2@3 g2@2 ~ g2 ~",
  U: "f2 ~ f2@3 ~ f2@5 ~ f2@3 ~", V: "f2 ~ f2 ~@3 f2@5 ~ f2@3 ~", W: "f2 ~ f2 ~@3 f2@5 ~ f2@4", X: "e2!2 b1 e2",
  Y: "f2@4 f2@3 f2 d2@4 d2@4", Z: "a2@3 ~ a2@3 a2 g2@2 ~ g2@3 g2 ~", AA: "f2@3 f2 e2@2 e2@2", AB: "d2@3 d2 e2@2 f#2@2",
  AC: "g2@7 d2 g2@3 ~ g2@2 d2@2", AD: "g2@13 ~@3", AE: "c3 ~ c3@5 g2 c3 ~@2 c3@3 a2@2", AF: "g2@4 g2@4 g2@4 d2 g2 d2@2",
  AG: "f2@4 f2@3 c2 f2 ~@2 f2@2 ~ f2@2", AH: "g2@3 ~ g2@3 ~ g2@3 g2 a2@2 b2@2", AI: "c3@4 c3@3 g2 c3@3 ~ c3@4",
  AJ: "d2@4 d2@3 d2 g2@4 g2@3 g2", AK: "c3@4 c3@3 ~ c3@4 c3@2 c3@2", AL: "d2@3 ~ d2@3 d2 g2@3 ~ g2@2 g2 ~",
})).s("gm_synth_bass_2").gain(0.8)

// chords · string ensemble 1
const string_ensemble_1 = note(`<
  ~@13 A B C D E F A G H@2 I J C K L@2 A B C D E F A G M N O P Q R S T U V W X H@2 I J C K L@2 A B C D E F A G ~@8 A B C
  Y A B C Y E F A G ~@4
>`.pickRestart({
  A: "[e4,g4,c5]", B: "[d4,g4,b4]@15 ~", C: "[e4,a4,c5]@15 ~", D: "[c5,d#5]@8 d5@4 c5@3 ~, g#4",
  E: "[e4,f4] e4@15, [g4,c5]", F: "[f4,a4,c5]@8 [g4,b4,d5]@7 ~", G: "[f4,a4]@2 [f4,a4]@2 [g4,b4]@2 b4 ~, ~@12 g4 ~@3",
  H: "[[c4,e4]@15 ~ [b3,d4]@15 ~, g4@31 ~]/2", I: "[c4,f4,a4]@12 [c4,f4,a4]@3 ~", J: "[d4,f4,a4] [d4,g4,b4]",
  K: "[f4,a#4,d5]@15 ~", L: "[c5@7 ~ b4@7 ~, g4@15 ~, ~@7 d5@8 ~]/2",
  M: "[f4,a4,c5] ~ [f4,a4,c5] ~@3 [f4,a4,c5]@6 [f4,c5]@4", N: "[g4,b4,d5]@5 ~ [g4,b4,d5]@5 ~ [g4,b4,d5]@3 ~",
  O: "[f4,a4,c5] ~ [f4,a4,c5] ~@3 [f4,a4,c5]@5 ~ [f4,a4,c5]@3 ~", P: "[g4,b4,d5]@2 ~ [g4,b4,d5]@4 ~",
  Q: "[g3,b3,e4], d#4 ~@15", R: "a#3@11 a#3@4 ~, [g3,d4]@15 ~", S: "e4 f4, [a3,c4]",
  T: "[c4,e4]@8 d4@3 e4@4 ~, a3@7 ~, d#4 ~@15", U: "[c4,f4,a4]", V: "[c4,f#4,a4]@15 ~",
  W: "g4 a4 g4 a4!2 b4 a4 b4 c5 d5 c5 d5!2 e5 d5 e5", X: "f5 ~@3", Y: "[b4,d5]@8 d5@4 b4@3 ~, g4",
})).s("gm_string_ensemble_1").gain(0.42)

// chords · piano
const piano = note(`<
  ~ A@2 B C D@2 E F G H I J K L M N O P Q R D@2 E F G H I J K L M N O P Q R S T U V W X Y Z AA@2 AB C D@2 E F G H I J K
  L M N O P Q R D@2 E F G H I J AC AD AE AF AC AD AE AF AG AH AI AJ A@2 B C
>`.pickRestart({
  A: "[[g4,c5,e5]@4 ~@3 g3 ~@4 c4@2 ~ c3 [b4,d5]@4 ~@4 [g4,b4,d5]@2 d3 ~@2 d3 g3 b4, c3@15 ~ g2@14 ~@2, c4@7 ~ c4@2 g3 c5@3 [c5,e5]@2 g3@6 d3@2 ~@8, ~@4 e5@10 ~@9 g3@3 ~ g3@2 ~@3, ~@4 [g4,c5]@5 g4@4 ~ g4@6 [g4,b4,d5]@4 ~@4 [g4,b4,d5]@3 ~]/2", // C Bm G C C5 G
  B: "[a4,c5,f5]@4 ~@2 c4 ~ a4@2 c4 ~@2 c4 ~ c5, f3@15 ~, f4@6 ~ f4@3 ~ f4@2 ~ f4@2, ~@4 c5@8 a4@3 ~, ~ [a4,f5] f5@2", // F Dm
  C: "[g3,g4,b4,d5,g5]@7 ~", // G
  D: "[[g4,c5,e5]@3 ~ [g4,c5,e5]@3 g3 [c4,g4,c5,e5]@2 g3 ~@3 c4 ~ [b4,d5]@4 ~@2 d3 ~@2 d3 ~@2 d3 g3@2 ~, c3@15 ~ g2@15 ~, c4@7 ~@4 c4@2 g3@2 ~ g3@6 ~ g3@3 g3@2 ~@4, ~@12 [c5,e5]@4 ~@11 b4@2 ~@3, ~@12 g4@2 ~ g4@5 [g4,b4,d5]@4 [g4,b4,d5]@3 [g4,d5]@4 ~]/2", // C Bm C G G5
  E: "[a4,c5,e5]@3 ~@3 c4 ~@3 c4 ~@2 c4 f4 a4, f3, f4@6 ~ f4@3 ~ f4@2 ~@3, f5 ~@3 [a4,c5,e5]@4 [a4,c5,e5]@4 [a4,c5,e5]@4", // Am
  F: "[a4,c5,f5]@4 ~@2 a3 d4 [b4,d5,f5]@3 ~ b4@2 g4 b4, [d3,d4]@7 ~ g3@7 ~, ~ [a4,c5,f5] g4 [d5,f5]", // F Bdim D F Dm
  G: "[a4,c5,e5]@4 ~@2 e3 ~@3 e3 ~ a4@2 e3 ~, a2@15 ~, a3@6 ~ a3@3 ~ a3@3 ~@2, ~@4 [a4,c5,e5]@4 e5@7 ~, ~@2 [a4,c5] ~", // Am
  H: "[a#3,d5]@4 [f4,a#4]@2 ~@2 a#4@2 ~@2 a#3 ~ a#3 f4, a#2@15 ~, [f4,a#4]@3 ~ d5@7 [a#4,d5]@5, ~@3 a#3 ~ a#3 ~@2, ~@7 f4@3 ~ f4@2 ~@3", // A# A#5 A#
  I: "[a2,a3,g4,a4,d5] a4@2 ~ [f4,a4,c5]@3 ~ [f4,a4,c5]@2 ~ a4@2 ~ a4@2, g2, g3@6 ~ g3@2 ~ g3@3 g3@3, [f4,c5]@4 ~@7 [f4,c5]@4 ~", // Dsus4 F F5
  J: "[g4,b4,d5]@4 [g4,b4,d5]@3 d3 [g4,b4]@2 ~ g4@3 [d3,b4] ~, g2@15 ~, g3@8 d5@7 ~, ~@8 g3 ~ g3@4 ~@2, ~@11 b4 ~@4", // G
  K: "[g4,c5,e5]@3 ~ [g4,c5,e5]@3 ~ g4 c4@2 g4@2 c4 g4 c5, c3@15 ~, c4@7 g3@2 ~@7, ~@8 [c5,e5]@3 [c5,e5]@4 ~", // C
  L: "[g4,b4,d5]@4 ~@2 d3 ~@4 b4@2 ~ b4 g2, g2@7 ~, g3@6 ~ g3@2 d3@2 [g4,d5]@4 ~, ~@4 [g4,b4,d5]@4 [g4,b4,d5]@2 g3@2 ~ g3@3", // G G5 G
  M: "[a4,c5,e5]@4 [a4,c5,e5]@2 e3 a3 a4 ~@2 a3@2 ~ a3 ~, a2@15 ~, a3@6 ~@2 c5@2 a4@3 c5@2 ~, d5 ~@7 e5@7 ~, ~@9 a3@2 ~@5", // Am
  N: "g#4@2 ~ g#4 [g#4,c5,d#5]@2 ~ g#4 [g#4,c5,d#5]@2 ~ [g#4,c5,d#5]@2 ~ [g#4,d#5] ~, g#2@15 ~, [g#3,c5,d#5]@5 ~ g#3@3 ~ g#3@2 ~ g#3@2 ~", // G# G#5 G#
  O: "[g4,c5,e5]@4 [g4,c5,e5]@4 [g4,c5,e5]@4 ~ g3 ~ c5, c3@7 c4, c4@12 [g4,c5,e5]@3 ~", // C
  P: "[d4,a4,d5,f5]@4 [a4,d5,f5]@2 d4 d5 [g4,b4,d5,g5]@4 [b4,d5,g5]@2 g4 b4, d3@7 ~ g3@7 ~", // Dm G
  Q: "[g4,c5,e5]@4 [g4,c5,e5]@4 [g4,c5,e5]@2 g3 ~@3 c4 c5, c3@15 ~, c4@10 ~ c4@2 g4@2 ~, ~@3 e5", // C
  R: "[d4,a4,d5,f5]@4 [a4,d5,f5]@2 d4 d5 [g4,b4,d5,g5]@2 ~ b4@2 ~ b4 ~, d3@7 ~ g3@7 ~, c5 ~@9 g4@2 ~ g4@2 ~, ~@11 [d5,g5]@4 ~", // Dm G G5
  S: "[a4,c5,f5] ~ [a4,c5,f5]@3 ~ [a4,c5,f5]@5 ~ [a4,c5,f5] ~ [a4,c5] ~, [f3,f4]@12 ~ [f3,f4]@3, ~@7 f5", // F Am F
  T: "[b4,d5,g5]@6 [b4,d5,g5]@6 b4 ~ [b4,d5,g5] ~, [f3,f4]@6 [d5,g5] ~, ~@13 [f3,f4]@3", // G F G5 F
  U: "[a4,c5]@2 [a4,c5,f5]@3 ~ [a4,c5,f5]@6 c5 ~ [a4,c5,f5] ~, [f3,f4]@13 [f3,f4]@3, f5 ~@11 [a4,f5]@2 ~@2", // Am F Dm
  V: "[b4,d5,g5]@5 ~ [b4,d5,g5]@6 [b4,d5,g5]@2 f4 ~, f3@15 ~, f4@13 ~@3", // G
  W: "[e4,g4,b4,e5]@4 ~@2 e4@2 [g4,b4,e5]@2 e4@2 ~@2 e4 ~, e3@15 ~, ~ [g4,b4,e5] ~ [g4,b4,e5]", // Em
  X: "[g3,g4,a#4,d5]@4 [g4,a#4,d5]@2 g3@2 ~@2 g3@2 [g4,a#4,d5]@2 g3 ~, g2@15 ~, ~@2 [g4,a#4,d5] ~", // Gm
  Y: "[f3,e4,a4,c5]@4 ~@2 f3 ~ [f4,a4]@3 ~ [f4,a4,c5]@2 d3 ~, f2@8 d2@7 ~, ~ c5@2 ~, ~ [e4,g4] d3 ~", // Fmaj7 F Em
  Z: "[a4,c5,e5]@4 ~@2 e3 ~@5 e3 ~ a4 ~, a2@15 ~, a3@6 ~ a3@2 e3@2 [a4,c5,e5]@4 ~, ~@4 [a4,c5,e5]@4 [a4,b4,d5]@2 a3@2 ~ a3@2 ~", // Am Bm7
  AA: "[[a4,c5,f5]@3 ~ [a4,c5]@2 f4 ~ [e4,c5]@4 [a4,f5]@2 e4 ~ [d4,f#5]@4 [a4,c5,f#5]@2 d4@2 [a4,c5,f#5]@2 d4@2 ~@2 [d3,d4] ~, f3@7 a4@5 c5@8 ~@12, f4@4 f5@8 ~@3 a4@5 ~@8 [a4,c5,f#5]@4, ~@8 e3@8 d3@13 ~@3]/2", // F Am C Dm D F#dim D F#dim
  AB: "[a4,c5,f5]@4 ~@8 b4 d4 ~ c5, g3, g4@3 g4@2 d4 [a4,f5]@2, ~@4 [a4,c5,f5]@4 [a4,c5,f5]@3 g4@2 ~ g4@2", // F Dm F
  AC: "[g4,c5,e5] ~ [g4,c5,e5]@4 ~ g4 [g4,c5,e5]@2 ~ g4@2 ~ g4 c5, c3@15 ~, c4@5 ~ c4@3 ~ c4@2 ~ c4@2 ~, ~@11 [c5,e5]@4 ~", // C
  AD: "[g3,g4,b4,d5]@4 g4@2 ~ g4 [g4,b4,d5]@2 ~ [g4,b4,d5]@2 ~ [g4,b4,d5]@2, g2, ~ [b4,d5] ~@2, ~@6 g3@3 ~ g3@3 g3@2 ~", // G Bm
  AE: "[f4,a4,c5] ~@6 f4 [f4,a4,c5]@2 ~ [f4,a4,c5]@2 ~ [a4,c5]@2, f2, f3@5 ~ f3@3 ~ f3@3 f3@3, ~@2 [f4,a4,c5]@6 ~@6 f4 ~", // F Am F
  AF: "[g3,g4,b4,d5]@4 g4@2 ~ g4 [g4,b4,d5]@2 ~ [g4,b4,d5]@2 ~ [g4,b4,d5] ~, g2@15 ~, ~ [b4,d5] ~@2, ~@6 g3@3 ~ g3@3 g3@2 ~", // G Bm
  AG: "[g4,c5,e5]@4 [g4,c5,e5]@3 ~ [g4,c5,e5]@4 ~@2 g3 c4, c3, c4@7 ~, ~@3 [g4,c5,e5]", // C
  AH: "[d4,a4,c5,f5]@4 [a4,c5,f5]@2 d4 c5 [g4,b4,d5,f5]@4 [b4,d5,f5]@2 g4 b4, d3@7 ~ g3@7 ~, ~@8 g5 ~@7", // Dm7 F G7 Bdim
  AI: "[g4,c5,e5]@3 ~ [g4,c5,e5]@3 ~ [g4,c5,e5]@2 ~ g4@2 ~ c5 c3, c3@7 ~, c4@9 ~ c4@2 ~ c4@3, d5 ~@10 e5@5", // C
  AJ: "[a4,d5,f5]@4 a4@2 [d3,d4] b4 [g4,b4,d5,f5]@2 ~ b4@2 ~ b4 ~, [d3,d4]@6 ~@2 g3@7 ~, ~@4 [d5,f5]@4 ~@2 g4@2 ~ g4@2 ~, ~@11 [d5,f5]@4 ~", // Dm D G7 D Dm
})).s("gm_piano").gain(0.51).pan(0.3)

// chords · brass section
const brass_section = note("<~@13 A ~@15 A ~@27 A ~@15 A ~@3 A ~@11>".pickRestart({
  A: "[g4,c5,e5]", // C
})).s("gm_brass_section").gain(0.64).pan(0.7)

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

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

// drums · snare
const snare = s("sd").struct("<~@5 A@33 B A B A@7 C A@36 ~@4>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2", C: "x",
})).gain(0.64)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@5 A B C D E B A F G B C D E B A F A B C D E B A F G B C D E B A F G B C D E B A F A B C ~ A B C D E B A F G B C D E
  B A F A B C D E B A F G B C D G B C D E B A F H@3 I
>`.pickRestart({
  A: "x!3 ~ x!4", B: "x!3 ~ x ~ x!2", C: "x ~ x ~ x ~ x!2", D: "x ~ x ~ x!4", E: "x!8", F: "x!5 ~ x!2",
  G: "~ x!2 ~ x!4", H: "x!4", I: "x",
})).gain(0.72)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@5 A B C D ~ B A E A B C D ~ B A E A B C D ~ B A E A B C D ~ B A E A B C D ~ B A E A B C ~ A B C D ~ B A E A B C D ~
  B A E A B C D ~ B A E A B C D A B C D ~ B A E ~@4
>`.pickRestart({
  A: "~@3 x ~@4", B: "~@3 x ~ x ~@2", C: "~ x ~ x ~ x ~@2", D: "~ x ~ x ~@4", E: "~@5 x ~@2",
})).gain(0.4)

// drums · low tom
const low_tom = s("lt").struct("<~@36 A ~@7 A ~@19 A ~@19 A ~@4>".pickRestart({
  A: "~@6 x!2",
})).gain(0.72)

// drums · mid tom
const mid_tom = s("mt").struct("<~@36 A ~ B ~ B ~@3 A ~@19 A ~@19 A ~@4>".pickRestart({
  A: "~@7 x!3 ~ x ~@4", B: "~@14 x!2",
})).gain(0.72)

// drums · open hat
const open_hat = s("oh").struct("<~@5 [~@15 x]!43 ~ [~@15 x]!36 [~@7 x]!3 ~>").gain(0.64)

// drums · high tom
const high_tom = s("ht").struct("<~@36 A ~ B ~ C ~@3 A ~@19 A ~@19 A ~@4>".pickRestart({
  A: "x!2 ~ x!3 ~@10", B: "~@12 x!3 ~", C: "~@12 x!2 ~@2",
})).gain(0.72)

// drums · crash
const crash = s("cr").struct("<~@13 A ~@15 A ~@7 A@5 ~@6 A ~@8 A ~@15 A ~@3 A ~@11>".pickRestart({
  A: "x",
})).gain(0.64)

stack(
  bass, string_ensemble_1, piano, brass_section, kick, rim, snare, hihat, hihat_soft, low_tom, mid_tom, open_hat,
  high_tom, crash
)

More by Olivia Newton-John