Strudelify

Rock around the clock

Bill Haley

KeyB♭ majorTempo155 bpm
0:00/0:00
// Rock around the clock — Bill Haley
// 155 bpm, 4/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 8 "Hoorn in F" french horn (copy of ch 5 "Trompet in B♭" trumpet)
// note: Transcription provider: pdmx. https://musescore.com/score/5880285; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 89 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(155/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.

// other · trombone
const trombone = note(`<
  ~@2 A B C D E F G H I J K L M N O P Q R@2 S I J K L M N O P Q R@2 S ~@24 I J K L M N O P Q T@3 I J K L M N O P Q T@3 U
  V W X Y ~@2
>`.pickRestart({
  A: "bb2@2 bb2@2 bb2!2 bb2@2", B: "bb2!2 bb2@2 bb2@2 ~@2", C: "d3@2 d3@2 d3!2 d3@2", D: "d3!2 d3@2 d3@2 ~@2",
  E: "f3@2 f3@2 f3!2 f3@2", F: "f3!3 f3@2 f3!3", G: "f3@2 ~ f3 f3@2 ~ f3", H: "f3 ~ f3 f3@2 f3!3",
  I: "bb2@2 d3@2 f3@2 f3!2", J: "bb2@2 d3 f3@2 f3!3", K: "bb2@2 d3@2 f3@2 g3 f3", L: "ab3@2 f3 d3@2 bb2 c3 bb2",
  M: "f3 eb3 db3 bb2", N: "f3@2 eb3 db3@2 f3!3", O: "f3 eb3 d3 bb2", P: "f3@2 eb3 d3@2 d3!3",
  Q: "eb3@2 eb3@2 eb3!2 eb3@2", R: "[f3@2 eb3@2 db3@2 bb2 bb2@9]/2", S: "bb2@4 ~ f3!3",
  T: "[f3@2 eb3@2 db3@2 bb2 bb2@13 ~ f3!3]/3", U: "bb3 ab3", V: "g3 gb3", W: "f3 ~@3", X: "f3 g3 a3 bb3@3 ~@2",
  Y: "bb3",
})).s("gm_trombone").gain(0.3)

