Strudelify

Shake Rattle & Roll

Buddy Holly

KeyE♭ majorTempo210 bpm
0:00/0:00
// Shake Rattle & Roll — Holly Buddy
// 210 bpm, 4/4, key D# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 135 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(210/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 · "MUTED GTR"
const electric_guitar_muted = note(`<
  ~@3 A B C D E@6 F G A B C D E@6 F G A B C D E@6 F G A B C D E@6 F G A B C D E@6 F G A B C D H@6 F G A B C D E@6 F G A
  B C D E@6 F G A B C D E@6 F G A B C D H@6 F G A B C D I J K L ~@4
>`.pickRestart({
  A: "[eb2,bb2] ~ [eb2,bb2] ~ [eb2,bb2]@2 ~@2", B: "[eb2,bb2]@3 ~@4 [eb2,bb2]@3 ~ [eb2,bb2] [eb2,bb2]@2 ~@2",
  C: "[ab2,eb3] ~ [ab2,eb3] ~ [ab2,eb3]@2 ~@2", D: "[ab2,eb3]@4 ~@2 [ab2,eb3]@3 ~ [ab2,eb3] ~ [ab2,eb3]@3 ~",
  E: "[[eb2,bb2] ~@3 [eb2,bb2] ~@3 [eb2,bb2]@4 ~@4 [eb2,bb2]@4 ~@3 [eb2,bb2]@3 [eb2,bb2] ~ [eb2,bb2]@2 ~@2 [bb2,f3] ~@3 [bb2,f3]@2 ~@2 [bb2,f3]@5 ~@3 [ab2,eb3]@3 ~@3 [ab2,eb3]@3 ~@2 [ab2,eb3] [ab2,eb3]@2 ~@2 [eb2,bb2] ~@3 [eb2,bb2] ~@2 [eb2,bb2]@3 ~@6 [eb2,bb2]@2 ~@5 [bb2,f3]@3 [bb2,f3] ~ [bb2,f3]@2 ~@2, ~@8 b7@85 ~@3]/6", // Eb5 Bb5 Ab5 Eb5 Bb5
  F: "[eb2,bb2] ~@3 [eb2,bb2] ~@2 [eb2,bb2]@3 ~@6", G: "[eb2,bb2]@2 ~@5 [eb2,bb2]@3 [eb2,bb2] ~ [eb2,bb2]@2 ~@2",
  H: "[[eb2,bb2] ~@3 [eb2,bb2] ~@3 [eb2,bb2]@4 ~@4 [eb2,bb2]@4 ~@3 [eb2,bb2]@3 [eb2,bb2] ~ [eb2,bb2]@2 ~@2 [bb2,f3] ~@3 [bb2,f3]@2 ~@2 [bb2,f3]@5 ~@3 [ab2,eb3]@3 ~@3 [ab2,eb3]@3 ~@2 [ab2,eb3] [ab2,eb3]@2 ~@2 [eb2,bb2] ~@3 [eb2,bb2] ~@2 [eb2,bb2]@3 ~@6 [eb2,bb2]@2 ~@5 [eb2,bb2]@3 [eb2,bb2] ~ [eb2,bb2]@2 ~@2, ~@8 b7@85 ~@3]/6", // Eb5 Bb5 Ab5 Eb5
  I: "[eb2,bb2] ~@3 [eb2,bb2] ~@3 [eb2,bb2]@4 ~@4", J: "[eb2,bb2]@4 ~@3 [eb2,bb2]@3 [eb2,bb2] ~ [eb2,bb2]@2 ~@2",
  K: "[bb2,f3] ~@3 [bb2,f3]@2 ~@2 [bb2,f3]@5 ~@3", L: "[ab2,eb3]@3 ~@3 [ab2,eb3]@3 ~@2 [ab2,eb3] [ab2,eb3]@2 ~@2",
})).s("gm_electric_guitar_muted").gain(0.44).pan(0.4)

