Strudelify
Runaway Train cover art

1992 · Grave Dancers Union

Runaway Train

Soul Asylum

KeyE minorTempo120 bpm
0:00/0:00
// Runaway Train — Soul Asylum
// 120 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 123 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. 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.

// bass · fretless bass · "Bass"
const bass = note(`<
  ~ A B C D A E F G H I J K A E F G H I J L M N O P M Q J N A R S T H I J U V W A E F G H I J K A E F G H I J L M N O P
  M Q J N A R S T H I J U A R S X H Y Z U M N O P M Q J N AA@2 AB@2 ~ AC AD AE A R S T H I J U A R S T H I J U A R S T H
  I J U A R S AF
>`.pickRestart({
  A: "c2@4 ~@2 c2 ~ c2@7 ~", B: "c2@5 ~ c2 ~ c2@2 g2@2 f2@2 g2@2", C: "c2@4 ~@2 c2@2 c2@7 ~",
  D: "c2@5 ~ c2 ~ c2@2 g1@2 f1@2 g1@2", E: "c2@5 ~ c2 ~ c2@3 ~ c2@4", F: "b1@4 ~@2 b1 ~ b1@7 ~",
  G: "b1@5 ~ b1 ~ b1@3 ~ b1@4", H: "a1@4 ~@2 a1 ~ a1@7 ~", I: "a1@5 ~ a1 ~ a1@3 ~ a1@4", J: "g1@4 ~@2 g1 ~ g1@7 ~",
  K: "g1@5 ~ g1 ~ g1@4 a1@2 b1@2", L: "g1@5 ~ g1 ~ c2@2 b1 ~ a1@2 g1@2", M: "f1@4 ~@2 f1 ~ f1@6 ~@2",
  N: "g1@5 ~ g1 ~ g1@3 ~ g1@4", O: "c2@4 ~@2 c2 ~ c2@3 ~ b1@3 ~", P: "a1@4 ~@2 a1 ~ a1@3 ~ a1@4",
  Q: "e1@5 ~ e1 ~ e1@3 ~ e1@4", R: "c2@5 ~ c2 ~ c2@3 ~ c2@2 d2@2", S: "e2@4 ~@2 e2 ~ e2@7 ~",
  T: "e2@5 ~ e2 ~ e2@3 ~ e2@4", U: "g1@5 ~ g1 ~ g1@2 g1@2 g1@2 g1@2", V: "g1@5 ~ g1 ~ g1@3 ~ g1@2 g1@2",
  W: "g1@2 ~@2 d2@2 e2@4 d2 c#2 b1@3 ~, ~@6 d#2 ~@5 c2 ~@3", X: "e2@5 ~ e2 ~ b2@3 ~ e2@4",
  Y: "a1@5 ~ a1 ~ a1@3 ~ e1@2 f1@2", Z: "g1@4 ~@2 g1 ~ g1@3 ~ g2@3 ~", AA: "c2/2", AB: "b1/2", AC: "~@3 a1",
  AD: "g1@7 g1", AE: "g1@4 g1 ~ g1@2 g1 ~ g1@2 g1@2 g1@2", AF: "e2@5 ~@11",
})).s("gm_fretless_bass").gain(0.52)

