Strudelify
Roll Over Beethoven cover art

With The Beatles

Roll Over Beethoven

The Beatles

KeyD majorTempo168 bpm
0:00/0:00
// Roll Over Beethoven — The Beatles
// 168 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: metre changes (4/4 at bar 1, 2/4 at bar 107, 4/4 at bar 108) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: Full arrangement: all 112 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(168/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · electric guitar clean · "GUITAR 1"
const electric_guitar_clean = note(`<
  A B C@2 D E@4 F@2 G ~@37 H@4 I@2 H@2 ~@3 J K L M N E@4 O P Q@2 ~@24 R@4 S T U V ~ W X Y@4
>`.pickRestart({
  A: "~@5 f#4 a4 b4", B: "[a4,d5]!8",
  C: "[f5@4 c5@4 a4@4 g4 ~ [a3,d4]@5 ~ [a3,d4]@2 [a3,d4,f#4]@4 [a3,d4,f#4]@2 [a3,d4,f#4]@2 [a3,d4,f#4]@2]/2", // D5 D
  D: "[a3,d4,f#4]@2 [a3,d4,f#4]!2 ~ a4!3", // D
  E: "[a4!2 g4 f4 d4 [f4,a4]!2 [f4,a4]@2 d4 [f4,a4] [f4,a4]@2 d4 [f4,a4] [f4,a4]@2 d4 [f4,a4] [f4,a4]@2 d4 [f4,a4] [f4,a4]@2 d4 [f4,a4] [f4,a4]@2 d4 [f4,a4] [g4,b4]]/4", // F G
  F: "[[a4,d5]@2 [a4,d5] [b4,e5] [c5,f5]@2 ~ [a4,d5]@2 [b4,e5] [c5,f5] [b4,e5] [a4,d5] [g4,b4] [f4,a4] d4]/2", // D5 E5 F5 D5 E5 F5 E5 D5 …
  G: "[a3,d4]@2 [a3,d4]@2 c4 b3@2 [a3,d4]", // D5
  H: "[[a3,d4,f#4]@4 [a3,d4,f#4]@3 [a3,d4,f#4]@2 [a3,d4,f#4] [a3,d4,f#4]@2 [a3,d4,f#4]@2 [a3,d4,f#4]@2]/2", // D
  I: "[[g3,b3,d4]@4 [g3,b3,d4]@3 [g3,b3,d4]@2 [g3,b3,d4] [g3,b3,d4]@2 [g3,b3,d4]@2 [g3,b3,d4]@2]/2", // G
  J: "~@6 b2@2 ~@7 [d4,a4]", K: "d5 f5 [a4,d5] c5 a4 a4@2 [a4,d5]", L: "a4@2 a4 a4@2 a4 a4@2",
  M: "a4 a4@2 a4 a4@2 a4 ~", N: "g4 f4@2 ~@2 a4!3", O: "[g#4,c5]@4 c5@4 c5@4 a4 ~@2 [d4,a4]",
  P: "d5 f5@2 [a4,d5] ~ g#4 g4 f4", Q: "[d4@2 d4@2 c4 c4@2 d4@4 d4@3 ~@2]/2",
  R: "[[a3,d4,f#4]@4 [a3,d4,f#4] ~@3 [a3,d4,f#4]@6 [a3,d4,f#4]@4 [a3,d4,f#4]@4 [a3,d4,f#4]@2 [a3,d4,f#4]@2 [a3,d4,f#4]@2 [a3,d4,f#4]@4]/2", // D
  S: "[g3,b3,f4] ~ [g3,b3,f4] ~ [g3,b3,f4]!2 ~ [g3,b3,f4]", T: "~@2 [g3,b3,f4] ~ [g3,b3,f4]!2 [g3,b3,f4]@2",
  U: "[a3,d4,f#4] ~ [a3,d4,f#4] ~", V: "[a3,d4,f#4]@2 ~ [a3,d4,f#4]@3 ~@2", W: "~@5 [g#4,c5] [d4,g4]@2",
  X: "g4 f4@2 d4 c4 a3 c#4 d4", Y: "[~@4 [d4,f#4,a4,d5]@49 ~@11]/4",
})).s("gm_electric_guitar_clean").gain(0.4).pan(0.2)