// bass · acoustic bass · "ACOU BASS"
const bass = note(`<
  A ~@2 B@2 C D B E F D B G B@3 H C D B E F D B G I J K L M N O L P Q R S B@4 M T O U V C W X Y Z@3 AA AB AC AD AE AF AC
  G B@4 M T O U V C W R I J K L M N O L P Q R S B@4 M T O U V C W@2 AG AH@3 AA AB AC AD AE AF AC G B@4 M T O U V C W R I
  J K L M N O L P D AI AJ@2 ~
>`.pickRestart({
  A: "eb2@3 ~@13", B: "eb2@3 ~ g2@3 ~ bb2@3 ~ g2@3 ~", C: "ab1@3 ~ c2@4 eb2@3 ~ c2@3 ~",
  D: "ab1@3 ~ c2@3 ~ eb2@3 ~ c2@3 ~", E: "eb2@3 ~ g2@4 bb2@3 ~ g2@3 ~", F: "bb1@3 ~ d2@4 f2@3 ~ d2@3 ~",
  G: "eb2@3 ~ g2@3 ~ bb2@3 ~ bb1@4", H: "eb2@3 ~ g2@3 ~ bb2@3 ~ g2@2 ~@2", I: "eb2@3 ~ g2@4 bb2@3 ~ c3@3 ~",
  J: "eb3@3 ~ c3@3 ~ bb2@4 g2@3 ~", K: "eb2@3 ~ g2@3 ~ bb2@3 ~ c3@3 ~", L: "eb3@3 ~ c3@3 ~ bb2@3 ~ g2@4",
  M: "ab1@3 ~ c2@3 ~ eb2@3 ~ f2@3 ~", N: "ab2@3 ~ f2@3 ~ eb2@3 ~ c2@3 ~", O: "eb2@4 g2@3 ~ bb2@3 ~ c3@3 ~",
  P: "bb1@3 ~ d2@3 ~ f2@3 ~ d2@4", Q: "ab1@3 ~ c2@4 eb2@4 c2@3 ~", R: "eb2@4 g2@3 ~ bb2@3 ~ g2@3 ~",
  S: "bb2@3 ~ ab2@3 ~ g2@3 ~ f2@4", T: "ab2@3 ~ gb2@4 f2@3 ~ e2@3 ~", U: "eb3@3 ~ c3@3 ~ bb2@3 ~ g2@3 ~",
  V: "bb1@4 d2@3 ~ f2@3 ~ d2@3 ~", W: "eb2@3 ~ g2@3 ~ bb2@3 ~ g2@4", X: "eb2@4 g2@3 ~ bb2@3 ~ g2@4",
  Y: "eb2@3 ~ g2@3 ~ bb2@3 ~ bb2@4", Z: "eb2@4 g2@3 ~ bb2@3 ~ bb2@3 ~", AA: "ab1@4 c2@4 eb2@3 ~ eb2@4",
  AB: "ab1@3 ~ c2@3 ~ eb2@4 c2@3 ~", AC: "eb2@4 g2@4 bb2@3 ~ bb2@4", AD: "eb2@3 ~ g2@4 bb2@3 ~ bb2@3 ~",
  AE: "bb1@3 ~ d2@3 ~ f2@3 ~ f2@4", AF: "ab1@4 c2@4 eb2@3 ~ c2@4", AG: "eb2@2 ~@2 g2@3 ~ bb2@3 ~ bb2@4",
  AH: "eb2@3 ~ g2@3 ~ bb2@3 ~ bb2@3 ~", AI: "eb1@3 ~ g1@3 ~ ab1@3 ~ a1@3 ~",
  AJ: "[bb1@2 ~ c2 d2@2 ~ eb2@3 ~@2 eb1@20]/2",
})).s("gm_acoustic_bass").gain(0.49)

// chords · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note(`<
  A ~@2 B C D E B C F G H I J K L M D E L M F G H I B C B C D E B C F G H I N O N P Q R S T F G H@2 B C B C D E B C F G
  H I J K L M D E L M F G H I B C B C D E B C F G H I N O N P Q R S T F G H@2 B C B C D E B C F G H I J K L M D E L M F
  G H I B C B C D E B C F G U V@3
