Strudelify
You Never Give Me Your Money cover art

Abbey Road

You Never Give Me Your Money

The Beatles

KeyA minorTempo75 bpm
0:00/0:00
// You Never Give Me Your Money — The Beatles
// 75 bpm, 4/4, key A minor. 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. 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.

// other · vibraphone · "vibes"
const vibraphone = note(`<
  ~@32
  [f4 d5 a#4 f4@5]
  [f4 ~ c5@2 a4@2 f4@4 ~@2 f4@4]
  [e4 e4@3 ~ e4!3]
  [f4 d5 a#4 f4@5]
  [f4 ~ c5@2 a4@2 f4@4 ~@2 f4@4]
  [e4 e4@3 ~ e4!3]
  ~@51
>`).s("gm_vibraphone").gain(0.55).pan(1)

// chords · piano · "bright grand piano"
const piano = note("<A B C D E F G@2 H I J K E L M N O P Q R S T U V ~@9 W X Y W Z ~@51>".pickRestart({
  A: "a2 [a3,g4,a4,d5,e5]!5 a3!2, ~@3 [g4,a4,d5,e5]", // Asus4 Gsus2
  B: "d3 d4 a3 d3@2 d4 ~ a3, [f4,a4,c5]@3 [f4,a4,c5,d5]@3 [d4,f4,a4,c5]@2, e5 ~@15", // F Dm7
  C: "g2 [d4,f4,g4,b4,d5]!5 d4!2, ~@3 [f4,g4,b4,d5]", D: "f5@2 e5 [e4,g4,c5]@2 [c4,e4,g4]@3, [g4,c5]@3 ~@5",
  E: "~ [e4,f4,a4,c5]!7", F: "[d4,f4,a4,c5] b3 d4 e3@2 b3 e4 g#4",
  G: "[[c4,e4,a4]@3 [e4,a4,c5]@8 [a4,c5,e5]@5, ~@11 c4@2 ~@3]/2", H: "~ [g4,a4,c5,e5]!5 [g4,a4,c5,e5]@2, e4",
  I: "[d4,f4,a4,c5]@3 f4@2 d4 [f4,a4,d5] d4, e5 ~@5 [c5,d5]@6 ~@4", J: "~ [f4,g4,b4,d5]!5 [f4,g4,b4,d5]@2",
  K: "[a4,c5,d5,f5]@2 [g4,c5,e5] [e4,g4,c5]@2 [c4,e4,g4]@3", // Dm7 C
  L: "[f4,a4,b4,d5]@2 [d4,f4,a4,c5] [d4,f4,a4,b4]@2 [d4,f4,a4]@2 [b3,d4,f4,g#4]", // Bm7b5 Dm7 Bm7b5 Dm Bdim
  M: "[c4,e4,a4]@3 [e4,a4]@2 a3!3, ~@3 c5@5", N: "[e4,a4] a4 c5 e5 ~@4, a3 ~@15",
  O: "~ [g4,a4,c5,e5,g5]!5 [g4,a4,c5,e5,g5]@2", P: "[f4,a4,c5,e5,g5]@3 f4@2 d4 [f4,a4,d5] d4, ~@3 [a4,d5,f5]@3 ~@2",
  Q: "~ [f4,g4,b4,d5,f5]!5 [f4,g4,b4,d5,f5]@2", R: "[c4,d5,f5,a5]@2 [c4,c5,e5,g5] [e4,a4,c5,g5]@2 [c4,e4,g4,c5]@3",
  S: "~ [e4,f4,a4,c5,e5]!7", // Fmaj7
  T: "[f4,a4,b4,d5,f5]@2 [d4,f4,a4,c5,e5] [d4,f4,g#4,b4,d5]@2 [d4,e4,a4,c5]@2 [b3,d4,e4,g#4,b4]", // Bm7b5 Dm7 Ddim Am E7
  U: "[e4,a4,c5]@3 e4@2 a3!3, ~@3 [a4,c5,e5]@5", V: "~ [c4,e4,g4,c5]!2 [c4,e4,g4] [f4,g4,b4,d5]@4",
  W: "[a3,c4] ~@2 [a3,c4]@2 ~ [a3,c4]@2", X: "c4 [c4,c5]@3 ~ [g3,c4]!3", Y: "d4 ~@7", Z: "c4!2 ~@3 [g3,c4]!3",
})).s("gm_piano").gain(0.35).pan(0.8)

