Strudelify

Roll Over Beethoven

Chuck Berry

KeyD majorTempo160 bpm
0:00/0:00
// Roll Over Beethoven — Chuck Berry
// 160 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 108, 4/4 at bar 108) are rendered on a constant 4/4 grid of one bar per cycle
// note: duplicate parts dropped: ch 2 "Lead Gtr DBL Ovrdrv" overdriven guitar (copy of ch 1 "Lead Gtr Muted" electric guitar muted)
// note: Full arrangement: all 115 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(160/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 · electric guitar muted · "Lead Gtr Muted"
const electric_guitar_muted = note(`<
  A B C@2 D E@4 F@2 G ~@37 H@4 I@2 H@2 ~@3 J K L M N O@4 P Q R@2 ~@24 S@4 T U V W ~ X Y Z@7
>`.pickRestart({
  A: "~@10 [c#4,d4,e4] f#4 a4@2 b4@2", // C#m
  B: "[e4,f#4,g4,a4,b4,c#5] [a4,d5] [a4,d5]@2 [a4,d5]@2 [e4,f#4,g4,a4,b4,c#5] [a4,d5] [a4,d5]@2 [a4,d5]@2 [e4,f#4,g4,a4,b4,c#5] [a4,d5] [a4,d5]@2", // F#m7 D5 F#m7 D5 F#m7 D5
  C: "[f5 d5@3 c5 a4@3 g#4 g4@3 f4@2 [e3,f#3,g3,a3,b3,c#4] [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", // F#m7 D5 D
  D: "[e3,f#3,g3,a3,b3,c#4,d4,e4] [a3,d4,f#4]@3 [a3,d4,f#4]@2 [a3,d4,f#4]@4 g4 a4 a4@2 a4@2", // Em7 D
  E: "[a4!2 g4 f4 d4 [f4,a4]!2 a4@2 d4 [f4,a4] a4@2 d4 [f4,a4] a4@2 d4 [f4,a4] a4@2 d4 [f4,a4] a4@2 d4 [f4,a4] a4@2 d4 [f4,a4] [g4,b4], ~@7 f4@3 ~ f4@3 ~ f4@3 ~ f4@3 ~ f4@3 ~ f4@3 ~@2]/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] a4 d4, ~@7 f4]/2", // D5 E5 F5 D5 E5 F5 E5 D5 …
  G: "[a3,d4]@2 d4@2 c4!2 b3 [a3,d4], ~@2 a3@5 ~", // 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", J: "~@3 b2 ~@4",
  K: "f#4 [a4,d5] f5@2 d5@2 c5@2 a4@2 g4 a4@3 [a4,d5]@2, ~ a4 ~@2", // D5
  L: "g4 a4@3 a4@2 g4 a4@3 a4@2 g4 a4@3, ~@3 d5@2 ~ d5@2", M: "a4@2 g4 a4@3 a4@2 g4 a4@3 a4@2 ~@2, ~ d5@2 ~ d5@2 ~@2",
  N: "a4 g4 f4@4 ~@4 g4 a4 a4@2 a4@2",
  O: "[g4 a4 a4@2 g4@2 f4@2 d4@2 [f4,a4]@2 [f4,a4]@2 a4@4 d4@2 [f4,a4]@2 a4@4 d4@2 [f4,a4]@2 a4@4 d4@2 [f4,a4]@2 a4@4 d4@2 [f4,a4]@2 a4@4 d4@2 [f4,a4]@2 a4@4 d4@2 [f4,a4]@2 [g4,b4]@2, ~@7 f4@3 ~ f4@3 ~ f4@3 ~ f4@3 ~ f4@3 ~ f4@3 ~@2]/4", // F G
  P: "[g4,b4] [g#4,c5]@3 b4 c5@3 b4 c5@3 a4 ~@3", Q: "f#4 [a4,d5] f5@4 [a4,d5]@2 ~@2 g#4@2 g4@2 f4@2",
  R: "[d4@2 d4@2 c4 c4@2 d4@4 d4 c4@2 ~@2]/2",
  S: "[[a3,d4,f#4]@4 [a3,d4,f#4] ~@3 [a3,d4,f#4]@4 ~@2 [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
  T: "[g3,b3,f4] ~ [g3,b3,f4] ~ [g3,b3,f4]!2 ~ [g3,b3,f4]", U: "~@2 [g3,b3,f4] ~ [g3,b3,f4]!2 [g3,b3,f4]@2",
  V: "[a3,d4,f#4] ~ [a3,d4,f#4] ~", W: "[a3,d4,f#4]@2 ~ [a3,d4,f#4]@3 ~@2", X: "~@10 [d4,g4] [d#4,g#4] [d4,g4]@4",
  Y: "g4 f4@2 d4 c4 a3 c#4 d4", Z: "[~ [d4,f#4,a4,d5]@26 ~]/7",
})).s("gm_electric_guitar_muted").gain(0.48).pan(0.8)