// chords · acoustic guitar steel · "Folk gt"
const acoustic_guitar_steel = note(`<
  ~ A B@2 A C@2 D@2 E@2 F@2 C@2 D@2 E@2 G@2 H I J K H L M@2 C@2 D@2 E@2 F@2 N O C@2 D@2 E@2 F@2 C@2 D@2 E@2 F@2 H I J K
  H L M@2 C@2 D@2 E@2 F@2 C@2 D@2 E@2 F@2 H I J K H L M@2 P@2 Q@2 R@2 M@2 C@2 D@2 E@2 F@2 C@2 D@2 E@2 F@2 C@2 D@2 E@2
  F@2 S@2 ~@2
>`.pickRestart({
  A: "[g3,c4]@2 c4 [c4,e4]@2 c4 ~ e4, c3, e4@3 ~@2 e4@2 ~, ~ [e3,g3]@2 [e3,g3,c4]", // C5 C Em C
  B: "[e3,g3,c4]@2 c4 [c4,e4]@2 c4 ~ e4, c3, e4@3 ~@2 e4@2 ~, ~ [e3,g3]@2 [e3,g3,c4]", // C Em C
  C: "[[g3,c4]@2 c4 ~ [e3,g3]@2 ~ e4 e4 ~ c4 [c4,e4]@2 ~@2 e4, c3@31 ~, e4@3 e4@4 ~@2 e4@2 ~@2 e4@2 ~, ~ [e3,g3] ~ [e3,g3,c4] [e3,g3,c4] [e3,g3]@2 [e3,g3], ~@3 c4@3 ~@7 c4@3]/2", // C5 Em C Em C Em
  D: "[[g3,b3]@2 b3 ~ [e3,g3]@2 ~ e4 e4 ~ b3 [b3,e4]@2 ~@2 e4, b2@31 ~, e4@3 e4@4 ~@2 e4@2 ~@2 e4@2 ~, ~ [e3,g3] ~ [e3,g3,b3] [e3,g3,b3] [e3,g3]@2 [e3,g3], ~@3 b3@3 ~@7 b3@3]/2", // G Em E5 Em
  E: "[[a3,c4]@2 c4 ~ [e3,a3]@2 ~ e4 e4 ~ c4 [c4,e4]@2 ~@2 e4, a2@31 ~, e4@3 e4@4 ~@2 e4@2 ~@2 e4@2 ~, ~ [e3,a3] ~ [e3,a3,c4] [e3,a3,c4] [e3,a3]@2 [e3,a3], ~@3 c4@3 ~@7 c4@3]/2", // Am A5 C A5 Am A5
  F: "[[g3,b3]@2 b3 ~ [d3,g3]@2 ~ g4 g4 ~ b3 [b3,g4]@2 ~@2 g4, g2@31 ~, g4@3 g4@4 ~@2 g4@2 ~@2 g4@2 ~, ~ [d3,g3] ~ [d3,g3,b3] [d3,g3,b3] [d3,g3]@2 [d3,g3], ~@3 b3@3 ~@7 b3@3]/2", // G G5 Em G5 G G5
  G: "[[g3,b3]@2 b3 ~ [d3,g3]@2 ~ g4 g4 ~ b3 [b3,g4]@2 ~@2 g4, g2, g4@3 g4@4 ~@2 g4@2 ~@2 g4@2 ~, ~ [d3,g3] ~ [d3,g3,b3] [d3,g3,b3] [d3,g3]@2 [d3,g3], ~@3 b3@3 ~@7 b3@3]/2", // G G5 Em G5 G G5
  H: "[a3,c4]@2 c4 ~ a3@2 [a3,c4,f4]@2, f2, f4@3 [c4,f4]@3 ~@2, ~ [f3,a3] f3@2", // Am F F5 F
  I: "[b3,d4]@2 d4 ~@2 g4!3, g2, g4@3 d4@3 ~@2, ~ [g3,b3] g3@2, ~@3 g4 b3@2 [b3,d4]@2", // Bm G Bm
  J: "[g3,c4]@2 c4 ~@2 e4!3, c3, e4@3 c4@3 ~@2, ~ [e3,g3] e3@2, ~@3 e4 g3@2 [g3,c4]@2", // C5 Em C5
  K: "e4 ~@2 [c4,e4]@2 ~@2 e4, c4@3 ~@2 c4@3, [a2,e3,a3] [a2,e3,a3]@2 [a2,e3,a3], ~ e4@2 ~@2 e4@2 ~", // C A5
  L: "[g3,b3]@2 b3 ~@2 e4!3, e2, e4@3 b3@3 ~@2, ~ [e3,g3] e3@2, ~@3 e4 g3@2 [g3,b3]@2", // G Em G
  M: "[[b3,d4]@2 d4 ~@2 g4 [b3,d4,a4] a4@2 ~ d4 ~@2 g4!3, g2@7 g2@8 ~, g4@3 d4@3 ~@3 a4@2 a4 b3@2 [b3,d4]@2, ~@2 [g3,b3]@2 g3@3 [g3,b3,d4]@3 [g3,b3]@2 g3@4, ~@3 g4 b3@2 ~@5 d4@3 ~@2]/2", // Bm Bm7 Bm G
  N: "g4 ~ b3 [b3,g4]@2 ~@2 g4, [d3,g3,b3] [d3,g3]@2 [d3,g3], ~ g4@2 ~@2 b3@3, ~@5 g4@2 ~", O: "[d3,g3,b3,g4] ~@7",
  P: "[[c3,c4,e4], [e3,g3]@15 ~]/2", Q: "[[b2,e3,g3,b3,e4]@31 ~]/2",
  R: "[a3@2 ~@13 a3, e4, e3@7 b3@2 e3@3 a3@2 c4@2, a2@6 c4@6 a2@19 ~, c4@2 a3@8 c4@3 e3@3]/2",
  S: "[[e3,g3,c4]@2 c4 ~ [e3,g3]@2 ~@10, c3@31 ~, e4@3 e4@4 ~@9, ~ [e3,g3] ~@6, ~@3 c4@3 ~@10]/2", // C Em
})).s("gm_acoustic_guitar_steel").gain(0.36).pan(0.3)