// chords · overdriven guitar · "GUITAR 1-2" · D5
const overdriven_guitar = note("<~@62 [~@3 [a4,d5]@2 ~ [a4,d5]@2] [~ [a4,d5]@2 ~ [a4,d5]@2 ~@2] ~@48>")
  .s("gm_overdriven_guitar").gain(0.4).pan(0.8)

// chords · electric guitar muted · "GUITAR 2"
const electric_guitar_muted = note(`<
  ~@5 A@2 B@2 C@2 D E@2 F G@2 H@2 I@2 J K E L E F G@2 H@2 I@2 J K E L E F G@2 H@2 I@2 J K E M N@4 O@2 N@2 P Q R S T K
  U@2 V@2 W@2 X K I@2 E F G@2 H@2 I@2 J K E L E F G@2 H@2 I@2 J K Y@2 I@4 Z@2 AA@2 AB AC AD AE@4
>`.pickRestart({
  A: "[[g3,d4]!2 [g3,e4] ~ [g3,f4] [g3,d4] [g3,e4] [g3,d4]@2 [g3,d4] [g3,e4] ~ [g3,f4] [g3,d4] [g3,e4] [g3,d4]]/2", // G5 C G7 G5 C G5 C G7 …
  B: "[d3,a3]!2 [d3,b3] ~ [d3,c4] [d3,a3] [d3,b3] [d3,a3]", // D5 G D7 D5 G D5
  C: "[[g3,d4]!2 [g3,e4] ~ [g3,f4]@2 ~ [a3,e4]@2 [a3,e4] [a3,f#4]@2 [a3,g4]@2 [a3,e4] ~]/2", // G5 C G7 A5 D A7 A5
  D: "[d3,a3]!2 [d3,b3] ~ [d3,c4]@2 [d3,b3] [d3,a3]", E: "~ [d3,a3] [d3,b3] [d3,a3] [d3,c4]@2 [d3,b3] [d3,a3]",
  F: "[g3,d4]!2 [g3,e4] ~ [g3,f4]@2 [g3,e4] [g3,d4]", G: "[d3,a3]!2 [d3,b3] [d3,a3] [d3,c4]@2 [d3,b3] [d3,a3]",
  H: "[[g3,d4]!2 [g3,e4] ~ [g3,f4]@2 [g3,e4] [g3,d4]@2 [g3,d4] [g3,e4] ~ [g3,f4]@2 [g3,e4] [g3,d4]]/2", // G5 C G7 C G5 C G7 C …
  I: "[[d3,a3]!2 [d3,b3] ~ [d3,c4]@2 [d3,b3] [d3,a3]@2 [d3,a3] [d3,b3] ~ [d3,c4]@2 [d3,b3] [d3,a3]]/2", // D5 G D7 G D5 G D7 G …
  J: "[g3,d4]!2 [g3,e4] ~ [g3,f4] [g3,d4] [g3,e4] [g3,d4]", K: "[a3,e4]!2 [a3,f#4] ~ [a3,g4]@2 [a3,f#4] [a3,e4]",
  L: "~ [d3,a3] [d3,b3] ~ [d3,c4]@2 [d3,b3] [d3,a3]", M: "[d3,a3]!2 [d3,b3] [d3,a3]!3 [d3,b3] [d3,a3]",
  N: "[[d3,a3]!2 [d3,b3] [d3,a3]!3 [d3,b3] [d3,a3]@2 [d3,a3] [d3,b3] [d3,a3] [d3,c4] [d3,a3] [d3,b3] [d3,a3]]/2", // D5 G D5 G D5 G D5 D7 …
  O: "[[g3,d4]!2 [g3,e4] [g3,d4] [g3,f4]@2 [g3,e4] [g3,d4]@2 [g3,d4] [g3,e4] [g3,d4] [g3,f4] [g3,d4] [g3,e4] [g3,d4]]/2", // G5 C G5 G7 C G5 C G5 …
  P: "[g3,d4]!2 [g3,e4] [g3,d4]!3 ~@2", Q: "[a3,e4]!2 [a3,g4] ~ [a3,e4]@2 [a3,g4] [a3,f#4]",
  R: "~ [d3,a3] [d3,b3] [d3,a3]!3 [d3,b3] [d3,a3]", S: "~ [d3,a3]!7", T: "[d3,a3]!2 [d3,b3] ~ [d3,a3]!2 [d3,b3] ~",
  U: "[~ [d3,a3] [d3,b3] [d3,a3] [d3,c4]@2 [d3,b3] [d3,a3]@2 [d3,a3] [d3,b3] [d3,a3] [d3,c4]@2 [d3,b3] ~]/2", // D5 G D5 D7 G D5 G D5 …
  V: "[[g3,d4]!2 [g3,e4] ~ [g3,f4]@2 [g3,e4] [g3,d4]@2 [g3,d4] [g3,e4] [g3,d4] [g3,f4]@2 [g3,e4] ~]/2", // G5 C G7 C G5 C G5 G7 …
  W: "[~ [d3,a3] [d3,b3] [d3,a3] [d3,c4]@2 [d3,b3] [d3,a3]@2 [d3,a3] [d3,b3] [d3,a3] [d3,c4]@2 [d3,b3]@2]/2", // D5 G D5 D7 G D5 G D5 …
  X: "[g3,d4]!2 [g3,e4] ~ [g3,f4]@2 [g3,e4] ~", // G5 C G7 C
  Y: "[[d3,a3]!2 [d3,b3] [d3,a3] [d3,c4]@2 [d3,b3] [d3,a3]@2 [d3,a3] [d3,a3]@2 [d3,c4]!2 [d3,b3] ~]/2", // D5 G D5 D7 G D5 D7 G
  Z: "[[g3,d4]!2 [g3,e4] ~ [g3,f4]!2 [g3,e4] [g3,d4]@2 [g3,d4] [g3,e4] [g3,d4] [g3,f4]!2 [g3,e4] [g3,d4]]/2", // G5 C G7 C G5 C G5 G7 …
  AA: "[[d3,a3]!2 [d3,b3] ~ [d3,a3]!2 [d3,b3] [d3,a3]@2 [d3,a3] [d3,b3] [d3,a3]!3 [d3,b3] ~]/2", AB: "[a2,e3]!8",
  AC: "[a2,e3]!4 [d3,a3]!2 [d3,b3] [d3,a3]", AD: "[d3,a3]@2 [d3,b3] [d3,a3]!5", AE: "[~@4 [d3,a3]@49 ~@11]/4",
})).s("gm_electric_guitar_muted").gain(0.4)

