Strudelify
Rock And Roll Music cover art

Beatles For Sale

Rock And Roll Music

The Beatles

KeyG majorTempo170 bpm
0:00/0:00
// Rock And Roll Music — The Beatles
// 170 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 5 "PIANO" piano (copy of ch 2 "PIANO" piano)
// note: Full arrangement: all 104 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(170/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.

// chords · piano
const piano = note(`<
  ~@2 A@4 B@2 A@2 C D E@2 F G H@2 I@5 ~ A@4 B@2 A@2 C D J@2 F K H@2 I@5 ~ L@4 M@2 L@2 N O P@2 Q R H@2 I@5 ~ L@4 M@2 L@2
  N O P@2 Q R H@2 I@5 ~ S@3 T U V S@2 W X Y@2 F Z
>`.pickRestart({
  A: "[g3,b3,d4] ~ [g3,b3,d4] ~ [g3,b3,d4] ~ [g3,b3,d4] ~ [g3,b3,d4] ~ [g3,b3,d4] ~ [g3,b3,d4] ~ [g3,b3,d4] ~", // G
  B: "[g3,c4,e4] ~ [g3,c4,e4] ~ [g3,c4,e4] ~ [g3,c4,e4] ~ [g3,c4,e4] ~ [g3,c4,e4] ~ [g3,c4,e4] ~ [g3,c4,e4] ~", // C
  C: "[a3,d4,f#4] ~ [a3,d4,f#4] ~ [a3,d4,f#4] ~ [a3,d4,f#4] ~ [a3,d4,f#4] ~ [a3,d4,f#4] ~ [a3,d4,f#4] ~ [a3,d4,f#4] ~", // D
  D: "[a3,d4,f#4] ~ [a3,d4,f#4] ~ [a3,d4,f#4] ~ [a3,d4,f#4] ~ [a3,d4,f#4] ~ [a3,d4,f#4] ~ [a3,d4,f#4] ~ [d5,f#5]@2", // D
  E: "[~@2 [d5,f#5] ~ [c5,e5] ~ [c5,e5] ~ [b4,d5]@2 ~@2 [a4,c5] ~ [g4,b4]@11 ~@5 [d5,f#5]@2]/2", // D C Bm Am G D
  F: "~@2 [d5,f#5] ~ [c5,e5] ~ [c5,e5] ~ [b4,d5]@3 ~ [a4,c5]@3 ~", G: "[g4,b4] ~@15",
  H: "[~@4 [a3,d4,f#4]@5 ~ [a3,d4,f#4]@4 [a3,d4,f#4]@5 ~ [a3,d4,f#4]@6 [a3,d4,f#4]@3 ~ [a3,d4,f#4]@2]/2", // D
  I: "[~@4 [b3,d4,g4]@5 ~ [b3,d4,g4]@4 [b3,d4,g4]@5 ~ [b3,d4,g4]@6 [b3,d4,g4]@3 ~ [b3,d4]@2 ~@4 [c4,e4,g4]@6 [c4,e4,g4]@3 ~ [c4,e4,g4]@5 ~ [c4,e4,g4]@5 ~ [c4,e4,g4]@3 ~ [c4,e4,g4]@4 ~@2 [d4,f#4,a4]@5 ~ [d4,f#4,a4,c5]@4 [d4,f#4,a4,c5]@2, ~@26 f#4 ~@3 g4@5 ~@45]/5", // G Bm C D D7
  J: "[~@2 [d5,f#5] ~ [c5,e5] ~ [c5,e5] ~ [b4,d5]@2 ~@2 a4@2 [g4,b4]@11 ~@5 [d5,f#5]@2, ~@12 c5 ~@19]/2", // D C Bm G D
  K: "[g4,b4] ~@8 a#6 a6 [d6,d#6,f6,g6] [a5,a#5,c6] [d#5,f5,g5] [c5,d5] a#4", // G D#maj7 Am D# Csus2
  L: "[g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~", // G
  M: "[g4,c5,e5] ~ [g4,c5,e5] ~ [g4,c5,e5] ~ [g4,c5,e5] ~ [g4,c5,e5] ~ [g4,c5,e5] ~ [g4,c5,e5] ~ [g4,c5,e5] ~", // C
  N: "[a4,d5,f#5] ~ [a4,d5,f#5] ~ [a4,d5,f#5] ~ [a4,d5,f#5] ~ [a4,d5,f#5] ~ [a4,d5,f#5] ~ [a4,d5,f#5] ~ [a4,d5,f#5] ~", // D
  O: "[a4,d5,f#5] ~ [a4,d5,f#5] ~ [a4,d5,f#5] ~ [a4,d5,f#5] ~ [a4,d5,f#5] ~ [a4,d5,f#5] ~ [a4,d5,f#5] ~ [d5,f#5]@2", // D
  P: "[~@2 [d5,f#5] ~ [c5,e5] ~ [c5,e5] ~ [b4,d5]@3 ~ [a4,c5] ~ [g4,b4]@13 ~@3 [d5,f#5]@2]/2", // D C Bm Am G D
  Q: "~@2 [d5,f#5] ~ [c5,e5] ~ [c5,e5] ~ [b4,d5]@2 ~@2 [a4,c5]@3 ~", // D C Bm Am
  R: "[g4,c#5] ~@8 [a6,a#6] [d#6,f6,g6] [a5,a#5,c6,d6,f6,g6,a6,a#6] [g5,g#5,a5,a#5,b5,c6,d6,d#6] [c5,d5,d#5,f5] [f4,g4,a4,a#4] [d4,d#4], b4 ~@7", // Gdim A#maj7 D# Dm7 Gm7 D#maj7
  S: "[g5,b5,d6] ~ [g5,b5,d6] ~ [g5,b5,d6] ~ [g5,b5,d6] ~ [g5,b5,d6] ~ [g5,b5,d6] ~ [g5,b5,d6] ~ [g5,b5,d6] ~", // G
  T: "[g5,b5,d6] ~ [g5,b5,d6] ~ [g5,b5,d6] ~ [g5,b5,d6] ~ [g6,a6,a#6] [d6,d#6,f6] [g5,a5,a#5,c6] [d5,d#5,f5,d#6,f6] [a#5,c6,d6] [f5,g5,a5] [a#4,c5,d5,d#5] [d#4,f4,g4,a4]", // G Gm Dm C7 Dm A# F Cm7 …
  U: "[c4,d4,c6,e6,g6] [c6,e6,g6] ~ [c6,e6,g6]!3 ~ [c6,e6,g6]!3 ~ [c6,e6,g6]!3 ~ [c6,e6,g6]", // C
  V: "[c6,e6,g6]!2 ~ [c6,e6,g6]!3 ~ [c6,e6,g6]!3 ~ [c6,e6,g6]!3 ~ [c6,e6,g6]", // C
  W: "[a5,d6,f6,f#6] ~ [a5,d6,f#6] ~ [a5,d6,f#6] ~ [a5,d6,f#6] ~ [a5,d6,f#6] ~ [a5,d6,f#6] ~ [a5,d6,f#6] ~ [a5,d6,f#6] ~", // D
  X: "[a5,d6,f#6] ~ [a5,d6,f#6] ~ [a5,d6,f#6] ~ [a5,d6,f#6] ~ [a5,d6,f#6] ~ [a5,d6,f#6] ~ [a5,d6,f#6] ~ [d5,f#5]@2", // D
  Y: "[~@2 [d5,f#5] ~ [c5,e5] ~ [c5,e5] ~ [b4,d5]@3 ~ [a4,c5] ~ [g4,b4]@9 ~@7 [d5,f#5]@2]/2", // D C Bm Am G D
  Z: "[g4,b4] ~@3 [g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5]@2 ~@6", // G
})).s("gm_piano").gain(0.4).pan(0.3)

