Strudelify
Harleys & Indians (Riders in the Sky) cover art

1994 · Crash! Boom! Bang!

Harleys & Indians (Riders in the Sky)

Roxette

KeyC majorTempo104 bpm
0:00/0:00
// Harleys & Indians (Riders in the Sky) — Roxette
// 104 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 1 "Piano-M" piano (copy of ch 4 "Shanai-M" contrabass); ch 3 "Piano-G2" piano (copy of ch 5 "Distortion-G" distortion guitar); ch 5 "Distortion-G" distortion guitar (copy of ch 8 "Bass-G" synth bass 2)
// note: Full arrangement: all 77 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): Overdriven-A.
setcpm(104/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 · "Piano-D1"
const piano = note(`<
  ~@4 A B A B C D E F C D E G ~@3 H I J ~ A B A B C D E F C D E G ~@3 H I J ~ K L M N O P Q R O S T S T C D E F C D E G
  ~@3 H I J ~ K A U A U A B
>`.pickRestart({
  A: "[g3,b3,d4]", B: "[a3,c4,f4]@5 [g3,c4,e4]@3", C: "d4", D: "[c4,f4]", E: "[c4,e4]", F: "d4@3 [g3,c4]", G: "d4@3 ~",
  H: "[g3,b3,d4]@3 ~", I: "d4@2 b3 d4", J: "c4 ~", K: "[a#4,d5,f5] [g4,c5,e5]", L: "~@4 g3 f#3@2 e3@5 e3@2 f#3@2",
  M: "~@4 g3 f#3@2 e3@5 e3 f#3@3", N: "~@2 g3@2 g3@2 f#3@2 f#3 e3@3 e3@2 f#3@2", O: "g3 ~ f#3@2",
  P: "~@2 g3@2 g3 f#3@2 e3@5 e3@2 f#3@2", Q: "~@2 g3@2 g3 f#3@2 e3@3 e3@2 e3@2 f#3@2",
  R: "~@2 g3@2 g3 f#3@3 f#3 e3@3 e3@2 f#3@2", S: "[b3,e4,g4]", T: "[a3,d4,f#4]@5 [a3,c#4,e4]@3",
  U: "[a3,c4,f4] [g3,c4,e4]", // F C
})).s("gm_piano").gain(0.41).pan(0.8)

// chords · acoustic guitar steel · "Guitare-A"
const acoustic_guitar_steel = note(`<
  ~@16 A B C A@2 B C A D A D A B C E A B C A@2 B C A@2 B C F G@3 H G@3 H I J I J A B C E A B C A@2 B C A@2 B C F A K A K
  A D
>`.pickRestart({
  A: "[g3,d4,g4,b4,g5]", B: "[f3,c4,f4,a4,c5,f5]", C: "[c4,e4,g4,c5,e5]", D: "[f3,c4,f4,a4,c5,f5]@5 [c4,e4,g4,c5,e5]@3",
  E: "[g3,d4,g4,b4,g5]@3 [c4,e4,g4,c5,e5]", F: "[a#3,f4,a#4,d5,f5] [c4,e4,g4,c5,e5]",
  G: "[e3,b3,e4,g4,b4,e5]@5 [c4,e4,g4,c5,e5]@3", H: "[g3,d4,g4,b4,g5]@5 [d4,a4,d5,f#5]@3", I: "[e3,b3,e4,g4,b4,e5]",
  J: "[d4,a4,d5,f#5]@5 [a3,e4,a4,c#5,e5]@3", K: "[g3,f4,a4,c5,f5] [g3,e4,g4,c5,e5]",
})).s("gm_acoustic_guitar_steel").gain(0.41)

// chords · distortion guitar · "Distortion-D"
const distortion_guitar = note(`<
  A@2 ~@2 B C B C D E F G D E F H I J@2 K I J@2 B C B C D E F G D E F H I J@2 K I J@2 L ~@8 M N M N O P Q R O P Q S ~@3
  K ~@3 T B U B U B V
>`.pickRestart({
  A: "[c3,f3] [d3,g3] ~ [d3,g3] ~ [d3,g3] [d3,g3]@2 ~ [d3,g3] [d3,g3]@2 [d3,g3]@2 ~@2", B: "[g3,b3,d4]",
  C: "[a3,c4,f4]@5 [g3,c4,e4]@3", D: "[d3,d4]", E: "[c3,c4,f4]", F: "[c3,c4,e4]", G: "[d3,d4]@3 [e3,g3,c4]",
  H: "d3, d4@3 ~", I: "d3", J: "c3", K: "[g3,b3,d4]@3 ~", L: "[f4,a#4,d5,f5] [g4,c5,e5]", M: "[b3,e4,g4]",
  N: "[a3,d4,f#4]@5 [a3,c#4,e4]@3", O: "d4", P: "[c4,f4]", Q: "[c4,e4]", R: "d4@3 [g3,c4]", S: "d4@3 ~",
  T: "[a#4,d5,f5] [g4,c5,e5]", U: "[a3,c4,f4] [g3,c4,e4]", V: "[a3,f4]@5 [g3,e4]@3",
})).s("gm_distortion_guitar").gain(0.41).pan(0.4)

// bass · synth bass 2 · "Bass-G"
const bass = note(`<
  ~@4 A B A B C D E F C D E C@2 D E G C D E A B A H C D E F C D E C@2 D E G C D E I J@3 K J L J K M N M N C D E F C D E
  C@2 D E G C D E I O P O P Q B
>`.pickRestart({
  A: "g2@3 g2@2 g2 f2 g2 a#2 g2 f2 g2 g2@2 d2 f2", B: "g2 g2@2 g2@2 g2 f2 g2 a#2 g2 f2 g2 g2@4",
  C: "g2@3 g2@3 g2@4 g2@2 g2@4", D: "f2@3 f2@3 f2@4 f2@2 f2@4", E: "c2@3 c2@3 c2@4 c2@2 c2@4",
  F: "g2@3 g2@3 g2@4 g2@2 c3@4", G: "g2@3 g2@2 g2 a#2 g2 f2 d2 a#2@2 g2@4", H: "g2@3 g2@2 g2 f2 g2 a#2 g2 f2 g2 g2@4",
  I: "a#1@3 a#1@2 a#1 a#1@2 ~ c2 c2@2 c2!2 c2@2", J: "[e1,e2]@3 [e1,e2]@3 [e1,e2]@4 c2@2 c2@4",
  K: "[g1,g2]@3 [g1,g2]@3 [g1,g2]@4 d2@2 d2@4", L: "[e1,e2]@3 [e1,e2]@3 [e1,e2]@4 [c2,e3]@2 c2@4",
  M: "d3 e3!2 e3@2 e3 d3 e3 g3 e3 d3@2 d3 e3 a2 b2", N: "d3 e3!2 e3@2 e3 d3 e3 g3 e3 d3@2 d3 e3@3", O: "g1", P: "g2",
  Q: "g2@3 g2@2 g2 f2 g2 a#2 g2 f2 g2 g2@2 d2 e2",
})).s("gm_synth_bass_2").gain(0.41).pan(0.4)

// other · overdriven guitar · "Overdriven-A"
const overdriven_guitar = note("<A@2 ~@2 B C B C B D E F B D E B ~@61>".pickRestart({
  A: "[g3@15 ~]/2", B: "g3", C: "f3@5 c3@3", D: "f3", E: "c3", F: "g3@3 c4",
})).s("gm_overdriven_guitar").gain(0.41).pan(0.6)

// other · shanai · "Shanai-Marie"
const shanai = note("<~@15 A B C ~ A D E F ~@54>".pickRestart({
  A: "~@6 g4!2", B: "g4 f4 d4 g4", C: "f4 ~", D: "g4 f4 [b3,d4] [d4,g4], d4 ~", E: "[c4,f4] ~", F: "~@4 f3 g3 a#3 g3",
})).s("gm_shanai").gain(0.64)

// drums · kick
const kick = s("bd").struct("<~@4 [~ x!2 ~@2 x!2 ~]!22 [~@2 x ~ x ~@5 x ~ x!2 ~ x] [~ x!2 ~@2 x!2 ~]!50>").gain(0.64)

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

// drums · low tom
const low_tom = s("lt").struct("<~@4 [x ~@2 x ~@2 x ~@3 x ~ x ~@3]!73>").gain(0.64)

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

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@4 [~ x ~ x ~ x ~ x]!73>").gain(3.24)

stack(
  piano, acoustic_guitar_steel, distortion_guitar, bass, overdriven_guitar, shanai, kick, snare, low_tom, crash, cabasa
)

More by Roxette