Strudelify
(We're Gonna) Rock Around The Clock cover art

1948 · Rock Around the Clock

(We're Gonna) Rock Around The Clock

Bill Haley

KeyG majorTempo186 bpm
0:00/0:00
// (We're Gonna) Rock Around The Clock — Bill Haley
// 186 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 94 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
// note: The whole transcription plays 16 ms behind the beat; the grid follows it, so its parts stay together.
setcpm(186/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, A@4 for four bars: edit a riff to change every repeat.

// bass · electric bass pick · "Bass"
const bass = note(`<
  ~ A ~ A ~ A ~ B C D E F G H I F G J K D E D E F G H I F G J K D E D E F G H I F G J K D E D E F G H I F G J K D E D E
  F G H I F G J K D E D E F G H I F G J K D E D E F G H I F G J K F L ~
>`.pickRestart({
  A: "g1@3 ~@13", B: "~@4 d2@2 ~@6 d2@3 ~", C: "~@4 d2@3 ~@4 d2 d2@2 ~@2", D: "g1 b1 d2 e2", E: "f2 e2 d2 b1",
  F: "g1 b1 c2 c#2", G: "d2 g1 a1 b1", H: "c2 e2 c2 a#1", I: "c2@3 ~ c2@4 a#1@4 a1@4", J: "d2 f#2 d2 c2",
  K: "d2 c2 b1 a1", L: "d2@3 c2 b1@2 ~ g1@5 g1@2 ~@2",
})).s("gm_electric_bass_pick").gain(0.45)

// chords · electric guitar muted · "Guitar"
const electric_guitar_muted = note(`<
  ~ A ~ B ~ C ~ D E F G H G I J F K L M F K F G H G N J F G L M F G F G H G N J F G L M F K F G F G I J F G L M F K F G
  H G I J F G L M F G F G H G N J F G L M F K F G H G N J F G L M O P ~
>`.pickRestart({
  A: "~ [g2,g3,b3,d4,g4]@2 ~@13", B: "[g2,d4,g4,b4]@3 ~@13", C: "~ [g2,d4,g4,b4]@2 ~@13, d5@3 ~@13",
  D: "~@2 [d3,d4,f#4,a4,d5] ~@3 [d3,f#4,a4,d5] ~", E: "~@4 [d3,f#4,a4,d5] ~@5 [d3,f#4,a4,d5]@2 ~ [d3,f#4,a4,d5] ~@2",
  F: "~@2 [g3,b3,d4] ~@5 [g3,b3,d4]@2 ~@6", G: "[g3,b3,d4] ~@2 [g3,b3,d4] ~@4", H: "~ [g3,b3,d4] ~@2 [g3,b3,d4] ~@3",
  I: "~@2 [g3,a#3,c4,e4]@2 ~@4 [g3,a#3,c4,e4] ~@7", J: "[g3,a#3,c4,e4] ~@5 [g3,a#3,c4,e4]@2 ~@8",
  K: "[g3,b3,d4]@2 ~@4 [g3,b3,d4] ~@9", L: "~@2 [f#3,a3,c4,d4] ~@5 [f#3,a3,c4,d4] ~@7",
  M: "[f#3,a3,c4,d4] ~@5 [f#3,a3,c4,d4] ~@9", N: "~@2 [g3,a#3,c4,e4] ~@5 [g3,a#3,c4,e4] ~@7",
  O: "~@8 [a3,c4]@2 ~@2 [b3,d4] ~@3, ~@3 [g3,b3]@10 ~@3", P: "[a3,c4,d4]@3 e4 [a3,c4,f#4]@2 ~ [g3,b3,g4]@2 ~@3 g2@3 ~",
})).s("gm_electric_guitar_muted").gain(0.36)

// chords · piano
const piano = note(`<
  ~@9 A B C A D@2 A@2 E F G B A B A@2 D@2 A@2 E F G B H@6 I@2 J K L@3 B A@2 D@2 A@2 E F G B A B A@2 D@2 A@2 E F G B A@4
  D M A@2 E F G B A B A@2 D@2 A@2 E F G N ~
>`.pickRestart({
  A: "~@4 [d4,g4,b4]@3 ~@5 [d4,g4,b4]@4", B: "~@4 [d4,g4]@5 ~@3 [d4,g4,b4]@4, ~@4 b4@3 ~@9",
  C: "~@4 [d4,g4,b4]@4 ~@4 [d4,g4,b4]@3 ~", D: "~@4 [e4,a#4,c5]@5 ~@3 [e4,a#4,c5]@4",
  E: "~@4 [f#4,a4,d5]@5 ~@3 [f#4,a4,d5]@4", F: "~@4 [f#4,c5,d5]@5 ~@3 [f#4,c5,d5]@4",
  G: "~@4 [d4,g4,b4]@5 ~@3 [d4,g4,b4]@4", // G
  H: "[d4@3 d4 [d4,g4,b4]@2 d4@2 ~@2 d4@2 d4@2 d4@2 d4@2 d4@2 [d4,b4]@2 ~@4 d4@2 [d4,g4,b4]@2 d4@2 d4@2 d4!2 d4@2 ~@4 d4@2 [d4,g4,b4]@2 ~@4 d4@2 d4@2 d4@4 ~@2 [d4,g4,b4]@2 g4@2 [g4,a4]@2 ~@4 g4@2 [g4,a4]@2 g4 ~@5 a4@2 ~@12 f4@2, ~@4 e4@4 f4@8 ~@6 d4@4 ~@12 d4@4 ~@4 d4@4 ~@18 [e4,a#4,c5]@5 ~@3 [e4,a#4,c5]@5 ~@3 [e4,a#4,c5]@5 ~@3 [e4,g4,a#4,c5]@4, ~@8 e4@4 e4@8 [e4,g4]@4 e4@4 e4@8 [e4,g4,b4]@4 e4@4 e4@7 ~@7 e4@6 ~@2 a4@6 ~@2 a4@6 ~@2 a4@5 a4@3 a4@5 ~, ~@12 [g4,b4]@4 ~@8 f4@9 ~@7 f4@8 g4@4 [g4,b4]@4 ~@4 f#4@7 ~@11 g4@6 ~@2 g4@2 a#4@4 ~@4]/6", // G Gsus2 C7 Em G
  I: "[f4 d4!2 ~@3 [d4,g4,b4] ~@2 g4 [d4,g4,b4] ~@3 d4!2, g4@4 [g4,b4]@4 ~@2 b3@4 c#4@5 ~@3 g4@6 [g4,b4]@4, ~@3 d4@3 c4@4 ~@6, ~@16 d4@4 a4@5 ~ f4@6]/2", // G
  J: "~@2 f#4!2 ~@2 f#4!2 ~@2 d4 ~@3 d4!2, a4@3 ~ [a4,d5]@5 ~@4 e4@2 ~, ~ g4@3 f#4@2 ~@2 f#4@3 d4@3 ~@2, ~@5 g4@3 ~ e4@3 [f#4,a4,d5]@4", // D5 D
  K: "~ b3 a3 ~@3 a3 ~@3 f#3!2 ~@2 f#3!2, c4@2 ~ a3@2 b3@2 ~ a3@3 ~ [a3,f#4,c5,d5]@4, ~@4 [c5,d5]@5 ~@7, ~@4 [c4,f#4]@3 ~@2 g3@3 ~ g3@3", // D7 Csus2 Cdim
  L: "[g3@3 ~ [b3,d4,g4,b4]@3 ~ d4@2 d4@2 e4@2 ~@6 [g4,b4]@2 g4@6 [d4,b4]@5 ~@3 [d4,b4]@3 ~@5 [d4,g4,b4]@4, ~@3 g3@4 b3@4 ~ [d4,g4,b4]@4 f4@8 ~@4 g4@8 g4@7 ~@5, ~@7 e4@2 e4@3 ~@12, ~@20 d4@7 ~@21]/3", // G
  M: "~@4 [e4,c5]@5 ~@3 [e4,a#4,c5]@4, ~@4 a#4@3 ~@9", N: "[f#4,d5]@6 ~ [d4,g4,b4]@7 ~@2, a4 ~@3",
})).s("gm_piano").gain(0.4)

// drums · kick
const kick = s("bd").struct("<~@7 x ~ [x!2]!84 ~>").gain(0.5)

// drums · snare
const snare = s("sd").struct("<A ~ A ~ A ~ A B C D@84 ~>".pickRestart({
  A: "~@5 x!2 ~", B: "~@3 x", C: "~@4 x ~@6 x ~ x ~@2", D: "~ x ~ x",
})).gain(0.5)

// drums · hihat
const hihat = s("hh").struct("<~@9 [x ~@2 x ~@3 x!2 ~@2 x ~@3 x]!83 [x ~@2 x ~@3 x!2 ~@2 x ~@4] ~>").gain(0.4)

// drums · open hat
const open_hat = s("oh").struct("<~@7 [~ x ~ x] [~@4 x ~@6 x ~ x ~@2] [~ x ~ x]!84 ~>").gain(0.35)

// drums · crash
const crash = s("cr").struct("<~@93 [~ x ~@2]>").gain(0.5)

// drums · cowbell
const cowbell = s("cb").struct("<[~ x ~ x]!7 ~@87>").gain(0.35)

stack(bass, electric_guitar_muted, piano, kick, snare, hihat, open_hat, crash, cowbell)