Strudelify

Shake, Rattle And Roll

Haley

KeyF majorTempo206 bpm
0:00/0:00
// Shake, Rattle And Roll — Haley
// 206 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 137 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(206/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.

// bass · acoustic bass · "ACOU BASS"
const bass = note(`<
  ~@3 A B C D C E F G H@2 A I A E J A@2 K L J H@2 A I A E J A@2 K L J A I A I A E J A@2 K L J H@2 A I A E J A@2 K L J A
  I A I A E J A@2 K L J A I A I A E J A@2 K L J A I A I A E J A@2 K L J A I A I A E J A@2 K L J A I A I A E J A@2 K L J
  A I A I A E J A@2 K M N O P Q R@3
>`.pickRestart({
  A: "f2 e2 d2 c2", B: "f2@4 c2@4 d2@4 e2@2 e2 ~", C: "f2 d2 eb2 e2", D: "f2 e2 c2!2", E: "f2 e2 c2 d2",
  F: "bb1@4 d2@3 ~ eb2@4 e2@4", G: "f2 eb2 d2 c2", H: "f2@3 a2@3 c3@2", I: "f2 c2 d2 e2", J: "bb1 d2 eb2 e2",
  K: "f2@4 e2@4 d2@4 c2@2 g1 ~", L: "c2@3 ~ c2@4 g1@4 c2@4", M: "g1 a1 bb1 b1", N: "c2 d2 eb2 e2", O: "f2!2 eb2!2",
  P: "d2!2 db2!2", Q: "c2 ~ c2 ~", R: "[c2@2 d2@2 e2@2 f2@5 ~ f1@26 ~@10]/3",
})).s("gm_acoustic_bass").gain(0.36)

// other · electric guitar jazz · "JAZZ GTR"
const electric_guitar_jazz = note(`<
  ~@3 A@2 ~@2 A@2 ~@2 A@2 ~ B ~ B ~ B ~ B ~@2 A@2 ~@2 C@2 ~@2 C@2 ~@2 D E ~ B ~ B ~ B ~ B ~@2 A@2 F@8 G@2 H@2 A@4 I@2
  A@2 J I A K L@3 M N O P@2 Q R S T U V@4 W X Y Z AA AB AC ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 C@2 ~@2 C@2 ~@2 D E ~ B ~ B ~ B ~
  B ~@2 AD AE AF AG@3
>`.pickRestart({
  A: "f2@2 ~@4 a2@5 ~ c3@2 ~@2", B: "~@2 f3 ~@3 f3 ~ f3@2 f3 ~ f3@2 ~@2", C: "~@4 a2@2 bb2 ~ a2@4 f2@3 ~",
  D: "~@4 a2@2 bb2 ~ a2@4 bb2@4", E: "c3@4 bb2@4 a2@4 f2@3 ~",
  F: "[f4@2 ~@6 f4 ~ f4 ~ f4 ~ f4@5 e4 eb4 d4 db4 c4 ~@2 c4 ~ d4@2 ~@2]/2",
  G: "[g4@2 ~@6 g4 ~ g4 ~ g4 ~ g4@5 gb4 f4 e4 eb4 d4 ~@2 c4 ~ d4@2 ~@2]/2",
  H: "[f4@2 ~@6 f4 ~ f4 ~ f4 ~ f4@5 e4 eb4 d4 db4 c4 ~@8]/2", I: "bb2@2 ~@4 d3@5 ~ f3@2 ~@2",
  J: "c3@2 ~@4 e3@5 ~ g3@2 ~@2", K: "f2@2 ~@4 [d4,ab4]@4 [d4,ab4] ~ [d4,ab4]@2 [d4,ab4] ~",
  L: "[[d4,ab4]@3 ~@3 [d4,ab4]@3 ~ d4 ~@3 [d4,ab4]@4 d4 ~@3 [d4,ab4]@5 ~@3 ab4@5 ~ f4@2 eb4 ~ f4@2 ab4 ~ f4@2 eb4 ~]/3", // Ddim
  M: "c4@2 b3 ~ bb3@2 ab3 ~ c4@3 c4@2 c4@2 ~", N: "c4@4 bb3@2 ab3 ~ f3@2 ab3 ~ bb3@2 c4 ~",
  O: "~@2 bb3@4 ab3 ~ bb3@2 ab3 ~ f3@2 eb3 ~",
  P: "[f3@3 ~ f3@3 ~ ab3@2 bb3@2 ~@2 b3@4 c4@3 ~@2 a3 bb3@2 ab3 ~ f3@2 eb3 bb3]/2",
  Q: "b3@2 c4@2 ~@4 [b3,c4]@2 ~@2 c4@2 ~ b3", R: "c4@2 ~@2 c4@2 c4@5 ~ ab3@2 f3 ~",
  S: "f3@3 ~ f3@2 f3 ~ f3@3 ~ f3@2 f3 ~", T: "f3@2 eb3 ~ c3@2 c3@5 ~@5", U: "~@4 c5@2 bb4 ~ a4@2 g4 ~ f4@2 ~@2",
  V: "[f4@6 f4@2 ~@6 ab4@5 ~ f4@2 d4 ~ f4@2 ab4@2 f4@2 ab4@5 ~ f4@2 d4 ~ c4@2 c4@3 ~ c4@9 ~@3 f3 ~ ab3@2 bb3 ~]/4",
  W: "b3@2 c4@2 c4@2 c4@2 c4@2 bb3 ~ ab3@2 f3 ~", X: "f3@4 f3@2 f3 ~ f3@4 f3@2 f3 ~",
  Y: "f3@2 ab3 ~ bb3@2 bb3@4 ab3 ~ f3@2 ab3 ~", Z: "bb3@3 ~ c4@2 ~@2 bb3@3 ~ c4@2 ~@2",
  AA: "bb3@3 ~ c4@3 ~ bb3@2 ab3 ~ f3@2 eb3 ~", AB: "f3@3 ~ f3@2 eb3 ~ f3@3 ~ f3@2 eb3 ~",
  AC: "f3@2 eb3 ~ c3@2 c3@4 ~@6", AD: "~@2 f4@3 ~ f4 ~ eb4@2 ~@2 eb4@3 ~", AE: "d4@3 ~ d4@2 ~@2 db4@2 db4 ~ db4@2 c4@2",
  AF: "~@2 ab4 ~ g4@2 f4 ~ eb4@2 d4 ~ c4@2 f3@2", AG: "[c4@2 d4@2 e4@2 f4@3 ~@3 [f3,c4,f4,a4]@22 ~@14]/3",
})).s("gm_electric_guitar_jazz").gain(0.63).pan(0.4)

