Strudelify

Journey's End

Christopher Wu

KeyB♭ majorTempo115 bpm
0:00/0:00
// Journey's End — Christopher Wu
// 115 bpm, 4/4, key Bb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Transcription provider: pdmx. https://musescore.com/score/5986764; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 70 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(115/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 E F G H E F I J E F I J E F G H E F G H E F I J E F I J E F G J K L M N O P Q R S T U V W X Y Z ~@8 AA@7 AB@3
>`.pickRestart({
  A: "~@5 f4 [a2,a3,f4,a4,c5,d5]@2, [bb2,bb3], [bb4,d5]!2 bb4@2, ~ f4@2 f4@2 ~@3, ~@2 d5 ~", // Dm7 Bb
  B: "~@3 [f2,f3,f4,a4,c5], [g2,g3], [bb4,d5]!2 [bb4,d5]@2, ~ g4@2 g4@2 g4@3", // F G Bb
  C: "~@7 eb4, [eb2,eb3], [g4,bb4]!4, ~ eb4@2 eb4@2 eb4@2 ~", // Eb Gm
  D: "f4@3 ~@11 [c5,f5]@10, [f2,f3], c5@9 c5@5 ~@10, a4@6 a4@7 a4@11, ~ f4@3 f4@4", // F5 F
  E: "~@5 f4 c5 [g4,c5], [bb2,bb3], [bb4,d5]!2 bb4@2, ~ f4@2 f4@2 ~ [a2,a3,f4,a4,d5]@2, ~@2 d5 ~", // C5 Bb Dm
  F: "~@7 bb4, [g2,g3], [bb4,d5]!2 d5@2, ~ g4@2 g4@2 g4@3, ~@2 bb4 [f2,f3,f4,a4,c5]", // G Bb F
  G: "~@7 f4, [eb2,eb3], [g4,bb4]!4, ~ eb4@2 eb4@2 eb4@3", // Eb Gm
  H: "f4 ~@2 c5!2 ~@2 f4, [f2,f3], c5@3 ~ f5@4, a4@2 a4@2 a4 c5@3, ~ f4@3 f4@2 a4@2", // F
  I: "~@7 c5, [eb2,eb3], [eb5,g5]!4, ~ bb4@2 bb4@2 bb4@3", // Eb
  J: "f4 ~@2 c5 ~@3 [c5,f5], [f2,f3], c5@3 ~ [c5,f5]@3 ~, a4!2 ~ eb5, ~ f4@3 [f4,a4]@4", // F5 F F5 F
  K: "[f4,bb4,d5]@3 [f4,bb4,d5]@3 [f4,bb4,d5]@3 [f4,bb4,d5]@3 [f4,bb4,d5]@3 [f4,bb4,d5]@3 d5 c5 ~ bb4 g4 ~, [bb2,bb3]@17 ~ [a2,a3]@6", // Bb A
  L: "[bb4,d5]@3 c5 bb4 ~ [bb4,d5]@3 c5 bb4 ~ [bb4,d5]@3 f5 d5 ~ [f4,a4,c5]@3 bb4@3, [g2,g3]@17 ~ [f2,f3]@6", // Bb F G F
  M: "g4 eb4 ~ g4 bb4 ~ bb4 g4 ~ bb4 eb5 ~ eb5 bb4 ~ eb5 g5 ~ g5 eb5 ~ g5 bb5 ~, [eb2,eb3]@23 ~", // Eb
  N: "[f4,a4,c5]@3 f4@3 a4@3 c5@3 [f4,a4,c5,f5]@3 f5 d5 ~ eb5 c5 ~ d5 bb4 ~, [f2,f3]@23 ~", // F
  O: "[f4,bb4,d5]@3 [bb4,d5,f5]@3 [f4,bb4,d5]@3 [f4,bb4,d5]@3 [f4,bb4,d5]@3 [f4,bb4,d5]@3 f5 d5 ~ c5 bb4 ~, [bb2,bb3]@17 ~ [a2,a3]@6", // Bb A
  P: "[bb4,d5]@3 f5 d5 ~ [bb4,d5]@3 c5 bb4 ~ [bb4,d5]@3 f5 d5 ~ [f4,a4,c5]@3 bb4@3, [g2,g3]@17 ~ [f2,f3]@6", // Bb F G F
  Q: "g4@3 g4 bb4 ~ bb4@3 bb4 eb5 ~ eb5@11 ~, [eb2,eb3]@23 ~", // Eb
  R: "bb4 eb5 ~ g5!2 ~ eb5 g5 ~ bb5 c5 ~ [f4,a4,c5]@11 ~, [f2,f3]@23 ~", // F
  S: "[g4,bb4,d5] ~@2 [g4,bb4,d5]@3 [g4,bb4,d5]@3 [g4,bb4,d5] ~@2 [g4,bb4,d5]@3 [g4,bb4,d5]@3 [f2,f3,f4,a4,c5]@6, [g2,g3]@17 ~@7", // Gm F G
  T: "[eb4,g4,bb4] ~@2 [eb4,g4,bb4]@3 [eb4,g4,bb4]@3 [eb4,g4,bb4] ~@2 [eb4,g4,bb4]@3 [eb4,g4,bb4]@3 [d2,d3,d4,f4,a4]@6, [eb2,eb3]@17 ~@7", // Eb Dm Eb
  U: "[c4,eb4,g4] ~@2 [c4,eb4,g4]@3 [c4,eb4,g4]@3 [c4,eb4,g4] ~@2 [c4,eb4,g4]@3 [c4,eb4,g4]@3 [bb1,bb2,bb3,d4,f4]@6, [c2,c3]@17 ~@7", // Cm Bb C
  V: "[c4,f4,a4]@3 c4 f4 ~ a4 f4 ~ a4 c5 ~ a4 c5 ~ f5 c5 ~ f5 a5 ~ c6@3, [f2,f3]@23 ~", W: "[g4,bb4,d5]@3 [f4,a4,c5]",
  X: "[eb4,g4,bb4]@3 [d4,f4,a4]", Y: "[c4,eb4,g4] [bb3,d4,f4]", Z: "[f2,f3,c4,f4,a4]",
  AA: "[~@14 [f2,f3,a4,c5,f5]@3 [eb2,eb3,a4,c5,f5]@3 [f2,f3,a4,c5,f5]@3 ~@15 f4@3 c5@3 [g4,c5]@3 ~@21 bb4@3 ~@21 f4@3 f4@3 ~@6 c5@3 c5@3 ~@6 f4@3 ~@15 f4@3 c5@3 [g4,c5]@3 ~@21 bb4@3 [eb2,eb3,eb5,g5], ~@23 [bb2,bb3]@24 ~@12 bb4@6 [f2,f3,f4,a4,c5]@6 [eb2,eb3]@24 [f2,f3]@24 [bb2,bb3]@24 ~@12 bb4@6 [f2,f3,f4,a4,c5]@6 ~, ~@23 [bb4,d5]@6 [bb4,d5]@6 bb4@12 [bb4,d5]@6 [bb4,d5]@6 d5@12 ~@3 eb4@6 eb4@6 eb4@9 a4@6 a4@6 a4@3 c5@9 ~@3 f4@6 f4@6 ~@3 [a2,a3,f4,a4,d5]@6 [g2,g3]@24 ~, ~@26 f4@6 f4@6 ~@3 [a2,a3,f4,a4,d5]@6 [g2,g3]@24 ~@27 f4@9 f4@6 a4@6 [bb4,d5]@6 [bb4,d5]@6 bb4@12 [bb4,d5]@6 [bb4,d5]@6 d5@12 ~, ~@35 d5@6 ~@9 g4@6 g4@6 g4@9 [g4,bb4]@6 [g4,bb4]@6 [g4,bb4]@6 [g4,bb4]@6 c5@9 ~@3 f5@12 ~@12 d5@6 ~@9 g4@6 g4@6 g4@9 ~]/7", // F F7 F C5 Eb Bb F Eb …
  AB: "[~@20 bb4@3 [f2,f3,a4,c5,f5]@24 [bb1,bb2]@24 ~, ~ bb4@3 bb4@3 bb4@3 ~@26, ~@5 [eb5,g5]@6 [eb5,g5]@6 [eb5,g5]@6 ~@49]/3", // F Bb Eb
})).s("gm_piano").gain(0.2)

stack(piano)