Strudelify

Roll Away the Stone

Mott The Hoople

KeyD♭ majorTempo120 bpm
0:00/0:00
// Roll Away the Stone — Mott The Hoople
// 120 bpm, 4/4, key Db major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 90 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/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 · piano
const piano = note(`<
  ~ A B C D A B C E F@4 G@3 F@4 H@3 I@3 J K@3 B C D A B C E F@4 G@3 F@4 L@3 I@3 J K@3 B C D M@2 N@2 M@2 O P O Q I@3 J
  R@4 S@2 T@2 S@2 A B C D U
>`.pickRestart({
  A: "[db4,f4,bb4]@4 [f4,bb4] [f4,bb4]@2 [bb4,db5], [bb2,bb3]", // Bbm Bb5 Bbm Bb
  B: "[db4,f4,bb4]@4 [f4,bb4] [f4,bb4]@2 [bb4,db5], [ab2,ab3]", // Bbm Bb5 Bbm Ab
  C: "[db4,f4,bb4]@4 [f4,bb4] [f4,bb4]@2 [bb4,db5], [gb2,gb3]", // Bbm Bb5 Bbm Gb
  D: "[bb2,bb3] ~@2 [bb2,bb3] [a2,a3]@2 [f2,f3]@2, [bb4,c5,eb5]!2 [a4,c5,eb5]@2, ~ [bb2,bb3]@2 ~@5", // Bb A F Cm7 Adim Bb
  E: "[bb2,bb3] ~@2 [bb2,bb3] f5 e5 eb5 d5, [bb4,c5,f5]!2 [a4,c5]@2, ~ [bb2,bb3]@2 ~ [a2,a3]@2 [f2,f3]@2", // Bb Bbsus2 Am Bb A F
  F: "[[f4,ab4,db5]@2 [f4,ab4,db5]@2 [f4,ab4,db5]@2 [f4,ab4,db5] [ab4,c5,eb5]@2 ~ [ab4,c5,eb5]@2 [ab4,c5,eb5]@2 [ab4,c5,eb5] [a4,c5,f5]@2 ~ [f4,a4,c5]@2 [f4,a4,c5]@2 [f4,a4,c5] [f4,bb4,db5]@2 ~ [f4,bb4,db5]@2 [f4,bb4,db5]@2 [f4,bb4,db5]@2]/4", // Db Ab F Bbm
  G: "[[gb4,bb4,db5]@2 [gb4,bb4,db5]@2 [gb4,bb4,db5]@2 [gb4,bb4,db5] [f4,ab4,db5]@2 ~ [f4,ab4,db5]@2 [f4,ab4,db5]@2 [f4,ab4,db5] [ab4,c5,eb5]@2 [c4,eb4,ab4]!4 [bb3,db4,gb4]@3]/3", // Gb Db Ab Gb
  H: "[[gb4,bb4,db5]@2 [gb4,bb4,db5]@2 [gb4,bb4,db5]@2 [gb4,bb4,db5] [f4,ab4,db5]@2 ~ [f4,ab4,db5]@2 [f4,ab4,db5]@2 [f4,ab4,db5] [ab4,c5,eb5]@2 [c4,eb4,ab4]!3 [bb3,db4,gb4]@2 [bb3,db4,gb4]@2]/3", // Gb Db Ab Gb
  I: "[[f4,ab4,db5]@2 [f4,ab4,db5] [eb4,ab4,c5]@3 [f4,ab4,c5] [f4,bb4]@5 [f4,ab4,db5] [f4,ab4,db5]@2 ab4@5 [eb4,ab4,c5]@4, ~@7 db5@3 ~@5 [f4,db5]@6 ~@3]/3", // Db Ab Fm Bb5 Db Ab Db
  J: "[db4,f4,bb4]@2 [f4,ab4,db5]!2", // Bbm Db
  K: "[[f4,ab4,db5]@2 [f4,ab4,db5] [eb4,ab4,c5]@3 [f4,ab4,c5] [f4,bb4]@5 [f4,ab4,db5] [f4,ab4,db5]@2 [f4,bb4]@5 [f4,bb4] [f4,bb4]@2 [bb4,db5], ~@7 db5@3 ~@5 db5@6 ~@3]/3", // Db Ab Fm Bb5 Db Bb5 Bbm
  L: "[[gb4,bb4,db5]@2 [gb4,bb4,db5]@2 [gb4,bb4,db5]@2 [gb4,bb4,db5] [f4,ab4,db5]@2 ~ [f4,ab4,db5]@2 [f4,ab4,db5]@2 [f4,ab4,db5] [ab4,c5,eb5]@2 [c4,eb4,ab4]!3 [bb3,db4,gb4] ~ [bb3,db4,gb4]@2]/3", // Gb Db Ab Gb
  M: "[e4,ab4,b4,d5]!8", N: "[e4,a4,db5]!8", O: "[eb4,ab4,db5]!8", P: "[eb4,ab4,c5]!8",
  Q: "[eb4,ab4,c5]!4 [eb4,ab4,c5,eb5]@2 [eb4,ab4,c5,eb5]@2", // Ab
  R: "[[f4,ab4,db5]@2 [f4,ab4,db5] [eb4,ab4,c5]@3 [f4,ab4,c5] [f4,bb4]@5 [f4,ab4,db5] [f4,ab4,db5]@2 [f4,ab4,db5]@3 [f4,ab4,db5]@2 [eb4,ab4,c5]@3 [db4,f4,bb4]@2 [db4,f4,bb4]@2 [db4,f4,bb4] [db4,f4,ab4]@4, ~@7 db5@3 ~@22]/4", // Db Ab Fm Bb5 Db Ab Bbm Db
  S: "[[f4,ab4,db5]@2 [f4,ab4,db5]@2 [eb4,ab4,c5]@3 [db4,f4,bb4]@2 [db4,f4,bb4]@2 [db4,f4,bb4] [db4,f4,ab4]@4]/2", // Db Ab Bbm Db
  T: "[[f4,ab4,db5]@2 [f4,ab4,db5]@2 [eb4,ab4,c5]@3 f4 f4 [db4,f4,bb4]@2 [db4,f4,bb4] [db4,f4,ab4]@4, ~@7 [db4,bb4]@2 ~@7, ~@4 [ab4,db5] ~@3]/2", // Db Ab Bbm Db Gb Db5
  U: "[db2,db3,db4,f4,ab4,db5] ~", // Db
})).s("gm_piano").gain(0.41).pan(0.6)