// chords · acoustic guitar steel · "Folk gt" · soft notes
const acoustic_guitar_steel_2 = note(`<
  ~ A ~@2 A@2 ~ A ~ A ~ B ~ A ~ A ~ A ~ B ~ C D A ~ C A D ~ A ~ A ~ A ~ B ~@3 A ~ A ~ A ~ B ~ A ~ A ~ A ~ B ~ C D A ~ C
  A D ~ A ~ A ~ A ~ B ~ A ~ A ~ A ~ B ~ C D A ~ C A D ~@7 D ~ A ~ A ~ A ~ B ~ A ~ A ~ A ~ B ~ A ~ A ~ A ~ B ~ E F G@2
>`.pickRestart({
  A: "e3 ~@3", B: "d3 ~@3", C: "f3 ~@3", D: "g3 ~@3", E: "~@7 e4, ~@3 [e3,g3,c4]",
  F: "e4 ~ c4 [c4,e4]@2 ~@2 e4, [e3,g3,c4] [e3,g3]@2 [e3,g3], ~ e4@2 ~@2 c4@3, ~@5 e4@2 ~", // C Em
  G: "[[e3,g3,b3]@2 b3 ~ [e3,g3]@2 ~ e4 e4 ~ e3@4 ~@2, b2@31 ~, e4@3 e4@4 ~@2 e4@2 ~@5, ~ [e3,g3] ~ [e3,g3,b3] [e3,g3,b3] ~@3, ~@3 b3@3 ~@10]/2", // Em
})).s("gm_acoustic_guitar_steel").gain(0.21).pan(0.3)

// chords · acoustic guitar steel · "Guitar2"
const acoustic_guitar_steel_3 = note(`<
  A B@2 C D ~@66 E@2 F@2 G@2 H@2 I J K L I M ~@26 E@2 F@2 G@2 H@2 N@2 ~@2
>`.pickRestart({
  A: "~@7 f3", B: "[~@7 g3 g3 ~@6 f3, g3@3 g3@2 g3@2 ~@2 f3@2 f3@2 f3@2 ~, ~@2 e4@2 e4@2 e4@3 ~ d4@2 d4@2 d4@2]/2",
  C: "~@5 e3 f3@2, e3@3 e3@2 ~@3, ~ c4 c4@2", D: "~@7 e3, e3@7 ~, ~@2 c4@3 c4@3, ~@3 g3@3 g3@2, ~ e4",
  E: "[~@7 d4@2 e3 ~@5 e3, ~ g3@3 g3@2 g3@8 g3@2, ~@2 e4@7 ~ d4@2 d4@4, ~@3 c4@10 c4@3, ~@10 e3@4 ~@8 e3@7 ~@3]/2",
  F: "[~@14 d4@4 ~@2 d4@3 ~@7 e3@2, ~@2 g3@6 g3@4 g3@15 ~ g3@4, ~@4 e4@13 ~@7 d4@7 ~, ~@6 b3@19 ~ b3@6, ~@10 e3@4 ~@4 e3@11 ~@3]/2",
  G: "[~@2 [a3,c4]!2 ~@2 [a3,c4] ~@2 e3 d4 ~ d4 ~@2 e3, ~@4 [a3,c4]@2 ~ b3@6 c4@3, ~@10 e3@8 ~@4 e3@7 ~@3, ~@7 d4@3 ~@4 a3@2]/2", // Am
  H: "[~@2 [g3,b3]!2 ~@2 [g3,b3] ~@2 d3 c4 ~ c4 ~@2 d3, ~@4 [g3,b3]@2 ~ a3@5 a3@2 g3@2, ~@10 d3@8 ~@4 d3@7 ~@3, ~@7 c4@3 ~@3 b3@3]/2", // G
  I: "~@4 a#3 ~@2 c3, ~ c3@2 c3@4 ~, ~ f3@2 f3, ~@2 g3@2 ~ a3@3",
  J: "~@4 c4 ~@2 d3, ~ d3@2 d3@4 ~, ~ g3@2 g3, ~@2 a3@2 ~ b3@3", K: "~ c3 ~ c3 d3 e3 d3 c3, ~ g3@3, ~ d3 ~@2",
  L: "~ c3 ~@4 e3@2, ~ e3@2 ~, ~ b3 b3@2, ~@3 c3@4 ~, ~@5 a3@2 ~",
  M: "~@4 b3 ~@2 b2, ~ b2@2 b2@4 ~, ~ e3@2 e3, ~@2 g3@2 ~ g3@3",
  N: "[~@14 d4@5 ~@13, ~ g3@3 g3@2 g3@8 ~@2, ~@2 e4@7 ~@7, ~@3 c4@10 ~@3, ~@5 e3@2 ~@9]/2",
})).s("gm_acoustic_guitar_steel").gain(0.48).pan(1)