// chords · piano · "bright grand piano"
const piano_2 = note("<~@24 A B C D E B C D F ~@56>".pickRestart({
  A: "~@2 g4 c3 ~ g3 ~ c3 ~ c3 ~ f#3 d4 g#3 d4 e3, ~ c5 [c4,e4]!2 [e4,g4]!4", // C Em
  B: "~ a3 ~ b3 ~ c4 ~ a3 ~ c4 ~ a#3 ~ a3 ~ g3, [e4,a4]!2 e4!2 [e4,g4] [c4,e4]!3", // A5 Em C
  C: "~ f3 ~ g3 ~ a3 ~ d3 ~ d3 ~ g3 ~ f3 ~ e3, [c4,f4] [a3,c4] c4 [a3,c4] [b3,d4]!2 [g3,b3]!2", // F5 Am Bm G
  D: "[g3,c4] ~ [g3,c4] ~ [g3,c4] ~ [g3,c4] ~ [g3,c4,d4] ~ [g3,c4,d4] ~ [g3,c4,d4] ~ [g3,c4,d4] ~", // C5 Gsus4
  E: "[e4,g4]@2 ~ c3 ~ g3 ~ c3 ~ c3 ~ f#3 d4 g#3 d4 e3, ~ [g4,c5] [c4,e4]!2 [e4,g4]!4", F: "d4 ~@7",
})).s("gm_piano").gain(0.5).pan(0.8)

// bass · fretless bass · "bass guitar"
const bass = note("<~@3 A B C D E F ~ G H B ~@76>".pickRestart({
  A: "g3@6 a3@4 g3@2 e3 d#3 e3@2, c3 ~", B: "c3", C: "b2@3 e2@3 ~@2", D: "a2 a3 e3 a3@2 e3 a3 e3",
  E: "a3@2 e3@2 a3@2 a3@4 a3 g#3 a3@2 e3@2", F: "a2", G: "g2", H: "~@10 e3 d#3 e3@4",
})).s("gm_fretless_bass").gain(0.35)

// bass · electric bass finger · "bass guitar"
const bass_2 = note(`<
  ~@16 A B C D E F A G H I J K H I J K L M N L M N L O N L O N P Q R S T U V W X Y Z AA AB AC AD AE AF@7 AG AH AI AH AI
  AH AI AH AI AH AI AH AI AH AI AH AI AH AI AJ ~@2
>`.pickRestart({
  A: "a2", B: "d3@3 d3@2 e3 f3@2", C: "g3", D: "c3@4 ~@2 c3@4 d3@2 e3 d#3 e3@2", E: "f3", F: "b2 c3 d3 e3@2 d3 e2@2",
  G: "c3!4 g2 f3 e3 d3", H: "c3 e2 g2 e2!2 f#2 g#2 e2", I: "a2 b2 c3 a2 c3 a#2 a2 g2", J: "f2 g2 a2 d2 g2 f2 e2 d3",
  K: "c3 e2 g2 a2 a#2 a2 g2 e2", L: "a#2@3 a#2@5", M: "f2@3 f2@5", N: "c3@3 c3@5", O: "f2@3 f2 f2@3 g2",
  P: "a#2 a2@2 d3@2 a2 g2@2", Q: "f2@3 f2@2 g2 g2@2", R: "c3@2 c3!6", S: "d3!7 a2", T: "d#3!4 g2!4",
  U: "c3@2 b2@2 a#2@2 a2@3 a2 a2@2 a2@2 a2@2", V: "d#3@4 ~@2 c3@3 c3 c3@2 c3@2 c3@2",
  W: "f#2@4 ~@2 d#3@3 d#3 d#3@2 d#3@2 d#3@2", X: "a2@2 ~ f#2@2 g2@2 g#2", Y: "a2!8", Z: "b2!8", AA: "c3!3 d3 e3!4",
  AB: "a2 e3 a2!3 e2 f#2 e2", AC: "d3@6 d3@6 d3!2 d3@2", AD: "d3 ~@5 d3 ~@5 f3@2 e3@2", AE: "a2!7 a#2",
  AF: "[b2@3 b2 b2@2 b2@2 c3@6 b2@10 a2@2 c#3@2 e3@2 a3@6 ~@4 c3@6 b2@10 a2@2 c#3@2 e3@2 a3@6 ~@4 c3@6 b2@10 a2@2 c#3@2 e3@2 a3@10 a2@8]/7",
  AG: "c3@3 b2 b2@4", AH: "a2@2 c#3@2 e3@2 a2@3 a3!7", AI: "c3@3 b2@5", AJ: "a2@2 c#3@2 e3@2 a2@3 a3!6 ~",
})).s("gm_electric_bass_finger").gain(0.35)