// bass · fretless bass · "Fretless E. Bass"
const bass = note(`<
  ~@5 A B C@2 D E F G C H I J H K C@2 L M N O C H I J H K C@2 L M N O C H I J H K C@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 C H I J H K C@2 L M N O C H I J H K C@2 L M AG AH AI AJ AI AK AL@2 AI AM AN AO AP AQ@7
>`.pickRestart({
  A: "g2!2 b1!2 d2!2 e2!2", B: "g2!2 e2!2 d2!2 b1 d2", C: "d2!2 f#2!2 a2!2 f#2 a2", D: "g2!2 b1!2 d2!2 b1 d2",
  E: "a1!2 c#2!2 e2!2 c#2 e2", F: "d2!2 f#2!2 a2!2 f#2 g2", G: "a2!2 a1!2 c#2!2 e2!2", H: "g2@2 g2 b1 d2@2 b1 d2",
  I: "d2@2 ~ f#2 a2@2 f#2 a2", J: "d2@2 d2 f#2 a2@2 e2 f#2", K: "~ g2 b1@2 d2@2 b1 d2", L: "g2!2 b1!2 d2@2 b1 d2",
  M: "a1!2 c#2!2 e2@2 c#2 e2", N: "d2!2 f#2!2 a2@2 f#2 a2", O: "a2@2 ~ a1 a1@2 b1 c#2", P: "a2!2 ~ a2!2 a1 b1 c#2",
  Q: "d2!8", R: "d2!5 a2 g2 f#2", S: "d2@2 d2!6", T: "g2@2 g2!2 g2@2 g2!2", U: "g2@2 g2!3 a2 g2 f#2",
  V: "d2@2 d2!2 d2@2 d2!2", W: "d2@2 d2!2 d2@2 d2 a2", X: "g2@2 g2!6", Y: "a2!4 a2@2 a2@2",
  Z: "d2@2 a1@2 a1@2 a1@2 a1@4 [b1,d2] [f#2,g2] ~@2, ~@13 a2@3", AA: "d2@3 f#2 a2@2 f#2 a2", AB: "g2@3 b1 d2@2 b1 d2",
  AC: "d2!3 f#2 a2!2 f#2 a2", AD: "g2!3 b1 d2!2 b1 d2", AE: "a1!2 a2 c#2 e2!2 c#2 e2", AF: "a1!2 d2!2 f#2!2 g2 a2",
  AG: "d2@2 d2 f#2 g2@2 g#2@2", AH: "a1!2 a2@2 a1@2 a2@2", AI: "d2!2 f#2!2 a2@2 g2 f#2", AJ: "d2!2 f#2!2 a2!2 f#2!2",
  AK: "d2!2 c2!2 b1!2 a1!2", AL: "g1!2 b1!2 d2!2 c2 b1", AM: "d2!2 f#2!2 a2 f#2 g2 f#2", AN: "a2!8",
  AO: "a2!4 d2 f#2 f#2@2", AP: "g2 f#2 g2 g#2 a2 a1 c#2 d2", AQ: "[~ d2@26 ~]/7",
})).s("gm_fretless_bass").gain(0.58).pan(0.6)

// chords · electric guitar muted · "Rythm Muted Gtr"
const electric_guitar_muted_2 = 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 F
  U@2 V@2 W@2 X Y Z@2 E F G@2 H@2 I@2 J K E L E F G@2 H@2 I@2 J K AA@2 AB@4 AC@2 AD@2 AE AF AG AH@7
>`.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,a3] [d3,c4]@2 [d3,b3] [d3,a3]]/2", // D5 G D7 G D5 G D5 D7 …
  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,d4]",
  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]!3 [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] ~", Y: "[a3,e4]!2 [a3,f#4] ~ [a3,g4]@2 [a3,f#4] [a3,e4]",
  Z: "[[d3,a3]!2 [d3,b3] [d3,a3] [d3,c4]@2 [d3,b3] [d3,a3]@2 [d3,a3] [d3,b3] ~ [d3,c4]@2 [d3,b3] [d3,a3]]/2", // D5 G D5 D7 G D5 G D7 …
  AA: "[[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
  AB: "[[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 …
  AC: "[[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 …
  AD: "[[d3,a3]!2 [d3,b3] ~ [d3,a3]!2 [d3,b3] [d3,a3]@2 [d3,a3] [d3,b3] [d3,a3]!3 [d3,b3] ~]/2", AE: "[a2,e3]!8",
  AF: "[a2,e3]!4 [d3,a3]!2 [d3,b3] [d3,a3]", AG: "[d3,a3]@2 [d3,b3] [d3,a3]!5", AH: "[~ [d3,a3]@26 ~]/7",
})).s("gm_electric_guitar_muted").gain(0.51).pan(0.2)

// drums · kick
const kick = s("bd").struct(`<
  ~@5 A@8 B@20 C B@15 A@12 D A@2 E A F E A E A@3 B@16 G C B@5 A@2 E A@5 E A D@2 H ~@6
>`.pickRestart({
  A: "x", B: "x ~@2 x!2 ~@3", C: "x!2 ~ x!2 ~@3", D: "x!2", E: "x ~@6 x", F: "x!2 ~@6", G: "x ~@2 x!2 ~@2 x",
  H: "~ x ~@2",
})).gain(0.45)

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

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

// drums · crash
const crash = s("cr").struct("<~@61 A ~@11 A ~@23 A ~@3 A ~@6 B ~@6>".pickRestart({
  A: "x", B: "~ x ~@2",
})).gain(0.4)

stack(electric_guitar_muted, bass, electric_guitar_muted_2, kick, snare, hihat, crash)

More by Chuck Berry