// other · tenor sax
const tenor_sax = note(`<
  ~@3 A@2 ~@2 A@2 ~@2 A@2 ~ B ~ B ~ B ~ B ~@2 A@2 ~@2 C@2 ~@2 C@2 ~@2 D E ~ B ~ B ~ B ~ B ~@2 A@2 F@8 G@2 H@2 I J@2 K
  L@2 M N O P Q R ~@26 A@2 ~@2 A@2 ~@2 A@2 ~@2 C@2 ~@2 C@2 ~@2 D E ~ B ~ B ~ B ~ B ~@2 S T ~ U@2 ~
>`.pickRestart({
  A: "f3@2 ~@4 a3@5 ~ c4@2 ~@2", B: "~@2 f3 ~@3 f3 ~ f3@2 f3 ~ f3@2 ~@2", C: "~@4 c4@2 d4 ~ c4@4 a3@3 ~",
  D: "~@4 c4@2 d4 ~ c4@4 d4@4", E: "eb4@4 d4@4 c4@4 a3@3 ~",
  F: "[f4@2 ~@6 f4 ~ f4 ~ f4 ~ f4@5 e4 eb4 ~@5 c4 ~ d4@2 ~@2]/2",
  G: "[g4@2 ~@6 g4 ~ g4 ~ g4 ~ g4@5 gb4 f4 ~@5 c4 ~ d4@2 ~@2]/2",
  H: "[f4@2 ~@6 f4 ~ f4 ~ f4 ~ f4@5 ~ f4@4 f4@4 f4@4]/2", I: "f4@4 f4@4 f4@4 f4@3 ~",
  J: "[~@2 d4@3 ~ f4@3 ~ ab4@2 ~@2 f4@4 ab4@4 ~@10]/2", K: "d4@4 f4@2 g4 ~ ab4@4 g4@2 gb4 ~",
  L: "[f4@2 eb4 ~ d4@3 ~ d4@4 bb3@2 ab3@4 ~@8 f3 ~ f3@2 ab3 ~]/2", M: "bb3@4 c4@2 f4 ~ c4@4 bb3@2 ab3 ~",
  N: "f3@2 c3 ~ eb3@4 ~@6 c4 ~", O: "e4@2 e4 ~ f4@2 f4 ~ g4@2 [e4,f4] ~ bb3@3 ~",
  P: "f4@4 e4 [bb3,c4,d4] f3 ~ ab3@2 f3 ~ g3@2 f3 ~", Q: "~@6 a3@4 c4 ~ d4@2 c4 ~", R: "eb4@2 ~@2 d4@2 c4@3 ~@7",
  S: "~@2 f3@2 ~@2 f3 ~ a3@2 ~@2 a3@2 ~@2", T: "bb3@2 f3 ~ bb3@2 ~@2 b3@2 b3 ~ b3@2 c4@2",
  U: "[c4@2 d4 ~ e4@2 f4@3 ~@3 f3@19 ~]/2",
})).s("gm_tenor_sax").gain(0.46).pan(0.3)