// other · overdriven guitar · "guitar, then lead"
const overdriven_guitar = note(`<
  ~@38 A B@2 A B@2 A C D E ~ F ~@2 G H@2 I@2 J K@3 L M L N L ~ O@2 P Q P R P R P Q S R P R P Q P R P R ~@2
>`.pickRestart({
  A: "[f5,a#5]", B: "[a5 g5, c6]/2", C: "[a5,c6]", D: "[c5,e5]@3 [g5,c6]", E: "[f#5,a5]@3 ~", F: "~@2 a4 ~@5",
  G: "~@7 c#5@3 b4@4 c5@2", H: "[c#6@2 ~@2 c#5 a5@2 f#5@5 ~@4]/2", I: "[e5 e5@2 e5 e5@3 e5!2 e5@2 e5 e5@2 b4 c#5@17]/2",
  J: "d5@2 d5@2 d5@2 c5 d5@2 c5 a4@6",
  K: "[d5 d5@2 d5 d5@2 b4 d5@3 e5@2 f5@2 e5 e5@9 c#5@2 a5@4 f#5@6 b4@2 b4@6 ~@4]/3", L: "~@2 b4 b4@2 a4@3",
  M: "~@2 b4 b4@3 ~@2", N: "~@2 b4!2 b4@2 ~@2", O: "[a4@9 g4 e4 a4@5]/2", P: "g4@2 g4@2 g4@2 g4@2 g4@2 g4@2 g4 g4@3",
  Q: "a4@2 a4@2 a4@2 a4@2 a4@2 a4@2 a4 a4@3", R: "a4!8", S: "g4!8",
})).s("gm_overdriven_guitar").gain(0.35).pan(0.3)

// chords · overdriven guitar · "guitar, then dupe ch"
const overdriven_guitar_2 = note(`<
  ~@15 A ~@22 B C D B C E F G H I J K L M N O P Q R S T U V W X Y Z AA AB AC AD AE AF AG AH AG AH AE AF AG AH AG AH AE
  AH AG AH AG AH ~@2
>`.pickRestart({
  A: "~@8 d5 c5 a4 g4 a4 g4 e4 d4", B: "[a#3,f4,a#4]@6 g4@4 f4@2 d4 c4 a#3@2, ~@3 a#4@3 [f4,a#4]@2",
  C: "a3@4 g4@2 f4@4 g4 a4 c4@2 c4@2, [a4,c5]@3 [a4,c5]@3 [a4,c5]@2", // Am
  D: "[c4,c5]@2 e4@2 g4@2 [c4,g4,c5]@6 [a4,c5] g4 [d4,e4] c4, g4 ~@3", // C C5 Am Dsus2
  E: "c4@2 e4@2 g4@2 [c4,g4,c5]@6 [a4,c5] g4 [d4,e4] c4, g4 ~@3, c5 ~@15", // C5 Am Dsus2
  F: "a#3 g4 f4 d4@2 c4 [a#3,d4,a#4]@2, [d4,a#4]@3 [f4,c5]@3 ~@2", // A# Gm F5
  G: "a3@2 g4@2 f4@2 a4@4 g4 a4 g3@2 a3@2, c5@3 c5@3 ~@2, f4 ~@2 [d4,g4]", // G5
  H: "[g3,c4]@2 [g3,c4]@2 [g3,c4]@2 [g3,c4]!4 [g3,c4]@2 [c4,e4]@2 [c4,e4]@2, e4@3 c5", // C5 C
  I: "[c4,d4]@2 [c4,d4]@2 [c4,d4]@2 [c4,d4]!4 [c4,d4]@2 [c4,d4]@2 [c4,d4]@2, a4", // Csus2
  J: "[a#3,c#4]@2 [a#3,c#4]@2 ~ f4 ~ f4 [a#3,d4]@2 [a#3,d4]@2 g4 f4 d#4@2, g4@2 [c#4,g4] [c#4,d#4] g4@2 b3@2", // A#m A# C#dim C#sus2
  K: "~@3 f4 [e4,a#4]@2 ~ c#5@9, [c4,e4]!2 ~@6, ~ f4@2 ~@3 [e4,g4]@10", // Edim C Em
  L: "~ a#4@2 a#4 c#5 c5 ~ e5@9, [a#3,d#4,g4] ~@2 [g4,a#4]@5", // D# Gm
  M: "~ c#5@2 c#5 e5 d#5 ~ g5@9, [c#4,f#4,a#4] ~@2 [a#4,c#5]@5", // F# A#m
  N: "~ e5@2 f5 g5 f#5 e5 [a4,e5,a#5]@3 [d5,f5,b5]@4 [d#5,f#5,c6]@2, [e4,a4,c#5] ~@7", // A Bdim Cdim A
  O: "[c#5,e5,g5]@2 [e4,a4,c#5]@2 [e4,a4,c#5]@4 ~ [e4,a4]@2 [a4,c#5,e5] [f#4,a4,c#5]@2 [e4,a4,c#5]@2", // C#dim A A5 A F#m A
  P: "[f#4,b4,d5]@2 d#4@2 [b3,d#4,f#4]@3 [b3,d#4,f#4]@2 [d#4,f#4,b4]@2 b4 [d#4,f#4,c#5]@2 [d#4,f#4,b4]@2", // Bm B D#m7 B
  Q: "[e4,g4,c5]!3 [f#4,a4,d5] [g#4,b4,d5]!2 [e4,g#4]!2", // C D G#dim E
  R: "[c#4,e4,a4]@2 [c#4,e4,a4]@2 [c#4,e4,a4]@2 [c#4,a4]@3 g4 e4 g4 e4@2 [c#4,e4,a4]@2, ~@6 e4 ~@9", // A F#m A
  S: "[f#4,a4,c5]!2 [f#4,c5]@2 [d4,g4]@2 d4!2, ~@4 a4 ~@7 b3@4", T: "[f4,a4,c5]@3 [g4,b4]@3 [g4,b4,d5]!2",
  U: "[e4,a4,c#5] [e4,a4,c#5]@2 [e4,a4,c#5]!3 [e4,a4,c#5]@2 [e4,a4]@4 [a4,c5,e5]@4", // A A5 Am
  V: "[f#4,b4,d#5]@2 [d#4,f#4,a4]@2 c4 e4 g#4 b3", W: "d3 [d3,g3]@3 [c#3,e3]@2 [c#3,e3]@2",
  X: "[c#4,e4]!2 [d4,g4]!2 c4 e4 g4 b3", Y: "d3 [d3,g#3]@3 [c#3,e3]@2 [c#3,e3]@2",
  Z: "[c4,e4]!2 [d4,g4]!2 c4 e4 g#4 b3", AA: "d4 [d4,g4]@3 [c#4,e4]@2 [c#4,e4]@2", AB: "[c#4,e4,a4]!4",
  AC: "[c4,e4,g4]!3 [b3,d4,g4]!5", AD: "[a3,c#4]!2 [c#4,e4]!2",
  AE: "[c4,e4]@2 [c4,e4]@2 [c4,e4]@2 [c4,e4]@2 [c4,e4]@2 [c4,e4]@2 [c4,e4] [c4,e4]@3", // C
  AF: "[c#4,e4]@2 [c#4,e4]@2 [c#4,e4]@2 [c#4,e4]@2 [c#4,e4]@2 [c#4,e4]@2 [c#4,e4] [c#4,e4]@3", AG: "[c4,e4,g4]!8",
  AH: "[c#4,e4]!8", // C#m
})).s("gm_overdriven_guitar").gain(0.35).pan(0.6)