// chords · epiano1 · "Elektrische piano, Piano"
const epiano1 = note(`<
  ~@2 A B C@2 D E F G@4 H@2 I@2 J K@2 L M N@3 H@2 I@2 J K@2 L M O@2 P Q R S T U@4 V@3 P Q R S T U@4 W@2 T X Y@2 Z@2 AA
  AB AC AD@2 AE T X Y@2 Z@2 AA AB AC AD@2 AF AG AH@2 AI@2 ~
>`.pickRestart({
  A: "[f3,c4,d4,f4,bb4] ~@3", B: "~@3 [f3,c4,d4,f4,bb4]@6 ~@2 [f3,c4,d4,f4,bb4] ~ f3 ~@2",
  C: "[[f3,c4,d4,f4,bb4]@4 ~@11 [f3,c4,d4,f4,bb4]@8 [f3,c4,d4,f4,bb4]@9]/2", D: "[f3,c4,f4,a4,c5] ~@3",
  E: "[a3,c4,g4,a4,c5]@2 ~@9 [f3,c4,f4,a4,c5]@5", F: "[a3,c4,g4,a4,c5] ~@3",
  G: "[~@3 [f3,c4,f4,a4,c5]@5 f3@3 f3@4 [f3,c4,d4,f4,bb4]@5 [f3,c4,d4,f4,bb4]@11 [f3,c4,d4,f4,bb4]@11 ~ [f3,c4,d4,f4,bb4] ~ f3 ~ [bb3,d4,f4,g4,c5]@7 ~ [f3,c4,d4,f4,bb4] ~@5 bb3 ~ [ab3,d4,f4,ab4,bb4], d3@8 [eb4,f4,a4,c5]@7 ~@49]/4", // F Bb Gm7 Bb Bb7 F7
  H: "[~@7 [ab3,d4,f4,ab4,bb4]@8 [g3,bb3,f4,g4,bb4]@12 [g3,bb3,f4,g4,bb4]@5]/2", // Bb7 Gm7
  I: "[~@3 f4@4 ~@4 [eb3,bb3,eb4,g4,c5] ~ g3 ~ bb4@8 bb4@4 bb4@4 [bb3,d4,f4,g4,c5], ~@3 [g3,bb3,g4,bb4]@5 d3@7 ~@8 [f3,c4,d4,f4]@8 ~, ~@7 f4@2 ~@23]/2", // Cm7 Gm7 Gm Dm7
  J: "~@11 [f3,c4,d4,f4,bb4]@5", // Bb
  K: "[~@3 [a3,c4,g4,a4,c5]@12 [g3,bb3,f4,g4,bb4]@6 ~@2 [eb3,bb3,eb4,g4,c5] ~@5 g3 ~@2]/2", // Am7 Gm7 Cm7
  L: "~@7 [f3,c4,d4,f4,bb4]@9", M: "f3@3 [a3,c4,d4,g4] ~@4 f3@3 f3@5, ~@3 f3@5 [c4,f4,a4,c5]@8",
  N: "[~@4 [f3,c4,d4,f4,bb4]@11 [f3,c4,d4,f4,bb4]@11 ~ [f3,c4,d4,f4,bb4] ~ f3 ~ [bb3,d4,f4,g4,c5]@7 ~ [f3,c4,d4,f4,bb4] ~@5 bb3 ~ [ab3,d4,f4,ab4,bb4]]/3", // Bb Gm7 Bb Bb7
  O: "[~@3 [f3,c4,d4,f4,bb4]@12 [f3,c4,d4,f4,bb4]@5 [f3,c4,d4,f4,bb4]@2 ~@7 f3 ~ [bb3,d4,f4,g4,c5], ~@3 d3]/2", // Bb Gm7
  P: "~ [bb3,d4,f4,g4,c5]@3", Q: "[bb3,f4,ab4,bb4,d5]@11 [ab3,d4,f4,ab4,bb4]@5",
  R: "[g3,eb4,g4,c5,eb5]@5 ~@2 [bb3,f4,g4,bb4,eb5] ~@5 g3 ~ [eb3,g3,bb3,c4,f4]", // Cm Eb Cm7
  S: "[eb3,bb3,eb4]@11 [eb3,bb3,eb4,f4,g4,bb4,eb5]@4 [f3,c4,d4,f4,bb4]", T: "~ [f3,c4,d4,f4,bb4]@3",
  U: "[~@3 [f3,c4,d4,f4,bb4]@12 [f3,c4,f4,a4,c5]@5 [f3,a3,c4,d4,g4]@11 [eb3,bb3,eb4,g4,c5]@7 ~ [g3,bb3,f4,g4,bb4] ~@5 eb3 ~@14 d3@4, ~@47 [bb3,d4,f4,g4,c5]@17]/4", // Bb F Dm7 Cm7 Gm7
  V: "[[a3,c4,g4,a4,c5]@5 ~@2 [f3,c4,f4,a4,d5] ~@5 a3 ~ [f3,c4,d4,f4,bb4]@4 [f3,c4,d4,f4,bb4]@12 [f3,c4,d4,f4,bb4]@5 [f3,c4,d4,f4,bb4]@2 ~@7 f3 ~ [bb3,d4,f4,g4,c5], ~@5 d3]/3", // Am7 Dm7 Bb Gm7
  W: "[[a3,c4,g4,a4,c5]@5 ~@2 [f3,c4,f4,a4,d5] ~@5 a3 ~ [f3,c4,d4,f4,bb4]@12 [f3,c4,d4,f4,bb4]@4 [bb3,d4,f4,g4,c5]]/2", // Am7 Dm7 Bb Gm7
  X: "[bb3,d4,f4,g4,c5]@7 [bb3,d4,f4,g4,c5]@8 [bb3,f4,ab4,bb4,d5]", // Gm7 Bb7
  Y: "[~@11 [bb3,f4,ab4,bb4,d5]@4 [eb3,bb3,eb4,g4,bb4]@12 [bb3,f4,g4,bb4,eb5]@5]/2", // Bb7 Eb
  Z: "[[eb3,g3,bb3,c4,f4]@5 ~@2 [eb3,bb3,eb4,f4,g4,bb4] ~@5 eb3 ~ [f3,c4,d4,f4] ~@3 bb4@8 bb4@5, ~@8 d3@7 bb4@4 [f3,c4,d4,f4]@13]/2", // Cm7 Eb Dm7
  AA: "~@3 [f3,c4,d4,f4,bb4]@5 [f3,c4,d4,f4,bb4]@2 ~@3 f3 ~@2", AB: "~ [f3,c4,f4,a4,c5]@3",
  AC: "~@3 [eb3,bb3,eb4,g4,c5]@4 [g3,bb3,f4,g4,bb4]@8 [f3,c4,d4,f4,bb4]", // Cm7 Gm7 Bb
  AD: "[~@11 [bb3,d4,f4,g4,c5]@4 f3 f3@4 f3@7 f3@4 [f3,c4,d4,f4,bb4], ~@15 [c4,f4,a4,c5]@5 [a3,c4,d4,g4]@11 ~]/2", // Gm7 Bb F Am7
  AE: "~@11 [f3,c4,d4,f4,bb4]@4 [bb3,d4,f4,g4,c5]", AF: "[f3,c4,d4,f4,bb4]@8 [f3,d4,f4,ab4,b4]@2 ~@3 f3 ~@2",
  AG: "[eb3,bb3,eb4,g4,bb4]@2 ~@3 eb3 ~@2 [e3,db4,e4,g4,bb4]@2 ~@3 e3 ~@2", // Eb Edim
  AH: "[[f3,c4,d4,f4,a4,c5]@4 ~@7 [bb3,d4,f4,g4]@4 ~ [f3,c4,f4,a4,c5]@4 ~@7 [ab3,bb3,d4,f4,g4,ab4,c5]@5, ~@15 bb4@13 ~@4]/2", // Dm7 Gm7 F Gm7
  AI: "[f3,c4,d4,f4,bb4,db5]/2", // Bb
})).s("gm_epiano1").gain(0.29)