// other · tenor sax · soft notes
const tenor_sax_soft = note("<~@50 A ~ A ~ A ~ A ~ B ~@10 C D ~ E ~@64>".pickRestart({
  A: "~@5 d4 db4 c4 ~@8", B: "~@5 e4 eb4 d4 ~@8", C: "~@11 [c4,d4] ~@4", D: "~@6 [g3,a3] ~@9", E: "~@2 c4 ~@13",
})).s("gm_tenor_sax").gain(0.21).pan(0.3)

// chords · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note(`<
  ~@3 A@6 B@2 A@6 B@2 A@2 C B A@6 B@2 A@2 C B A@6 B@2 A@2 C B A@6 B@2 A@2 C B A@6 B@2 A@2 C B A@6 B@2 A@2 C B A@6 B@2
  A@2 C B A@6 B@2 A@2 C B A@6 B@2 A@2 C B A@6 B@2 A@2 C B A D E F@3
>`.pickRestart({
  A: "~ [c3,f3,a3] ~ [c3,f3,a3]", B: "~ [bb2,f3,bb3] ~ [bb2,f3,bb3]", C: "~ [c3,e3,g3] ~ [c3,e3,g3]",
  D: "~ [bb2,f3,bb3] ~ [b2,gb3,b3]", E: "[c3,e3,g3,c4]@15 ~",
  F: "[[c3,e3,g3,c4]@6 [f3,a3,c4,f4]@5 ~ [f2,c3,f3,a3,f4]@29 ~@7]/3", // C F
})).s("gm_acoustic_guitar_steel").gain(0.19).pan(0.8)

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

// drums · clap
const clap = s("cp").struct("<~@13 [~ x ~ x]!12 ~@12 [~ x ~ x]!60 ~@24 [~ x ~ x]!12 ~@4>").gain(0.46)

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

// drums · pedal hat
const pedal_hat = s("hh").struct("<~@3 A@21 B A@11 B A@11 B A@23 B A@60 ~@4>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2",
})).gain(0.59)

// drums · mid tom
const mid_tom = s("mt").struct("<~@134 [~@3 x ~@4] [~@2 x ~ x ~@2 x ~@2 x ~@5] ~>").gain(0.46)

// drums · open hat
const open_hat = s("oh").struct("<~@24 A ~@11 A ~@11 A ~@23 A ~@63 B>".pickRestart({
  A: "~@3 x", B: "~@3 x ~@12",
})).gain(0.46)

// drums · high tom
const high_tom = s("ht").struct("<~@134 [~ x!2 ~@5] ~@2>").gain(0.46)

// drums · crash
const crash = s("cr").struct("<~@49 A ~@11 A ~@11 A ~@10 B A ~@34 C ~@12 D E F G>".pickRestart({
  A: "x", B: "~ x", C: "~@7 x", D: "x!2", E: "x ~@5 x ~@5 x ~@2 x", F: "x!2 ~ x!2 ~ x ~ x ~ x!4 ~@2", G: "~@3 x ~@4",
})).gain(0.33)

// drums · ride
const ride = s("rd").struct("<~@3 A@21 B A@23 B C A@11 C A@10 D C A@10 E A@35 B C A@11 ~@4>".pickRestart({
  A: "x ~ x!3 ~ x!2", B: "x ~ x!3 ~ x ~", C: "~@2 x!3 ~ x!2", D: "x ~ x!3 ~@3", E: "x ~ x!2 ~@4",
})).gain(0.39)

stack(
  bass, electric_guitar_jazz, tenor_sax, tenor_sax_soft, acoustic_guitar_steel, kick, clap, snare, pedal_hat, mid_tom,
  open_hat, high_tom, crash, ride
)

More by Haley