// other · tubular bells
const tubular_bells = note("<~@67 [a4 ~ a4 ~]!22>").s("gm_tubular_bells").gain(0.5).pan(1)

// drums · kick
const kick = s("bd").struct("<~@16 A@6 B C D@3 E D@3 E F@17 G@4 F@34 ~@2>".pickRestart({
  A: "x!4", B: "x ~@3 x ~@3 x!8", C: "~@8 x!3 ~ x!3 ~", D: "x!2 ~@2 x!2 ~@2", E: "x ~ x ~@5 x!8", F: "x!3 ~ x!3 ~",
  G: "x ~ x ~ x ~@2 x ~ x ~ x!4 ~",
})).gain(0.35)

// drums · snare
const snare = s("sd").struct(`<
  ~@23
  [~@8 x!3 ~ x!3 ~]
  [x!2 ~@2 x!2 ~@2]!3
  [x ~ x ~@5 x!8]
  [x!2 ~@2 x!2 ~@2]!3
  [x ~ x ~@5 x!8]
  [~ x ~ x]!55
  ~@2
>`).gain(0.35)

// drums · clap
const clap = s("cp").struct("<~@22 [~@8 x!8] [x ~ x!6 ~@8] ~@65>").gain(0.35)

// drums · hihat
const hihat = s("hh").struct("<~@24 x ~@2 [~@3 x] ~@10 [x!16]!48 [x!15 ~] ~@2>").gain(0.35)

// drums · open hat
const open_hat = s("oh").struct("<~@38 [x!16]!48 [x!15 ~] ~@2>").gain(0.35)

// drums · splash
const splash = s("cr").struct("<~@17 [x ~@2 x ~@4]!6 ~ [x!2 ~ x] [~ x ~ x]!6 [~@4 x ~@10 x] ~@57>").gain(0.35)

stack(
  vibraphone, piano, piano_2, bass, bass_2, overdriven_guitar, overdriven_guitar_2, tubular_bells, kick, snare, clap,
  hihat, open_hat, splash
)

More by The Beatles