// bass · piano · "PIANO 2"
const bass = note(`<
  ~@2 A B C B D E A B F G H I J K L M N O P@2 L Q R B C B D E A B F G H S J K L M N O P@2 L Q T B C B D E A B F G H I J
  K L M N O P@2 L Q R B C B D E A B F G H S J K L M N O P@2 L Q R B C B U E A B F G H I J V
>`.pickRestart({
  A: "g1@4 e2 ~@3 d2@4 e2@2 g1@2", B: "~@2 g1@2 e2@3 ~ d2 ~ d2@2 e2@2 d2 ~", C: "g1@2 e2 ~ d2@2 e2 g1",
  D: "c2@5 ~ a2@2 g2@4 a2@2 c2@2", E: "~@2 c2@2 a2@3 ~ g2 ~ g2@2 ~@2 g2 ~, ~@3 a2", F: "d2@4 b2 ~@3 a2@4 b2@2 d2@2",
  G: "~@2 d2@2 b2@3 ~ a2 ~ a2@2 b2 ~ d2 ~", H: "~@2 d2 ~ d2 ~ d2 ~ e2@3 ~ f#2 ~ g2@2",
  I: "~@2 g2@2 e3@3 ~ d3@3 ~ e3 ~ d2@2", J: "~@2 d2 ~ d2 ~ d2@2 e2@3 ~ f#2@3 ~", K: "g2 ~@15",
  L: "d2@5 ~ f#2@5 ~ a2@3 ~", M: "d2@4 ~@2 f#2@5 ~ a2@2 ~@2", N: "g2@4 ~@2 b2@5 ~ d3@3 ~", O: "g2@5 ~ b2@5 ~ d3 ~@3",
  P: "c2@5 ~ e2@5 ~ g2@3 ~", Q: "d2 ~@7", R: "g1@4 e2 ~@3 d2@4 e2 ~ g1@2", S: "~@2 g2@2 e3@3 ~ d3@3 ~ e3@2 d2@2",
  T: "g1@4 e2@2 ~@2 d2@4 e2 ~ g1@2", U: "c2@2 ~ a2 g2@2 a2 c2", V: "g2 ~@3 g2 ~ g2 ~ g2 ~@7",
})).s("gm_piano").gain(0.4).pan(0.3)

