Strudelify
Open Arms cover art

1988 · Escape

Open Arms

Journey

KeyD majorTempo100 bpm
0:00/0:00
// Open Arms — Journey
// 100 bpm, 3/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 109 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(100/3)

// 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@8 B@2 C@4 D@2 B@2 E@6 F@5 G@4 H@7 I@2 J@4 K@8 L@4 M@2 N@2 O@2 P@4 Q@2 R@4 S T@8 U@4 V@5 W@2 X@6 Y@8 ~
>`.pickRestart({
  A: "[~@23 b3, d3@24 d5@4 d4@4 a4@16 e4@8 [a3,e5]@8 e4@4 c#5@4 [b2,g4,b4]@4 d3@4 g4@32 f#3@4 [f#4,d5]@4 [a2,e4,c#5]@4 c#3@4 [e3,c#4,a4]@4 a3@20 g3@20 g4@4 d4@15 ~, a4@2 a3 d4 a3 f#5@4 a3 d4@5 c#4@5 g3@2 b3@3 d3@9 f#4@5 b3 d4 g4 a4@6, ~@4 f#3@41 ~@3 [c#3,a4]@45 ~@3 b2@46 ~@2 [g2,b4]@47 ~, ~@8 e5@37 ~@7 e3@41 ~@3 [f#4,d5]@8 [f#3,e4,c#5]@4 b3@34 ~@2 d4@4 d3@43 ~]/8", // A5 Em D A F#m G D F#7
  B: "[~@2 a3, [d3,f#3], a3@2 a3 d4@3, ~ e4@5, ~@3 d4@2 f#4@7]/2", // D
  C: "[~@3 [b2,d4]@3 ~@5 f#3, c#3@24 g3@40 f#3@8 [a2,c#4]@4 e3@4 a3@15 ~, a3@8 [a3,e4]@37 ~@7 f#3@4 c#4@12 d4@27 ~, ~@4 e3@41 ~@3 [b2,f#4]@47 ~, ~@20 c#4@25 ~@3 d4@12 b3@35 ~]/4", // Bm A A5 B5
  D: "[~@5 b3, g2@32 d4@4 g3@11 ~, b3@12 b3@16 g4@19 ~, ~@4 d3@43 ~, ~@8 g3@8 d4@4 g4@4 a4@23 ~]/2",
  E: "[~@6 [b2,d4]@6 ~@23 e4, c#3@6 g3@10 f#3@2 [a2,c#4] e3 a3@2 f#3@5 b3 d4 g4 a4 g4 d4@2 b3@2, a3@4 [a3,e4]@19 ~@3 f#3@2 c#4@6 d4@13 ~@3 d3@21 ~, ~@2 e3@21 ~ [b2,f#4]@23 ~ g2@23 ~, ~@10 c#4@13 ~ d4@6 b3@17 ~ b3@4 g3@19 ~]/6", // Bm A A5 B5
  F: "[[e3,g3,b3,e4] [e3,g3,b3] ~@2 [e3,g3] ~ [b2,f#3]!3 [b2,f#3]!2 a3 [d3,f#3,a3]!2 [d3,f#3,a3,d4], ~@2 e4@4 e4@5 e4@3 e4@4 b3@4 ~@8, ~@16 [e3,g3,b3]@8 [e3,g3]@8 ~@8 [e3,g3]@47 ~ [c#3,c#4]@31 ~, ~@20 d4@26 ~@2 f#4@39 ~@33, ~@26 b3@20 ~@2 d4@16 d4@23 ~@9 d4@16 ~@8]/5", // Em B5 D Em C#
  G: "[[a2,e3]@2 [a2,e3]@2 c#4@2 b3 ~ g2@2 g2@2 g2@2 g2@2 g2@2 g2@2 g2@2 g2@2, c#4@16 [a2,e3]@31 ~@49, ~@8 d4@39 ~@49, ~@24 c#4@23 ~ [a3,c#4,e4]@46 ~@2, ~@6 g2 b3@11 [b3,d4,g4]@6]/4", // A5 A G
  H: "[[g2,b3,d4]@4 [g2,b3,d4]@4 ~@8 [a2,d3,d4,f#4]@4 f#4@2 ~@6 [a2,d3,d4,f#4]@4 [d4,f#4]@2 d4 ~@5 [c#3,f#3,c#4,f#4]@4 b4@4 ~@4 [c#3,f#3,c#4,f#4]@4 ~@8 [d3,g3,b3,d4]@4 ~@8 [d3,g3,b3]@4 ~@2 g4@2, ~@4 f#4@12 ~@6 f#4@2 a4@11 ~ a4@12 b4@8 f#4@4 g2@4 g4@16 [d3,g3,b3,f#4]@4, ~@16 [g2,b3,g4]@48 ~@8 f#2@16 [c#3,f#3,c#4,f#4]@12 a4@20 a4@47 ~, ~@2 d4@2 ~ [a2,d3,d4]@2 ~ [a2,d3]@6 [c#3,f#3,c#4]@3 [d3,g3,b3,d4] [g2,e4]@3, ~@24 [d2,a4]@24 d2@48 f#2@40 f#4@16 d4@15 ~]/7", // G D F#5 G Gmaj7 G F#5 D5 …
  I: "[~@2 [e3,g3,c4]@2 f#4@2 ~@2 [e3,g3]@2 ~ d4, a4@13 e4 d4@6 [e3,g3]@4, c3@16 c4@31 ~, ~@8 g4@39 ~, ~ e4 [e3,g3] [c3,f#4]@3]/2", // C Em Cdim
  J: "[~@8 [a2,d3,d4,f#4]@8 f#4@4 ~@12 [a2,d3,d4,f#4]@8 [d4,f#4]@4 d4 ~@11 [c#3,f#3,c#4,f#4]@8 b4@8 ~@8 [c#3,f#3,c#4,f#4]@8 [c#3,f#3,c#4,f#4]@8, [d2,a4]@3 d2@5 [c#3,f#3,c#4,f#4]@2 ~@2, ~@2 [a2,d3,d4]@2 ~ [a2,d3]@6 ~, ~@5 f#4@3 ~@4 f#2@6 [f#2,b4]@6, ~@24 a4@21 ~@3 a4@28 a4@20]/4", // D F#5 D5 F#5 D5 B5
  K: "[~ [d3,g3,b3,d4] ~@2 [d3,g3,b3] ~ a4 ~@16 b3, a4@10 [d3,b3]@7 f#4@2 d4@7 e5@4 d5 d4 a4@4 e4@2 [a3,e5]@2 e4 c#5 [b2,g4,b4] d3 [g3,g4]@4, g2@8 [d3,g3,b3,d4]@4 g2@16 a4@19 ~ a4@4 a3@2 d4@2 a3@2 f#5@8 a3@2 d4@10 c#4@17 ~, ~@8 g4@24 d4@8 [g3,f#4]@8 [c3,e3,g3]@48 d3@45 ~@3 [c#3,a4]@46 ~@2, ~@16 f#4@8 e4@20 g4@28 e4@22 ~@6 f#3@41 ~@7 e3@42 ~@2]/8", // G A5 Em G Gmaj7 C F#m
  L: "[~@11 b3, b2@20 [f#4,d5]@4 [a2,e4,c#5]@4 c#3@4 [e3,c#4,a4]@4 a3@20 g3@20 g4@4 d4@15 ~, [f#4,d5]@2 f#3 b3@7 f#4@5 b3 d4 g4 a4@6, ~@4 d3@42 ~@2 [g2,b4]@47 ~, ~@8 [e4,c#5]@8 f#3@30 ~@2 d4@4 d3@43 ~]/4", // D A D G C#m
  M: "[~@2 a3, [d3,f#3]@47 ~, a3@16 a3@8 d4@23 ~, ~@8 e4@39 ~, ~@12 d4@8 f#4@27 ~]/2", // D
  N: "[~ [b2,g3,d4], c#3@23 ~, a3@4 [a3,e4]@19 ~, ~@2 e3@21 ~, ~@10 c#4@13 ~]/2", // G A5
  O: "[~@5 f#3, [b2,f#4]@28 e3@4 a3@15 ~, d4@16 f#3@8 [a2,c#4]@23 ~, ~@4 f#3@8 b3@35 ~, ~@8 c#4@12 d4@27 ~]/2", // B5 A
  P: "[~@5 a3, g2@8 d4 g3 b3@8 d4@6, b3@6 b3@8 g4@9 ~ a3@6 d4@2 a3@2 f#4@14, ~@2 d3@21 ~ [d3,f#3]@24, ~@4 g3@4 d4@2 g4@2 a4@11 ~@5 e4@20]/4", // D
  Q: "[~ [b2,g3,d4], c#3, a3 [a3,e4]@5, ~ e3@11, ~@5 c#4@7]/2", // G A5
  R: "[~@23 e4, [b2,f#4]@7 e3@5 b3 d3@6 g4 d4@2 b3@2, d4@8 f#3@4 [a2,c#4]@12 g2@23 ~, ~@2 f#3@4 b3@10 a3@12 g3@19 ~, ~@4 c#4@6 d4@10 f#3@10 b3@2 d4@2 g4@2 a4@11 ~]/4", // B5 A
  S: "[e3,g3,b3,e4]@2 [e3,g3,b3]@2 ~ d4, ~ e4@2, ~@2 [e3,g3,b3]", // Em
  T: "[~@2 [e3,g3]@2 ~@2 [b2,f#3]@2 [b2,f#3]@2 [b2,f#3]@2 [b2,f#3]@2 [b2,f#3]@2 a3@2 [d3,f#3,a3]@2 [d3,f#3,a3]@2 ~@2 [a2,e3]@2 [a2,e3]@2 c#4@2 b3 ~ g2@2 g2@2 g2@2 g2@2 g2@2 g2@2 g2@2 g2@2, e4@10 e4@6 e4@8 b3@8 ~@4 d4@8 [d3,f#3,a3]@15 ~ g2@4 ~@32, [e3,g3]@4 ~@4 [e3,g3]@23 ~ c#3@24 [a2,e3]@24 ~@16, ~ b3@10 ~ f#4@19 ~@13 d4@8 d4@7 ~@3 b3@21 ~ [b3,d4,g4]@12, ~@12 d4@8 d4@11 ~ c#4@16 c#4@8 ~@4 c#4@12 [a3,c#4,e4]@24]/8", // Em B5 D A5 D Em A5 G …
  U: "[[g2,b3,d4]@4 [g2,b3,d4]@4 ~@8 [a2,d3,d4,f#4]@4 f#4@2 ~@6 [a2,d3,d4,f#4]@4 [d4,f#4]@2 d4 ~@5 [c#3,f#3,c#4,f#4]@4 [c#3,f#3,c#4,f#4,b4]@4, ~@4 f#4@7 ~ [d2,a4]@12 d2@24, ~ [g2,b3,g4]@3 [a2,d3]@2, ~@8 d4@8 ~@4 [a2,d3,d4]@4 a4@11 ~@13, ~@11 f#4@3 ~@4 [f#2,a4]@6]/4", // G D F#5 F#sus4 D5 G D5 F#m
  V: "[~@2 [c#3,f#3,c#4,f#4]@2 ~@4 [d3,g3,b3,d4]@2 ~@4 [d3,g3,b3]@2 f#4 ~@3 [e3,g3,c4]@2 f#4@2 ~@2 [e3,g3]@2 ~ d4, f#2@4 g4@3 d4 [d3,b3]@3 [e3,g3] [c3,f#4]@3, b4@8 f#4@4 g2@8 [d3,g3,b3,d4,f#4]@4 g2@16 g4@9 e4 d4@6 [e3,g3]@4, ~@4 a4@20 a4@40 g3@8 a4@47 ~, ~@16 [c#3,f#3,c#4]@32 e4@20 g4@4 c3@8 e4@8 c4@31 ~]/5", // F#5 G C Em G Em Cdim Gmaj7 …
  W: "[~@8 [a2,d3,d4,f#4]@8 f#4@4 ~@12 [a2,d3,d4,f#4]@8 d4@4 d4@3 ~, [d2,a4] [d2,a4], ~@2 [a2,d3,d4]@2 ~ [a2,d3,f#4], ~@5 f#4@3 ~@4]/2", // D D5 D
  X: "[~@2 [c#3,f#3,c#4,f#4]@2 b4@2 ~@2 [c#3,f#3,c#4,f#4]@2 ~@4 [d3,g3,b3,d4]@2 ~@4 [d3,g3,b3]@2 f#4 ~ a4@2 ~@5 d4@5, a4@14 a4@10 a4@20 [d3,b3]@14 f#4@13 ~, f#2@3 f#2@4 g4@3 d4 g3 [c3,e3,g3]@6, ~@8 [c#3,f#3,c#4,f#4]@8 ~@4 [c#3,f#3,c#4]@12 [d3,g3,b3,d4]@4 g2@16 a4@19 ~, ~@12 b4@8 f#4@4 g2@8 f#4@4 e4@10 g4@14 e4@11 ~]/6", // F#5 G C F#5 G
  Y: "[~@11 d2, [d3,a4]@6 [d4,d5] a3 a4@4 c3@5 c4 d5 a3 a4@4 ~ g3@3 d3 f#5 [c3,d5] f#3 [a3,c5] d4 [e4,a#4]@5 a4@9, ~@2 f#3@14 d3@4 d4@12 a3@2 f#5@10 c4@8 a3@2 b3@17 ~ [f#4,a4]@4 d4@2 f#4@2 d5@16, ~@8 e5@37 ~@3 a4@8 c4@4 f#3@34 ~@2 [b2,a4]@46 ~@2 d3@20 e5@28, ~@8 a3@4 d4@4 a3@4 f#5@25 ~@7 f#3@4 e5@38 ~@10 e5@38 ~@6 a3@18 ~@2 [f#4,f#5]@24]/8", // D5 D Csus2 Am Edim F#m B7 F#
})).s("gm_piano").gain(0.4)

// bass · fretless bass · "Bass"
const bass = note("<~@34 A B@2 C D E F G H I J K L M N@2 ~@34 O P Q K R M S T P U@2 V W X Y@6 Z W AA@2 ~>".pickRestart({
  A: "d2@7 a1", B: "[d2@19 a1@2 g1@2 f#1@23 ~@2]/2", C: "~ f#1@22 ~", D: "~ g1@17 ~@2 g1@2 ~@2", E: "g1@16 a1@3 b1@5",
  F: "c2@11 ~", G: "c2@4 a1 g1", H: "~ d2@20 ~ d2 ~", I: "d2@10 g#1 g1", J: "f#1@20 ~@2 f#1 ~", K: "f#1@7 ~ f#1@4",
  L: "g1@7 ~", M: "~ g1@15 a1@4 b1@4", N: "[c2@13 ~@3]/2", O: "~ d2@20 a1@3", P: "d2", Q: "f#1@7 d2", R: "g1@23 ~",
  S: "~ c2@23", T: "c1", U: "[~ d2@19 e2@3 f#2@17 c#2@8]/2", V: "f#1", W: "g1", X: "~ d2@16 g1@7",
  Y: "[c2@49 d2@47 c2@48]/6", Z: "b1", AA: "[d2@5 ~]/2",
})).s("gm_fretless_bass").gain(0.36)

// drums · kick
const kick = s("bd").struct("<~@34 A ~ A ~ A B A ~ A ~ A ~ A ~ A ~@35 A ~ A ~ A B A ~ A ~ A ~ A ~ A ~@10>".pickRestart({
  A: "x", B: "~@5 x",
})).gain(0.45)

// drums · snare
const snare = s("sd").struct("<~@35 A ~ A ~ A ~ A ~ A ~ A ~ A ~@37 A ~ A ~ A ~ A ~ A ~ A ~ A ~@11>".pickRestart({
  A: "x",
})).gain(0.45)

// drums · low tom
const low_tom = s("lt").struct("<~@33 [~@4 x!2] ~@49 [~@2 x ~ x!2] ~@25>").gain(0.45)

// drums · mid tom
const mid_tom = s("mt").struct("<~@33 [~ x!2 ~@3] ~@49 [~ x ~@4] ~@7 [~@4 x!2] ~@17>").gain(0.45)

// drums · high tom
const high_tom = s("ht").struct("<~@33 x ~@7 [~@4 x!2] ~@41 x ~@25>").gain(0.45)

// drums · crash
const crash = s("cr").struct("<~@34 A ~@7 A ~@5 A ~@35 A ~@7 A ~@5 A ~@10>".pickRestart({
  A: "x",
})).gain(0.45)

// drums · ride
const ride = s("rd").struct("<~@34 A@7 B A@6 C ~@35 A@7 B A@6 C ~@10>".pickRestart({
  A: "x!3", B: "x!2 ~", C: "x",
})).gain(0.4)

stack(piano, bass, kick, snare, low_tom, mid_tom, high_tom, crash, ride)

More by Journey