Strudelify
KeyA minorTempo120 bpm
0:00/0:00
// Rock Hard Ride Free — Robert John Arthur HalfordGlenn Raymond TiptonKenneth Downing
// 120 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 5/8 at bar 121, 4/4 at bar 121, 5/8 at bar 122, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/188375; license: https://creativecommons.org/publicdomain/mark/1.0/
// note: Full arrangement: all 154 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.

// other · violin
const violin = note(`<
  A B A C A B A C A B A C ~@60 D E F G H I J K L M N O P Q R@2 S@7 T@8 U V W X Y Z AA AB AC AD AE@2 AF AG AH AG AH AI AJ
  AK AL AM AN AO AP AQ ~@25
>`.pickRestart({
  A: "e5!2 d5!2", B: "c5!2 b4!2", C: "c5!2 b4 e4", D: "a4@8 a5@4 a5@2 a4 [g4,a4]",
  E: "g5@4 g5@2 a4 [g4,a4] e5@4 e5@2 c5 [b4,c5]", F: "c5@2 b4 c5 d5@2 c5 d5 e5@2 d5 e5 g5@2 f5 g5",
  G: "a5@2 g5 a5 b5@2 a5 b5 c6@2 d6@2 e6@2 g5@2", H: "a5@8 a5@2 g5 e5 e5@2 d5 c5", I: "f5 c5 a4@4 ~@2",
  J: "g#5 a5 ~ g5 e5 d5 ~ c5 d5@8", K: "e5 c5 a4@2 a4 g4 e4 d4 e4 d4 c4@2 d4 c4 a3@2",
  L: "b4@2 c5@2 a4@4 c5 d5 ~ e5 f5 g5 ~ a5", M: "b5@2 c6@2 a5@4 e5@2 a5@2 b5 e5 ~ b5",
  N: "c6 e5!2 c6 d6 e5!2 d6 e5!2 ~ e5 f5!2 [e4,f5] g5", O: "a5@4 b5@4 c6!2 b5!2 e6@4", P: "e6 e6@3",
  Q: "d6@2 b5@2 c6@2 d6@2 c6@3 a5 g5 a5 g5@2",
  R: "[a5@2 [a5,c6]@2 a5@8 a5 [e5,g5] e5@4 d5 c5 a4 c5 e5@2 e5 g5 e5!2 a5 [e5,g5] e5 [e5,g5]]/2", // Am Em
  S: "[[f4,c5,f5,a5] ~ [f4,c5,f5,a5] ~ [f4,c5,f5,a5] ~ [f4,c5,f5,a5] [a4,e5,a5,c6]@2 ~ [a4,e5,a5,c6] ~ [a4,e5,a5,c6] ~ [a4,e5,a5,c6] [g4,d5,g5,b5]@2 ~ [g4,d5,g5,b5] ~ [g4,d5,g5,b5] ~ [g4,d5,g5,b5] [d4,a4,d5,f#5]@2 ~ [d4,a4,d5,f#5] ~ [d4,a4,d5,f5] ~ [d4,a4,d5,f5] [f4,c5,f5,a5]@2 ~ [f4,c5,f5,a5] ~ [f4,c5,f5,a5] ~ [f4,c5,f5,a5] [a4,e5,a5,c6]@2 ~ [a4,e5,a5,c6] ~ [a4,e5,a5,c6] ~ [a4,e5,a5,c6] [g4,d5,g5,b5]@2 ~ [g4,d5,g5,b5] ~ [g4,d5,g5,b5] ~ [g4,d5,g5,b5] [d4,a4,d5,f#5]]/7", // F Am G D Dm F Am G …
  T: "[f5 [d4,a4,d5,f#5] ~ g#5 g5@2 ~ [f4,c5,f5,a5]@2 ~ [f4,c5,f5,a5] ~ [f4,c5,f5,a5] ~ [f4,c5,f5] [a4,e5,c6]@2 ~ [a4,e5,a5,c6] ~ [a4,e5,a5,c6] ~ [a4,e5,a5,c6] [g4,d5,g5,b5]@2 ~ [g4,d5,g5,b5] ~ [g4,d5,g5,b5] ~ [g4,d5,g5,b5] f#5 f5 ~ [d4,a4,d5,f#5] ~ [d4,a4,d5,f5] ~ [d4,a4,d5,f5] [f4,c5,f5,a5]@2 ~ [f4,c5,f5,a5] ~ [f4,c5,f5,a5] ~ [f4,c5,f5,a5] [a4,e5,a5,c6]@2 ~ [a4,e5,a5,c6] ~ [a4,e5,a5,c6] ~ [a4,e5,a5,c6] [g4,d5,g5,b5]@2 ~ [g4,d5,g5,b5] ~ [g4,d5,g5,b5] ~ [g4,d5,g5,b5] [d4,a4,d5,f#5], ~@3 [e4,b4,e5]@3 ~@8 a5@3 ~@14 [d4,a4,d5]@2 ~@31]/8", // D F F5 Am G D Dm F …
  U: "[d4,a4,d5,f5]@2 [e4,b4,e5,g#5] [e4,b4,e5,g5]", V: "a4@6 a4!2 a4@3 b4@2 c5@3", W: "c5@6 c5!2 c5@3 b4@2 a4@3",
  X: "g4@6 g4!2 g4@3 a4@2 b4@3", Y: "g#4 e4 b4 e5 g#5 b5 c6 b5", Z: "a5@6 a5!2 a5@3 b5@2 c6 ~ b5",
  AA: "c6@6 c6!2 c6@3 b5@2 a5@3", AB: "g5@6 g5!2 a5@2 b4@2 e5@2 g#5@2", AC: "a5 e5 c5 b4 c5 b4 a4 g#4",
  AD: "a5 g5 e5@2 c5@2 b4@2 c5@2 b4@2 a4@2 g#4@2", AE: "[a4@9 a4@7]/2", AF: "~@2 e6 a5 d6 a5 d6 a5",
  AG: "c6 a5 c6 a5 b5 a5 b5 a5", AH: "e6 a5 e6 a5 d6 a5 d6 a5", AI: "c6 a5 c6 a5 b5 e6 a5 e6",
  AJ: "a5 d6 a5 d6 a5 c6 a5 c6", AK: "a5 b5 e6 a5 e6 a5 d6 a5", AL: "d6 a5 c6 a5 c6 a5 b5 a5",
  AM: "b5 a5 d6 a5 d6 a5 c6 a5", AN: "c6 a5 b5 a5 b5 a5 c6 a5", AO: "f5 d5 e5 c5 d5 b4 c5 f4", AP: "b4 e4 e4@4 b3 ~",
  AQ: "[g3,d4] ~@7", // G5
})).s("gm_violin").gain(0.22)