// bass · acoustic bass · "BASS"
const bass_2 = note(`<
  ~@2 A B@2 C D E F G H I J C K L M N O@2 P@2 Q R B C B S E T C U V H J G W X Y N Z AA P AB AC AD C AE C AF E D C G AG H
  J G J AH Q M Z@2 AB@2 Y R C B@3 E AI G AJ V I AK B J X Y Q Z@2 AB P Y R C A B@2 E AL B AJ V H AM AF AN AO
>`.pickRestart({
  A: "g1@4 b1@3 ~ d2@3 ~ b1@3 ~", B: "g1@3 ~ b1@3 ~ d2@3 ~ b1@3 ~", C: "g1@3 ~ b1@3 ~ d2@4 b1@3 ~",
  D: "c2@3 ~ e2@3 ~ g2@4 e2@3 ~", E: "c2@3 ~ e2@3 ~ g2@3 ~ e2@3 ~", F: "g1@3 ~ b1@3 ~@2 d2@3 ~ b1@3",
  G: "g1@4 b1@3 ~ d2@4 b1@3 ~", H: "d2@4 f#2@3 ~ a2@3 ~ f#2@3 ~", I: "d2@4 f#2@3 ~ a2@4 f#2@3 ~",
  J: "d2@3 ~ c2@3 ~ b1@3 ~ a1@3 ~", K: "d2@2 ~@2 c2@2 ~@2 b1@2 ~@2 a1@3 ~", L: "g1@3 ~@13", M: "d2@5 ~ f#2@6 a2@2 ~@2",
  N: "d2@5 ~ f#2@5 ~ a2@2 ~@2", O: "g1@5 ~ b1@5 ~ d2@2 ~@2", P: "c2@5 ~ e2@5 ~ g2@3 ~", Q: "d2@5 ~ f#2@5 ~ a2@3 ~",
  R: "d2 ~@15", S: "g1@3 ~ g1@3 ~ a1@3 ~ b1@2 ~@2", T: "c2@3 ~ e2@3 ~ g2@4 e2@2 ~@2", U: "g1@4 b1@4 d2@3 ~ b1@2 ~@2",
  V: "d2@3 ~ f#2@3 ~ a2@3 ~ f#2@3 ~", W: "d2@4 c2@3 ~ b1@3 ~ a1@3 ~", X: "g1 ~@7", Y: "d2@5 ~ f#2@5 ~ a2@4",
  Z: "g1@5 ~ b1@5 ~ d2@3 ~", AA: "g1@6 b1@5 ~ d2@3 ~", AB: "c2@5 ~ e2@5 ~ g2@4", AC: "d2@6 f#2@5 ~ a2@4", AD: "d2 ~@7",
  AE: "g1@3 ~ b1@4 d2@4 b1@3 ~", AF: "g1@3 ~ b1@4 d2@3 ~ b1@3 ~", AG: "d2@3 ~ f#2@3 ~ a2@4 f#2@3 ~", AH: "g1 ~@15",
  AI: "c2@4 e2@3 ~ g2@4 e2@2 ~@2", AJ: "g1@3 ~ b1@3 ~ d2@3 ~ b1@2 ~@2", AK: "d2@3 ~ c2@3 ~ b1@2 ~@2 a1@3 ~",
  AL: "c2@3 ~ e2@4 g2@4 e2@2 ~@2", AM: "d2@3 ~ c2@2 ~@2 b1@2 ~@2 a1@2 ~@2", AN: "d2@3 ~ c2@3 ~ b1@3 ~ a1@2 ~@2",
  AO: "g1@2 ~@2 g1 ~ g1 ~ g1@2 ~@6",
})).s("gm_acoustic_bass").gain(0.25)

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

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

// drums · snare
const snare = s("sd").struct("<~@2 A@13 B A@7 C A@13 B A@7 C A@13 B A@7 C A@13 B A@7 C A@13 D>".pickRestart({
  A: "~ x ~ x", B: "x ~@2 x", C: "x", D: "x ~ x!3 ~@3",
})).gain(0.46)

// drums · crash
const crash = s("cr").struct("<~@2 A ~@21 A ~@21 A ~@21 A ~@21 A ~@13>".pickRestart({
  A: "x",
})).gain(0.41)

// drums · ride
const ride = s("rd").struct("<~@2 A B@12 C D@7 C A B@12 C D@7 C A B@12 C D@7 C A B@12 C D@7 C A B@12 C>".pickRestart({
  A: "~ x!7", B: "x!8", C: "x", D: "x!4",
})).gain(0.36)

stack(piano, bass, bass_2, kick, rim, snare, crash, ride)

More by The Beatles