// bass · acoustic bass · "Contrabas, Bass"
const bass = note(`<
  ~@2 A B A C D E D F G H C B I J H C K L H M G H C B I J H C K L H M B C H@2 N L G C K J H M B C H@2 N L G C K J H M
  H@2 C B N J B C M I G K H@2 C B N J B C M I G K O@2 P Q R@2 ~
>`.pickRestart({
  A: "bb1 ~@3", B: "bb1@4 ~@3 f2@5 d3@4", C: "bb1@4 ~@3 d2@5 f2@4", D: "f2 ~@3", E: "f1@4 ~@3 a1@5 c2@4",
  F: "f2@4 ~@3 f2 f2@4 ~@3 f2", G: "bb1@4 ~@3 f1@5 g1@4", H: "bb1@4 ~@3 bb1@5 f1@4", I: "eb2@4 ~@3 eb2@5 bb1@4",
  J: "eb2@4 ~@3 bb1@5 c2@4", K: "f2@4 ~@3 f2@5 c2@4", L: "eb2@4 ~@3 bb2@5 g3@4", M: "f2@4 ~@3 c2@5 d2@4",
  N: "eb2@4 ~@3 g2@5 bb2@4", O: "[bb1@4 ~@3 bb1 ab1@4 ~@3 ab1 g1@4 ~@3 g1 gb2@4 ~@3 gb2, f2]/2", P: "f2",
  Q: "f2@2 ~@6 bb1@4 ~@3 bb1", R: "bb1/2",
})).s("gm_acoustic_bass").gain(0.41)

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

// drums · rim
const rim = s("rim").struct("<[~ x!3]!2 ~@87>").gain(0.5)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@35 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@30 B ~@2>".pickRestart({
  A: "~@5 x ~@2", B: "x",
})).gain(0.1)

// drums · pedal hat
const pedal_hat = s("hh").struct("<~@2 [~ x ~ x]!84 ~@3>").gain(0.3)

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

stack(trombone, epiano1, bass, kick, rim, snare, snare_soft, pedal_hat, crash)

More by Bill Haley