// chords · distortion guitar · "Guitar"
const distortion_guitar = note(`<
  ~@4 A@2 B@2 A@2 B@2 C D E F G H I J K L M N O@2 P Q R S T U V W@3 V X@2 Y Z Y Z AA AB AC AD AE AF@3 AE AG AH@2 AI AJ@3
  AE AK AL AM AN AO AP AQ AR AQ AS AQ AT AU AV AW AX@2 AV AW AY AU AV AW AX@2 AZ AW BA BB BC@2 BD BE BF BG BH BI BJ BK
  BL BM BN BO BP BQ BR BS BT BU BR Q R BV BW@2 BX@2 BY@2 BZ@8 CA CB CC CB CD CE CC CF CG CH CI CJ CI CK CL CM CN CO CP
  CQ@2 CR CS@2 CT CU CV
>`.pickRestart({
  A: "[a2,e3]/2", B: "[f2,c3]/2", C: "[a2,e3]@7 [f2,c3]", D: "[f2,c3]@7 [g2,d3]", E: "[g2,d3]@7 e2",
  F: "[e3,b3]@3 [d3,a3] ~ c3 b2 a2", G: "e3 e3@7, a2", H: "[f2,c3] [f2,c3]@7", I: "[g2,d3] [g2,d3]@7", J: "b2 b2@7, e2",
  K: "[e2,c4]@2 ~@2 [g2,d3,d4]@2 ~@2 c4@6 c4!2", L: "c4@4 d4@4 e4@6 e4!2", M: "e4@4 d4@2 c4@2 b3@6 b3!2",
  N: "b3@2 c4@2 d4@2 b3 g#3", O: "[b3@2 c4@2 d4@2 e4@2 c4@2 b3@2 c4@6 c4!2 c4@4 d4@4 e4@2 d4@2]/2",
  P: "e4@6 e4!2 e4@4 d4@2 c4@2", Q: "b3@6 b3!2 b3@2 d4@2 g#4@2 b4@2", R: "e5 d5 e5 d5 e5 d5 c5 b4",
  S: "e5 b4 c5 d5 c5 b4 a4 g4", T: "a4@4 [e2,b2] ~ [g2,d3] ~", U: "[a2,e3]@2 ~@4 a2 [g2,d3]",
  V: "[g2,d3]@4 [e2,b2] ~ [g2,d3] ~", W: "[[a2,e3]@2 ~@5 c3@2 b2 a2 g2!2 e2 b2 a2 a2@2 ~@4 a2 [g2,d3], ~@5 e3 ~@2]/3",
  X: "[[a2,e3]@2 ~@5 c3@2 b2 a2 d3!2 c3 [g2,d3] ~]/2", Y: "[d3,c4]@2 d3 ~ d3 ~ [d3,b3]@2 d3 ~ d3 ~ [d3,a3]@2 d3 ~",
  Z: "d3 ~ d3 ~ [d3,c4]@2 d3 ~ [d3,b3]@2 d3 ~ [d3,a3]@2 d3 ~", // D7 G D5
  AA: "[f3,c4]@2 f3 ~ f3 ~ [f3,b3]@2 f3 ~ f3 ~ [f3,a3]@2 f3 ~", // F5 Fdim F
  AB: "f3 ~ f3 ~ [f3,c4]@2 f3 ~ [f3,b3]@2 f3 ~ [f3,a3]@2 f3 ~", AC: "c4 a3 d3 [b3,f4] a3 d3 a3@2",
  AD: "[e2,b2,e3]@3 [g2,d3,g3] [g2,d3,g3]@2 [e2,b2,e3]@2", AE: "[a2,e3]@2 a2 ~ a2 ~ [a3,e4]@2 [a3,e4]@4 a2 ~ a2 ~",
  AF: "[a2 ~ a2 ~ a2 ~ [g3,d4]@2 [g3,d4]@4 ~@2 [b2,d3,g3]@8 [e2,c3]@8 [e2,c3]@8 [g2,d3]@6 [g2,d3]@4]/3", // G5 G C G5
  AG: "a2 ~ a2 ~ a2 ~ [g3,d4]@2 [g3,d4]@6 ~@2", AH: "[[f2,c3]@3 g3 g3@2 [g2,b2,d3,g3]@9 g2, ~@3 c3@3 ~@10]/2",
  AI: "[a2,e3]@2 a2 ~ a2 ~ [a3,e4]@6 a2 ~ a2 ~", // A5
  AJ: "[a2 ~ a2 ~ a2 ~ [g3,d4]@6 ~@2 [b2,d3,g3]@8 [e2,c3]@8 [f2,c3]@8 d3@2 d3@4 [g2,d3]@4, ~@19 g2@3 ~@2]/3", // G5 G C F5 G5
  AK: "a2 ~ a2 ~ a2 ~ [g3,d4]@8 ~@2", AL: "[f2,c3]@3 [c3,g3]@3 e2 f2", AM: "[g2,b2,d3,g3]@3 b2 b2@2 [c3,g3]@2",
  AN: "[c3,g3] [c3,g3]@2 d3 [d3,a3] ~ [d3,a3] [e3,b3]", AO: "[e3,b3]@2 ~@2 [f#3,a3]@2 ~@2 [f#3,a3]@4 e2 ~ a2 ~",
  AP: "[f#3,a3,d4]@4 ~@2 g3@2 g3@6 [e3,b3]!2, ~@3 e3@4 ~", AQ: "[e3,b3] ~@3 [f#3,a3]@2 ~@2 [f#3,a3]@4 e2 ~ a2 ~",
  AR: "[d3,a3]@6 [g3,d4]@2 [g3,d4]@2 [a3,d4] ~ [a3,d4]!4", AS: "[f#3,a3,d4]@4 ~@2 [e3,g3]@2 [e3,g3]@6 [e3,b3]!2",
  AT: "[d3,a3,d4,f#4]@3 [d3,g3,d4,g4] [d3,g3,d4,g4]@2 [d3,a3,d4,f#4]@2", AU: "[a2,e3]", AV: "[f2,c3]", AW: "[g2,d3]",
  AX: "[[e3,b3]@2 [d3,a3]@2 [c3,g3] [b2,f3] [a2,e3] [a2,e3]@9]/2", // E5 D5 C5 Bdim A5
  AY: "[e2,b2] ~ [e2,b2] ~ [e2,b2] ~ [e2,b2] ~ [e2,b2] ~ [e2,b2] ~ [e2,b2] ~ [e2,b2] ~", AZ: "[d2,a2]", BA: "[e2,b2]",
  BB: "a4@8 a4 ~@2 b4 ~ c5 ~@2", BC: "[c5@12 b4@2 b4@4 c5 b4 a4@2 g4@2 a4@6 g4@2]/2",
  BD: "a4 g4 e4 d4 e4 a4 g4 e4 d4 e4 c4 b3 c4 b3 a3 g3", BE: "a3@2 b3@2 a3@8 ~@2 d4 c4",
  BF: "b3@2 g3@2 d3@2 c3@2 b2@2 c3 b2 a2@2 g2@2", BG: "a2@4 g2@4 e2 f#2 ~ g2 a2 b2 c3 a2",
  BH: "e2 [g2,a2] a2 [c3,d3] e2 [g2,a2] a2 [d3,e3] d3 d3@5 g3@2, ~@9 e3 ~@6", BI: "a3@6 c4@2 e4@5 d4 c4 d4",
  BJ: "a4 e4 g4!2 a4@3 b4", BK: "~ c5 b4 a4 g4 e4 d4 c4 b3@2 c4 b3 c4 b3 a3 g3", BL: "a3 b3 a3@6",
  BM: "e4 a4 e4 g4 a4@4", BN: "a4@2 b4@2 c5@2 b4@2 c5@6 b4 c5", BO: "~@2 c5 b4 a4 b4 a4 g4 a4 g4 f4 g4 e4 f4!2 [d4,e4]",
  BP: "c4 [b3,d4] b3!2 d4 b3 a3 g3 b3@8", BQ: "c4@6 c4!2 c4@3 d4@2 e4@3", BR: "e4@6 e4!2 e4@3 d4@2 c4@3",
  BS: "b3@6 b3!2 b3@3 c4@2 d4@3", BT: "b3 g#3 b3 c4 d4 e4 c4 b3", BU: "c4@6 c4!2 c4@3 d4@2 f4 ~ e4",
  BV: "e5 b4 c5 d5 c5 b4 a4 g#4", BW: "[a2,e3,a4]/2", BX: "[[f2,c3]@3 [f2,c3]]/2", BY: "[[a2,e3]@6 [a2,e3]!2]/2",
  BZ: "[[f2,c3]@26 [e2,b2,e3]@26 [f2,c3,f3]@32 [d3,a3]@32 [e2,b2] ~ [e2,b2] ~ [e2,b2] ~ [e2,b2] ~ [e2,b2] ~ [e2,b2] ~]/8", // F5 E5 F5 D5 E5
  CA: "[e2,b2] ~ [e2,b2] ~ [e2,b2]@2 ~@6 [e2,b2]@2 ~@2", CB: "[g2,d3] ~ [a2,e3]@2 ~@4", CC: "a2 [g2,d3]@5 [e2,b2] ~",
  CD: "~ c3@2 b2 a2 g2@2 e2", CE: "b2 [a2,e3]@3 ~@4", CF: "[g2,d3]@2 ~@2 [a2,e3]@4 ~@6 g4 ~",
  CG: "c5 ~ c3@4 b2@2 a2@2 d3@4 c3@2", CH: "[a2,d3]@2 ~@2 [d3,c4]@2 d3 ~ d3 ~ [d3,b3]@2 d3 ~ d3 ~",
  CI: "[d3,a3]@2 d3 ~ d3 ~ d3 ~ [d3,c4]@2 d3 ~ [d3,b3]@2 d3 ~", // D5 D7 G
  CJ: "[d3,a3]@2 d3 ~ [d3,c4]@2 d3 ~ d3 ~ [d3,b3]@2 d3 ~ d3 ~", // D5 D7 G
  CK: "[d3,a3]@2 d3 ~ [f3,c4]@2 f3 ~ f3 ~ [f3,b3]@2 f3 ~ f3 ~", // D5 F5 Fdim
  CL: "[f3,a3]@2 f3 ~ f3 ~ f3 ~ [f3,c4]@2 f3 ~ [f3,b3]@2 f3 ~", CM: "[f3,a3]@2 f3 ~ c4@2 a3@2 d3@2 [b3,f4]@2 a3@2 d3@2",
  CN: "a3@2 [e2,b2,e3]@3 [g2,e3,g3]@3", CO: "[e2,b2,e3]@4 [a2,e3]@2 a2 ~ a2 ~ [a3,e4]@2 [a3,e4]@4",
  CP: "a2 ~ a2 ~ a2 ~ a2 ~ a2 ~ [g3,d4]@6", CQ: "[~ [b2,d3,g3] [b2,d3,g3]@3 [e2,c3]@4 [f2,c3]@4 [g2,d3]@3]/2",
  CR: "[g2,d3]@4 [a2,e3]@2 a2 ~ a2 ~ [a3,e4]@6", CS: "[a2 ~ a2 ~ a2 ~ a2 ~ a2 ~ [g3,d4]@8 ~@2 [f2,c3]@6 [a2,g3]@6]/2",
  CT: "[g2,b2,d3,g3]", CU: "[g2,b2,d3,g3]@4 g2@2 c3@2 b3@2 c4@2 b3 a3 g3 c4", CV: "g3 a3 ~@6",
})).s("gm_distortion_guitar").gain(0.48)

stack(violin, distortion_guitar)