// bass · electric bass pick · "Bass"
const bass = note(`<
  ~ A B C D A B C E F G H I J F K L M N O J F P Q R Q R Q R A B C D A B C E F G H I J F K L M N O J F P Q R Q R Q R A B
  C D S@2 T U S@2 V@3 W Q R Q R Q R X Y X Y X Y X Y A B C D Z
>`.pickRestart({
  A: "bb2", B: "ab2", C: "gb2", D: "f2 f2@2 f2 f2@2 f2@2", E: "f2@3 f2!2 e2 eb2 d2", F: "db2@2 db2!2", G: "c2!4",
  H: "f1!4", I: "bb1@2 ab1!2", J: "gb1@2 gb1!2", K: "ab1!5 gb1@3", L: "db2!4", M: "c2@2 c2!2", N: "f1@2 f1!2",
  O: "bb1@2 bb1 ab1", P: "ab1!4 gb1@2 gb1@2", Q: "db2!2 c2!2", R: "bb1!2 ab1!2", S: "ab1 e1 gb1 ab1 ~@4",
  T: "a1 e1 gb1 a1 ~@4", U: "a1 e1 gb1 a1 db2 b1 ab1@2", V: "ab1!8", W: "ab1!4 ab1@2 ab1@2", X: "db2!4 c2!4",
  Y: "bb1!4 ab1!4", Z: "db2 ~",
})).s("gm_electric_bass_pick").gain(0.51)

// chords · acoustic guitar steel · "Rhythm Guitar"
const acoustic_guitar_steel = note(`<
  ~ A@3 B A@3 B C D E F G C H C D E I G C J K L K L K L A@3 B A@3 B C D E F G C H C D E I G C J K L K L K L A@3 B ~@29
>`.pickRestart({
  A: "[f3,bb3,db4,f4]", B: "[f3,bb3,c4,f4]@2 [f3,a3,c4,f4]!2", C: "[f3,ab3,db4,f4]!8", D: "[eb3,ab3,c4,eb4]!8",
  E: "[f3,a3,c4,f4]!8", F: "[f3,bb3,db4]!8", G: "[db3,gb3,bb3,db4]!8", H: "[eb3,ab3,c4,eb4]!5 [db3,gb3,bb3,db4]@3",
  I: "[f3,bb3,db4,f4]!8", J: "[eb3,ab3,c4,eb4]!4 [db3,gb3,bb3,db4]@2 [db3,gb3,bb3,db4]@2",
  K: "[f3,ab3,db4,f4]!4 [eb3,ab3,c4,eb4]!4", L: "[f3,bb3,db4,f4]!4 [f3,ab3,db4,f4]!4",
})).s("gm_acoustic_guitar_steel").gain(0.15).pan(0.3)

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

// drums · rim
const rim = s("rim").struct("<[x!4] ~@89>").gain(0.41)

// drums · low tom
const low_tom = s("lt").struct(`<
  [~@14 x!2]
  [~@6 x ~@7 x!2]!3
  [x ~ x ~@3 x ~ x ~@5 x!2]
  [~@6 x ~@7 x!2]!3
  [x ~ x ~@3 x ~ x ~@5 x!2]
  ~@81
>`).gain(0.41)

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

// drums · crash
const crash = s("cr").struct("<~ x!8 ~@81>").gain(0.41)

stack(piano, bass, acoustic_guitar_steel, kick, rim, low_tom, mid_tom, crash)

More by Mott The Hoople