// bass · slap bass 1 · "BASS"
const bass = note(`<
  ~@5 A B C@2 D E F G F H I J H K F@2 L M N O F H I J H K F@2 L M N O F H I J H K F@2 L M I P Q R S R T U V W X Y Q Z AA
  AB AC@2 AD@2 AC@2 AD AE AC AF F H I J H K F@2 L M N O F H I J H K F@2 L M AG AH AI AJ AI AK AL@2 AM AN AO AP AQ AR@4
>`.pickRestart({
  A: "g2 ~ g2@2 b1@2 b1@2 d2 ~ d2@2 e2@2 e2@2", B: "g2 ~ g2@2 e2@2 e2@2 d2 ~ d2@2 b1@2 d2@2",
  C: "d2 ~ d2@2 f2@2 f#2@2 a2 ~ a2@2 f#2@2 a2@2", D: "g2 ~ g2@2 b1@2 b1@2 d2 ~ d2@2 b1@2 d2@2",
  E: "a1 ~ a1@2 c#2@2 c#2@2 e2 ~ e2@2 c#2@2 e2@2", F: "d2 ~ d2@2 f#2@2 f#2@2 a2 ~ a2@2 f#2@2 a2@2",
  G: "a2 ~ a2@2 a1@2 a1@2 c#2 ~ c#2@2 e2@2 e2@2", H: "g2@3 ~ g2@2 b1@2 d2@3 ~ b1@2 d2@2",
  I: "d2@3 ~@3 f#2@2 a2@3 ~ f#2@2 a2@2", J: "d2@3 ~ d2@2 f#2@2 a2@3 ~ e2@2 f#2@2", K: "~@2 g2 ~ b1@4 d2@3 ~ b1@2 d2@2",
  L: "g2 ~ g2@2 b1@2 b1@2 d2@3 ~ b1@2 d2@2", M: "a1 ~ a1@2 c#2@2 c#2@2 e2@3 ~ c#2@2 e2@2",
  N: "d2 ~ d2@2 f#2@2 f#2@2 a2@3 ~ f#2@2 a2@2", O: "a2@3 ~@3 a1@2 a1@3 ~ b1@2 c#2@2",
  P: "a2 ~ a2@2 ~@2 a2@2 a2 ~ a1@2 b1@2 c#2@2", Q: "d2 ~ d2@2 d2@2 d2@2 d2 ~ d2@2 d2@2 d2@2",
  R: "d2 ~ d2@2 d2@2 d2@2 d2 ~ a2@2 g2@2 f#2@2", S: "d2@3 ~ d2@2 d2@2 d2 ~ d2@2 d2@2 d2@2",
  T: "g2@3 ~ g2@2 g2@2 g2@3 ~ g2@2 g2@2", U: "g2@3 ~ g2@2 g2@2 g2 ~ a2@2 g2@2 f#2@2",
  V: "d2@3 ~ d2@2 d2@2 d2@3 ~ d2@2 d2@2", W: "d2@3 ~ d2@2 d2@2 d2@3 ~ d2@2 a2@2",
  X: "g2@3 ~ g2@2 g2@2 g2 ~ g2@2 g2@2 g2@2", Y: "a2 ~ a2@2 a2@2 a2@2 a2@3 ~ a2@4", Z: "d2 ~ a1@2 a1@2 a1@2 a1@3 ~ a2@4",
  AA: "d2@5 ~ f#2@2 a2@3 ~ f#2@2 a2@2", AB: "g2@5 ~ b1@2 d2@3 ~ b1@2 d2@2",
  AC: "d2 ~ d2@2 d2@2 f#2@2 a2 ~ a2@2 f#2@2 a2@2", AD: "g2 ~ g2@2 g2@2 b1@2 d2 ~ d2@2 b1@2 d2@2",
  AE: "a1 ~ a1@2 a2@2 c#2@2 e2 ~ e2@2 c#2@2 e2@2", AF: "a1 ~ a1@2 d2@2 d2@2 f#2 ~ f#2@2 g2@2 a2@2",
  AG: "d2@3 ~ d2@2 f#2@2 g2@3 ~ g#2@4", AH: "a1 ~ a1@2 a2@4 a1@3 ~ a2@4", AI: "d2 ~ d2@2 f#2@2 f#2@2 a2@3 ~ g2@2 f#2@2",
  AJ: "d2 ~ d2@2 f#2@2 f#2@2 a2 ~ a2@2 f#2@2 f#2@2", AK: "d2 ~ d2@2 c2@2 c2@2 b1 ~ b1@2 a1@2 a1@2",
  AL: "g1 ~ g1@2 b1@2 b1@2 d2 ~ d2@2 c2@2 b1@2", AM: "d2 ~ d2@2 f#2@2 f#2@2 a2@3 ~ g2@2 g2@2",
  AN: "d2 ~ d2@2 f#2@2 f#2@2 a2 ~ f#2@2 g2@2 f#2@2", AO: "a2 ~ a2@2 a2@2 a2@2 a2 ~ a2@2 a2@2 a2@2",
  AP: "a2 ~ a2@2 a2@2 a2@2 d2 ~ f#2@2 f#2@4", AQ: "g2 ~ f#2@2 g2@2 g#2@2 a2 ~ a1@2 c#2@2 d2@2",
  AR: "[~@4 d2@49 ~@11]/4",
})).s("gm_slap_bass_1").gain(0.64)

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

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

// drums · open hat
const open_hat = s("oh").struct("<~@5 A@7 B A@35 C ~@12 A@35 B A@3 B D A@6 ~@4>".pickRestart({
  A: "x ~ x!3 ~ x!2", B: "x", C: "x ~ x!3 ~@3", D: "~@2 x!3 ~ x!2",
})).gain(0.3)

// drums · open hat · soft notes
const open_hat_soft = s("oh").struct("<~@5 A@7 ~ A@35 B ~@12 A@35 ~ A@3 ~ C A@6 ~@4>".pickRestart({
  A: "~ x ~@3 x ~@2", B: "~ x ~@6", C: "~@5 x ~@2",
})).gain(0.15)

// drums · crash
const crash = s("cr").struct("<~@101 x ~@10>").gain(0.35)

stack(
  electric_guitar_clean, overdriven_guitar, electric_guitar_muted, bass, kick, snare, open_hat, open_hat_soft, crash
)

More by The Beatles