Strudelify
Can't Buy Me Love cover art

A Hard Day's Night

Can't Buy Me Love

The Beatles

KeyC majorTempo168 bpm
0:00/0:00
// Can't Buy Me Love — The Beatles
// 168 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 104 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(168/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 · electric bass finger · "Bass"
const bass = note(`<
  ~ A B A B C D E@4 F@2 E@2 G H I E@5 F@2 E@2 G H I J K L E@2 K L M N O@4 P Q E R G H I E S E@4 F@2 E@2 G H I E@5 F@2
  E@2 G H I J K L E@2 K L M N O@4 P Q E R G H T U K L K L M N E V
>`.pickRestart({
  A: "e1 ~ e1 ~ e1 ~ e1 ~", B: "a1 ~ a1 ~ a1 ~ a1 ~", C: "d1 ~ d1 ~ d1 ~ d1 ~", D: "g1 ~ g1 ~ g1 ~ g1 ~",
  E: "c2@3 ~ c2@3 ~ g1@3 ~ g1@3 ~", F: "f2@3 ~ f2@3 ~ c2@3 ~ c2@3 ~", G: "g1@3 ~ g1@3 ~ d2@3 ~ g1@3 ~", H: "f1@3 ~@13",
  I: "f1@3 ~ f1@3 ~ f1@3 ~ f1@3 ~", J: "c2@3 ~ c2@3 ~ c2@3 ~ c2@3 ~", K: "e2@3 ~ e2@3 ~ e2@3 ~ e2@3 ~",
  L: "a2@3 ~ a2@3 ~ a2@3 ~ a2@3 ~", M: "d2@3 ~ d2@3 ~ d2@3 ~ d2@3 ~", N: "g1@3 ~ g1@3 ~ g1@3 ~ g1@3 ~",
  O: "c2@3 ~ c2@3 ~ g1@3 ~ a#1@3 ~", P: "f1@3 ~ f1@3 ~ c2@3 ~ c2@3 ~", Q: "f1@3 ~ f1@3 ~ c2@3 ~ f1@3 ~",
  R: "c2@3 ~ c2@3 ~ g1@3 ~ a1@3 ~", S: "c2@3 ~ g1@3 ~ g1@3 ~ a#1@3 ~", T: "f2@3 ~ f2@3 ~ c2@3 ~ f2@3 ~",
  U: "c2@3 ~ c2@3 ~ g1@3 ~ c2@3 ~", V: "c2@11 ~@5",
})).s("gm_electric_bass_finger").gain(0.56)

// chords · electric guitar clean · "Lead"
const electric_guitar_clean = note(`<
  ~ A B A B C D E@6 F@8 ~@2 G H I@8 ~@2 A B C J@8 ~@10 G H ~@10 G H ~@6 K B ~@2 A B C L ~@12 M N M N O P Q@2
>`.pickRestart({
  A: "[g3,b3,e4]@6 [g3,b3,e4] ~ [g3,b3,e4]@8", B: "[a3,c4,e4]@6 [a3,c4,e4] ~ [a3,c4,e4]@8",
  C: "[a3,c4,f4]@6 [a3,c4,f4] ~ [a3,c4,f4]@8", D: "[g3,b3,g4]@6 [g3,b3,g4] ~ [g3,b3,g4]@8",
  E: "[~@34 [d#4,a4,c5]@4 [d#4,a4,c5]@2 [d#4,a4,c5]@2 [d#4,a4,c5]!4 ~@2, f5]/6", F: "f5/8",
  G: "~ [d#4,a4,c5]@2 [d#4,a4,c5]", H: "[d#4,a4,c5]@2 [d#4,a4,c5]!4 ~@2",
  I: "[~@96 [g4,b4,e5]@6 [g4,b4,e5] ~ [g4,b4,e5]@8 [a3,c4,e4]@6 [a3,c4,e4] ~ [a3,c4,e4]@8, f5]/8", // Em Am
  J: "[[g4,b4,f5]@3 [g4,b4,f5] [g4,b4]@4 ~@56, ~ f5@15]/8", K: "[g4,b4,e5]@6 [g4,b4,e5] ~ [g4,b4,e5]@8",
  L: "[g4,b4]@3 [g4,b4] [g4,b4]@4", M: "[e4,b4,e5]@5 ~ [e4,b4,e5]@2 [e4,b4,e5]@8",
  N: "[e4,a4,c5]@3 [e4,a4,c5] [e4,a4,c5]@4", O: "[f4,a4,c5]@3 [f4,a4,c5] [f4,a4,c5]@4",
  P: "[g4,b4,g5]@3 [g4,b4,g5] [g4,b4,g5]@4", Q: "[[c4,e4,g4,c5]@9 ~@7]/2",
})).s("gm_electric_guitar_clean").gain(0.26).pan(0.2)

// other · distortion guitar · "Lead"
const distortion_guitar = note(`<
  ~@7 A B C D ~@2 A E F G H ~ I B C D ~@2 A E F G H J ~@20 K I B C D ~@2 A E F G H ~ I B C D ~@2 A E F G H J ~@28
>`.pickRestart({
  A: "g5!2, ~@4 f5 ~@3", B: "g5@3 g5 f5 d#5 c5 d#5, f5 ~@7", C: "g5@4 g5@2 ~ [f5,g5], f5 ~@3 f5 ~@3",
  D: "~ f5 d#5@2 c5@2 a#4@2 g4@2 f4@2 d#4@4", E: "g5@3 g5 f5 d#5 c5@2, f5 ~@7", F: "~@2 [g4,b4]@2 [g4,b4]@3 g4",
  G: "f4@3 d#4 f4 d#4 c4 f4", H: "g4 a#4@2 g4 f4 d#4 c4 a#3", I: "g5!2, f5 ~@3 f5 ~@3", J: "c4 ~", K: "~@5 c5 d#5@2",
})).s("gm_distortion_guitar").gain(0.38).pan(0.2)