// chords · acoustic guitar steel · "Guitar2" · soft notes
const acoustic_guitar_steel_4 = note("<~@75 A ~ B ~@4 C ~@32 A ~ B ~@2 D E@2>".pickRestart({
  A: "~ e3@4 ~@3", B: "~ d3@4 ~@3", C: "~@7 c3", D: "~ e3 ~@5 e3, ~ d4 d4@2, ~@3 e3@3 g3@2, ~@5 c4@3",
  E: "[~@14 d4@4 ~@2 d4@3 ~@9, ~@2 g3@6 g3@4 g3@15 ~@5, ~@4 e4@13 ~@15, ~@6 b3@19 ~@7, ~@10 e3@4 ~@4 e3@11 ~@3]/2",
})).s("gm_acoustic_guitar_steel").gain(0.24).pan(1)

// chords · rock organ · "Hammond"
const rock_organ = note(`<
  ~ A@4 B@6 C@2 B@6 C@2 D E@3 D F C@2 B@6 G@4 B@6 H@2 B@6 C@2 D E@3 D F C@2 B@6 C@2 B@6 I@3 E@3 D F C@2 J@6 K@2 B@6 C@2
  B@6 C@2 B@6 C@2 L@4
>`.pickRestart({
  A: "[c5,e5,g5]/4", B: "[c5 b4 [c5,a5], e5, g5@2 ~]/6", C: "[b4,d5,g5]/2", D: "[a4,c5,f5]",
  E: "[[b4,d5]@16 ~@16 a5@15 ~, g5@2 ~, ~@16 [c5,e5]@31 ~]/3", F: "[g4,b4,e5]", G: "[[b4,d5,g5]@25 ~@7]/4",
  H: "[[b4,d5], g5@15 ~]/2", I: "[~@2 [a4,c5,f5], [b4,d5,g5]]/3", J: "[g6@2 a6, e6, c6@47 ~]/6",
  K: "[[b5,d6,g6]@15 ~]/2", L: "[c5@8 b4@5 ~@3, [e5,g5]@13 ~@3]/4",
})).s("gm_rock_organ").gain(0.11).pan(0.8)

// chords · distortion guitar · "Dist gt"
const distortion_guitar = note(`<
  ~@28 A B@2 C@2 D@2 E@2 ~@25 A F@2 C@2 D@2 G@2 B@2 C@2 D@2 E@2 H I J K H L@3 ~@7 A B@2 C@2 D@2 G@2 B@2 C@2 D@2 G@2 B@2
  C@2 D@2 G@2 B@2 M ~
>`.pickRestart({
  A: "~@15 [c4,e4], ~@7 [c3,e3,g3,c4]", B: "[[c3,e3,g3,c4,e4]@30 ~ [b3,e4], ~@15 [e3,g3,b3]]/2",
  C: "[[e3,g3,b3,e4]@30 ~ [c4,e4], ~@15 [c3,e3,a3,c4]]/2", D: "[[c3,e3,a3,c4,e4]@30 ~ [b3,g4], ~@15 [g2,d3,g3,b3]]/2",
  E: "[g2,d3,g3,b3,g4]/2", F: "[[c3,e3,g3,c4,e4]@29 ~@2 [b3,e4], ~@15 [e3,g3,b3]]/2",
  G: "[[g2,d3,g3,b3,g4]@30 ~ [c4,e4], ~@15 [c3,e3,g3,c4]]/2", H: "~ [c4,f4]@15, [f3,a3]",
  I: "~@15 [c4,e4], [g3,b3]@7 [e3,g3], ~ [d4,g4]@15", J: "~ [c4,e4]@15, [e3,g3]", K: "~ [c4,e4]@15, [e3,a3]",
  L: "[~ b3@13 ~@3 [b3,g4]@31, [e3,g3]@7 [g2,d3,g3] [g2,d3,g3]@16, ~ e4@16 ~@31, ~@15 [b3,g4]@2 ~@31]/3", // Em G5 Em
  M: "[e3,g3,b3,e4]@7 ~", // Em
})).s("gm_distortion_guitar").gain(0.25)