>`.pickRestart({
  A: "[g3,db4,eb4] ~@3", B: "[g3,bb3,eb4]@2 eb3 ~ [ab3,c4,eb4]@2 eb3 ~ [g3,bb3,eb4]@2 eb3 ~ [ab3,c4,eb4]@2 ~ eb3",
  C: "[g3,bb3,eb4]@2 ~ eb3 [ab3,c4,eb4]@3 eb3 [g3,bb3,eb4]@2 eb3 ~ [ab3,c4,eb4]@2 eb3 ~", // Eb Ab Eb Ab
  D: "[eb3,ab3,c4]@2 eb3 ~ [eb3,ab3,c4]@2 ~ eb3 [eb3,ab3,c4]@2 ~ eb3 [eb3,ab3,c4]@2 ~ eb3", // Ab
  E: "~ c4@2 eb3 [eb3,ab3,c4]@2 ~ eb3 [eb3,ab3,c4]@2 ~ eb3 [eb3,ab3,c4]@2 ~ eb3, [eb3,ab3] ~@7", // Ab Ab5
  F: "[f3,bb3,d4]@2 ~ f3 [f3,bb3,d4]@2 ~ f3 [f3,bb3,d4] ~@2 f3 [f3,bb3,d4]@2 ~@2", // Bb
  G: "[ab3,c4]@3 eb3 [ab3,c4]@2 ~ eb3 [ab3,c4]@2 ~ eb3 [ab3,c4]@2 ~ eb3, eb3 ~@15", // Ab
  H: "[g3,bb3,eb4]@3 eb3 [ab3,c4,eb4]@3 eb3 [g3,bb3,eb4]@2 ~ eb3 [ab3,c4,eb4]@2 ~ eb3", // Eb Ab Eb Ab
  I: "[g3,bb3,eb4]@2 eb3 ~ eb3 ~@2 [ab3,bb3,d4,f4]@6 ~@3", // Eb Bb7
  J: "[eb3,g3,bb3]@2 ~ eb3 [eb3,ab3,c4]@2 ~ eb3 [eb3,g3,bb3]@2 ~ eb3 [eb3,ab3,c4]@2 ~ eb3", // Eb Ab Eb Ab
  K: "[eb3,g3,bb3]@2 ~ eb3 [eb3,ab3,c4]@2 ~ eb3 [eb3,g3,bb3]@2 ~ eb3 [eb3,ab3,c4]@2 ~@2", // Eb Ab Eb Ab
  L: "~@3 [g3,bb3,eb4] [ab3,c4,eb4]@3 ~ [g3,bb3,eb4]@3 ~ [ab3,c4,eb4]@4", // Eb Ab Eb Ab
  M: "~@3 [g3,bb3] [ab3,c4,eb4]@3 ~ [g3,bb3,eb4]@3 ~ [ab3,c4,eb4]@2 ~@2", // Gm Ab Eb Ab
  N: "[bb3,eb4,g4] ~ [bb3,eb4,g4] ~ [ab3,db4,f4]@2 ~ [bb3,eb4,g4]", // Eb Db Eb
  O: "~@2 [bb3,eb4,g4]@2 ~@2 [bb3,eb4,g4] ~ [ab3,db4,f4]@4 ~@4", // Eb Db
  P: "~@2 [bb3,eb4,g4]@2 ~@2 [bb3,eb4,g4] ~ [bb3,eb4,g4]@5 ~@3", Q: "~@4 [ab3,c4,gb4]@5 ~ [ab3,c4,gb4]@4 ~ ab3",
  R: "[ab3,c4,gb4] ~ [ab3,c4,gb4] ~ ab3 ~@2 [c4,gb4]@2 ~ ab3 ~ [ab3,c4,gb4]@2 ~@2, ~@6 ab3@3 ~@7", // Ab7 Cdim Ab7
  S: "~@4 g4@5 ~ eb4@5 ~, ~@4 bb3@11 ~", T: "[bb3,db4]@3 [bb3,eb4]@4 ~", U: "~@4 g3@3 ~ ab3@3 ~ a3@3 ~",
  V: "[bb3@2 ~ c4 d4@2 ~ eb4@3 ~@3 [bb3,db4]@27 ~@8, ~@3 [eb3,g3]@7 ~@2]/3", // Bbm Eb
})).s("gm_acoustic_guitar_steel").gain(0.38).pan(0.6)

// chords · electric guitar jazz · "JAZZ GTR"
const electric_guitar_jazz = note("<~@37 A B C@2 D@2 E@2 F@2 G H ~@36 A B C@2 D@2 E@2 F@2 G H ~@38>".pickRestart({
  A: "[bb4,eb5,g5]@2 ~@2 [bb4,eb5,g5]@2 ~@2 [bb4,db5,g5]@5 ~ [bb4,eb5,g5]@2", // Eb Gdim Eb
  B: "~@2 [bb4,eb5,g5]@2 ~@2 [bb4,eb5,g5] ~ [bb4,db5,g5] ~ [bb4,db5,g5] ~ [bb4,db5,g5]@2 ~@2", // Eb Gdim
  C: "[[bb4,eb5,g5]@2 ~@2 [bb4,eb5,g5]@2 ~@2 [bb4,db5,g5]@5 ~@2 [bb4,eb5,g5]@2 ~ [bb4,eb5,g5]@2 ~@2 [bb4,eb5,g5] ~ [bb4,eb5,g5]@2 [bb4,eb5,g5] ~ [bb4,eb5,g5] ~ eb5 [bb4,gb5]]/2", // Eb Gdim Eb Ebm
  D: "[[bb4,c5,eb5,gb5]@2 ~@2 [bb4,c5,eb5,gb5] ~@3 [bb4,c5,eb5,gb5]@5 ~@2 [bb4,c5,eb5,gb5]@2 ~@2 [bb4,c5,eb5,gb5]@2 ~@2 [bb4,c5,eb5,gb5] [c5,gb5] [bb4,eb5] ~ [bb4,c5,eb5,gb5] c5 [bb4,eb5,gb5] ~@2]/2", // Cm7b5 Cdim Eb5 Cm7b5 Ebm
  E: "[[bb4,eb5,g5] ~@3 [bb4,eb5,g5] ~@3 [bb4,eb5,g5]@4 ~@3 [bb4,eb5,g5]@2 ~@2 [bb4,eb5,g5] ~@3 [bb4,eb5,g5]!2 ~@2 [bb4,eb5,g5]!2 ~ [c5,d5,f5,ab5] ~]/2", // Eb Dm7b5
  F: "[[c5,d5,f5,ab5]@2 ~@2 [c5,d5,f5,ab5]@2 ~@2 [c5,d5,f5,ab5]@5 ~@2 [bb4,c5,gb5]@2 ~@2 [bb4,c5,eb5,gb5]@2 ~@2 [bb4,c5,eb5,gb5]!2 ~@2 [bb4,c5,eb5,gb5]!2 ~@3, ~@7 eb5 ~@8]/2", // Dm7b5 Cm7b5
  G: "~@3 [a4,d5,gb5] [bb4,eb5,g5]@2 ~@2 [a4,d5,gb5] ~@2 [bb4,eb5,g5]@2 ~ a4 [d5,gb5]", // D Eb D Eb D
  H: "[bb4,eb5,g5]@2 [bb4,eb5,g5]@2 [a4,d5,gb5] ~ [bb4,eb5,g5]@2 ~@2 [a4,d5,gb5] ~ [bb4,eb5,g5]@2 ~@2", // Eb D Eb D Eb
})).s("gm_electric_guitar_jazz").gain(0.32)

// drums · kick
const kick = s("bd").struct("<~@131 [x ~@2 x] [~@3 x] ~@2>").gain(0.38)

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

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

// drums · open hat
const open_hat = s("oh").struct("<~@132 [~@3 x] [~ x ~@6] ~>").gain(0.49)

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

// drums · ride
const ride = s("rd").struct("<~@3 A@9 B A@17 C A C A@6 D A@3 D A@34 C A C A@6 D A@38 C E C A F ~@4>".pickRestart({
  A: "x ~@3 x ~@2 x!2 ~@3 x ~ x ~", B: "x", C: "x ~@6 x!2 ~@3 x ~ x ~", D: "~@4 x ~@2 x!2 ~@3 x ~ x ~",
  E: "x ~@3 x ~@2 x!2 ~@5 x ~", F: "x ~@3 x ~@2 x!2 ~@3 x ~@2 x",
})).gain(0.38)

stack(
  electric_guitar_muted, bass, acoustic_guitar_steel, electric_guitar_jazz, kick, snare, hihat, open_hat, crash, ride
)

More by Buddy Holly