// chords · acoustic guitar steel · "Rhythm"
const acoustic_guitar_steel = note(`<
  ~ A B A B C D E@4 F@2 G@2 H I F J E@4 F@2 G@2 H I F J A B G J A B C K G@4 F@2 G@2 H I F J@2 E@4 F@2 G@2 H I F J E@4
  F@2 G@2 H I F J A B G J A B C K G@4 F L G@2 H I L J A B A B C D J M
>`.pickRestart({
  A: "[g4,b4,e5]@4 [g4,b4,e5]@2 [g4,b4,e5]@2 ~@2 [g4,b4,e5]@2 [g4,b4,e5] ~@3", // Em
  B: "[a4,c5,e5]@4 [a4,c5,e5]@2 [a4,c5,e5]@2 ~@2 [a4,c5,e5]@2 [a4,c5,e5] ~@3", // Am
  C: "[a4,c5,f5]@4 [a4,c5,f5]@2 [a4,c5,f5]@2 ~@2 [a4,c5,f5]@2 [a4,c5,f5] ~@3", // F
  D: "[g4,b4,g5]@4 [g4,b4,g5]@2 [g4,b4,g5]@2 ~@2 [g4,b4,g5]@2 [g4,b4,g5] ~@3", // G
  E: "[c4,e4,a#4,c5,e5]@4 [c4,e4,a#4,c5,e5] ~ [c4,e4,a#4,c5,e5]@2 [c4,e4,a#4,c5,e5]@4 [c4,e4,a#4,c5,e5] ~ [c4,e4,a#4,c5,e5]@2", // C7
  F: "[d#4,a4,c5,f5]@4 [d#4,a4,c5,f5] ~ [d#4,a4,c5,f5]@2 [d#4,a4,c5,f5]@4 [d#4,a4,c5,f5] ~ [d#4,a4,c5,f5]@2", // F7
  G: "[e4,g4,a#4,c5]@4 [e4,g4,a#4,c5] ~ [e4,g4,a#4,c5]@2 [e4,g4,a#4,c5]@4 [e4,g4,a#4,c5] ~ [e4,g4,a#4,c5]@2", // C7
  H: "[g4,b4,g5]@4 [g4,b4,g5] ~ [g4,b4,g5]@2 [g4,b4,g5]@4 [g4,b4,g5] ~ [g4,b4,g5]@2", I: "[d#4,a4,c5,f5] ~@3",
  J: "[e4,g4,c5]@4 [e4,g4,c5] ~ [e4,g4,c5]@2 [e4,g4,c5]@4 [e4,g4,c5] ~ [e4,g4,c5]@2", // C
  K: "[g4,b4,f5]@4 [g4,b4,f5] ~ [g4,b4,f5]@4 [g4,b4,f5]@2 [g4,b4,f5] ~@3", // G7
  L: "[d#4,a4,c5,f5]@4 [d#4,a4,c5,f5] ~ [d#4,a4,c5,f5]@2 [d#4,a4,c5,f5]@4 [a4,c5,f5] ~ [a4,c5,f5]@2, ~@3 d#4", // F7 F
  M: "~@5 g5@3 ~@8, c4, ~ e4@12 ~@3, ~ g4@4 ~@3, ~@3 c5 e5@4 ~@8",
})).s("gm_acoustic_guitar_steel").gain(0.18).pan(0.8)

// drums · kick
const kick = s("bd").struct("<~@6 A B@9 C B@11 C B@19 C B D B@10 C B@11 C B@19 C B D B@6 E C>".pickRestart({
  A: "~@5 x ~@2", B: "x!4", C: "x", D: "x ~ x ~ x ~@2 x", E: "x ~ x ~ x ~ x!2",
})).gain(0.52)

// drums · snare
const snare = s("sd").struct(`<
  ~@6 A B@9 C B@11 C B D B@7 E B@9 C B F B@10 C B@11 C B D B@7 E B@9 C B F B@6 F G
>`.pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "x", D: "~@2 x ~@3 x!2", E: "~@2 x ~@2 x ~ x", F: "~@2 x ~@2 x!2 ~", G: "x ~@10 x!3 ~@2",
})).gain(0.52)

// drums · crash
const crash = s("cr").struct(`<
  ~@16 A@2 ~@10 A@2 ~ A ~@7 A ~@8 A@2 ~ A ~@9 A@2 ~@10 A@2 ~ A ~@7 A ~@8 A@2 ~ A ~@6 A
>`.pickRestart({
  A: "x",
})).gain(0.41)

// drums · ride
const ride = s("rd").struct("<~@7 A@9 ~ A@11 ~ A@19 ~ A@12 ~ A@11 ~ A@19 ~ A@9 ~>".pickRestart({
  A: "x ~ x!5 ~ x!2 ~ x!5",
})).gain(0.41)

stack(bass, electric_guitar_clean, distortion_guitar, acoustic_guitar_steel, kick, snare, crash, ride)

More by The Beatles