// drums · kick
const kick = s("bd").struct(`<
  ~ A@19 B A@7 C A@7 B D E A@15 B A@7 F A@7 G A@22 D H A@7 G A@7 G A@7 G A@3 E
>`.pickRestart({
  A: "x ~@2 x!2 ~@3", B: "x ~@2 x ~ x ~@2", C: "x!2", D: "x ~@2 x!2 ~@2 x", E: "x", F: "x ~@2 x ~@4",
  G: "x ~@2 x ~ x ~ x", H: "x!8",
})).gain(0.72)

// drums · snare
const snare = s("sd").struct(`<
  A B@19 C B@7 D B@7 C B E B@15 F B@7 G B@7 C B@7 H B@7 I ~@6 J K B@7 C B@7 C B@7 C B@3 ~
>`.pickRestart({
  A: "~@12 x ~ x!2", B: "~ x ~ x", C: "~ x!3", D: "~@2 x ~@3 x ~@4 x!2 ~@3", E: "x", F: "~@4 x ~@3 x ~@2 x!2 ~@3",
  G: "~@2 x ~ x ~@2 x", H: "~@4 x ~@7 x ~ x!2", I: "~ x ~@2", J: "~@3 x", K: "~@4 x ~ x ~ x ~ x ~ x ~ x!2",
})).gain(0.72)

// drums · hihat
const hihat = s("hh").struct(`<
  ~ A B@2 C B D B D B D B C B D B D B D B E A B@2 D B@3 F B C B C B C B C B G A B@2 H B@3 C A C B C B@3 I A B@2 D B@3 E
  A C B C B C B I A C B C B C B C A B@2 D B@3 E A B@5 J D A C B C B C B I A C B C B C B I A C B C B C B I A C B I
>`.pickRestart({
  A: "~ x!7", B: "x!8", C: "x!6 ~@2", D: "x!7 ~", E: "x!4 ~@4", F: "x!4", G: "x", H: "x!5 ~ x!2", I: "x!2 ~@6",
  J: "x!6 ~ x",
})).gain(0.4)

// drums · low tom
const low_tom = s("lt").struct("<~@28 A ~@17 A ~@7 A ~@7 B ~@23 A ~@36>".pickRestart({
  A: "~@7 x", B: "~@3 x",
})).gain(0.48)

// drums · mid tom
const mid_tom = s("mt").struct("<~@28 [~ x] ~@33 [~@5 x ~@2] ~@23 [~@5 x!2 ~] ~@36>").gain(0.48)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@6 A ~ A ~ A ~@3 A ~ A ~ A ~ B ~@3 A ~@5 C ~ C ~ C ~ D ~@5 E ~@3 D ~ D ~ D ~@3 F ~@3 A ~@3 G ~ C ~ C ~ C ~ H ~ C ~ C
  ~ C ~ D ~@3 A ~@3 G ~@6 D ~@2 C ~ C ~ C ~ H ~ C ~ C ~ C ~ H ~ C ~ C ~ C ~ H ~ C ~@2
>`.pickRestart({
  A: "~@7 x", B: "~@2 x!2", C: "~@6 x!2", D: "~@3 x", E: "~@5 x ~@2", F: "~ x ~@2", G: "~ x", H: "~ x ~ x",
})).gain(0.48)

// drums · crash
const crash = s("cr").struct(`<
  ~ A ~@2 B ~@7 B ~@8 A ~@6 C ~@10 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@3
>`.pickRestart({
  A: "x", B: "~@3 x", C: "~ x ~@6",
})).gain(0.4)

// drums · tambourine
const tambourine = s("tb").struct("<~@21 A@17 B ~@16 A@32 ~@8 A@8 C A@15 C A@2 D>".pickRestart({
  A: "x!8", B: "x", C: "~ x!7", D: "x!2 ~@6",
})).gain(0.4)

stack(
  bass, acoustic_guitar_steel, acoustic_guitar_steel_2, acoustic_guitar_steel_3, acoustic_guitar_steel_4, rock_organ,
  distortion_guitar, kick, snare, hihat, low_tom, mid_tom, open_hat, crash, tambourine
)

More by Soul Asylum