Strudelify
KeyB♭ majorTempo80 bpm
0:00/0:00
// memory — Andrew Lloyd WebberVariation
// 80 bpm, 12/8, 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: metre changes (12/8 at bar 1, 10/8 at bar 16, 12/8 at bar 17, 10/8 at bar 24, ...) are rendered on a constant 12/8 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/5954393; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 44 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(80/6)

// 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("<~@9 A B C@5 D@8 E@8 F G H I J K L M@5>".pickRestart({
  A: "~@7 f3 d4@2 f3 d4, ~ bb2", B: "~ f3 d4@2 f3 d4 ~ f3 d4@2 f3 d4, bb2!2",
  C: "[~@2 f3@2 d4@4 f3@2 d4@2 ~@2 f3@2 ~@4 f3@2 d4@2 ~@2 [f3,a5]@2 bb5@2 c6@2 [f3,bb5]@2 [d4,g5]@2 ~@2 d3@2 ~@4 d3@2 bb3@2 ~@2 [d3,a5]@2 bb5@2 c6@2 [d3,bb5]@2 ~ f5 ~@2 bb2@2 ~@4 bb2@2 g3@2 ~@2 [bb2,eb5]@2 f5@2 g5@2 [bb2,f5]@2 [g3,eb5]@2 ~@2 a2@2 f3@4 a2@2 f3@2 ~@2 a2@2 f3@2 a3@2 f3@2 [d3,f5]@2 ~@2 eb3@2 g3@2 c4@2 g3@2 [eb3,d5]@2, bb2!2 bb2 g2 g2 eb2 eb2 d2 d2 ~, ~@12 bb5@6 bb5@8 ~@10 bb5@6 bb5@8 ~@10 g5@6 g5@8 ~@10 d5@17 ~ d5@4 ~@2 f5@6 c5@4 ~@2, ~@8 d4@2 ~@4 d4@2 ~@4 bb3@2 ~@4 bb3@2 ~ bb3 ~@2 g3@2 ~@4 g3@2 ~@14 c3@6]/5", // F Bb5 G5 D5 Gm Eb5 Bb5 Cm …
  D: "[eb5@2 [g3,f5]@2 [c4,g5]@2 [g3,a5]@2 bb5@2 [d3,a5]@2 [g3,g5]@2 bb3@2 g3@2 d3@2 ~@2 d3@2 g3@2 d5@4 bb4@2 ~@2 c3@2 f3@2 a3@2 c4@2 f4@2 ~@4 g4@2 g4@4 bb4@2 ~@2 f3@2 d4@4 f3@2 d4@2 ~@2 f3@2 d4@4 f3@2 d4@2 ~@2 f3@2 ~@4 f3@2 d4@2 ~@2 [f3,a5]@2 bb5@2 c6@2 [f3,bb5]@2 [d4,g5]@2 ~@2 d3@2 ~@4 d3@2 bb3@2 ~@2 [d3,a5]@2 bb5@2 c6@2 [d3,bb5]@2 ~ f5 ~@2 bb2@2 ~@4 bb2@2 g3@2 ~@2 [bb2,eb5]@2 f5@2 g5@2 [bb2,f5]@2 [g3,eb5]@2 ~@2 a2@2 f3@4 a2@2 f3@2 ~@2 a2@2 f3@2 a3@2 f3@2 [d3,f4]@2 ~@2 eb3@2 g3@2 ~@2 g3@2 [eb3,d4]@2 eb4@2 [g3,f4]@2, c3@2 g2@3 g2@3 [f2,a4,c5]@3 [f3,g3,bb3]@3 [bb2,bb4]@3 bb2@3 bb2@3 bb2@3 g2@3 g2@3 eb2@3 eb2@3 d2@3 d2@3 ~@4, ~@14 f5@11 ~ bb3@6 ~ f5@11 ~ eb4@11 ~@24 [d5,f5]@6 [d5,f5]@8 ~@10 [d5,g5]@6 [d5,g5]@8 ~@10 [bb4,eb5]@6 [bb4,eb5]@8 ~@10 [f4,a4,d5]@18 d4@4 ~@2 f4@6 c4@4 ~@6, ~@81 bb5@5 ~ bb5@7 ~@11 bb5@5 ~ bb5@7 ~@11 g5@5 ~ g5@7 ~@50, ~@42 d4@2 ~@4 d4@2 ~@4 bb3@2 ~@4 bb3@2 ~ bb3 ~@2 g3@2 ~@4 g3@2 ~@14 c3@6 c3@2]/8", // G7 C5 Gsus2 D5 G F Bb5 G5 …
  E: "[[c4,g4]@2 [g3,a4]@2 bb4@2 [d3,a4]@2 [g3,g4]@2 bb3@2 g3@2 d3@2 ~@2 d3@2 g3@2 d5@4 bb4@2 ~@2 c3@2 f3@2 a3@2 c4@2 f4@2 ~@4 g4@2 g4@4 bb4@2 ~@2 f3@2 d4@4 f3@2 d4@2 ~@2 f3@2 d4@4 f3@2 d4@2 ~@2 f3@2 ~@4 f3@2 d4@2 ~@2 [f3,a4]@2 bb4@2 c5@2 [f3,bb4]@2 [d4,g4]@2 ~@2 d3@2 ~@4 d3@2 bb3@2 ~@2 [d3,a4]@2 bb4@2 c5@2 [d3,bb4]@2 ~ f4 ~@2 bb2@2 ~@4 bb2@2 g3@2 ~@2 [bb2,eb4]@2 f4@2 g4@2 [bb2,f4]@2 [g3,eb4]@2 ~@2 a2@2 f3@4 a2@2 f3@2 ~@2 a2@2 f3@2 a3@2 f3@2 [d3,f4]@2 ~@2 eb3@2 g3@2 ~@2 g3@2 [eb3,d4]@2 eb4@2 [g3,f4]@2 [c4,g4]@2 [g3,a4]@2, ~ g2@3 g2@3 [f2,a4,c5]@3 [f3,g3,bb3]@3 [bb2,bb4]@3 bb2@3 bb2@3 bb2@3 g2@3 g2@3 eb2@3 eb2@3 d2@3 d2@3 ~@5, ~@10 f4@11 ~ bb3@6 ~ f5@11 ~ eb4@11 ~@24 bb4@6 bb4@8 ~@10 bb4@6 bb4@8 ~@10 g4@6 g4@8 ~@10 d4@17 ~ d4@4 ~@2 f4@6 c4@4 ~@10, ~@40 d4@2 ~@4 d4@2 ~@4 bb3@2 ~@4 bb3@2 ~ bb3 ~@2 g3@2 ~@4 g3@2 ~@14 c3@6 c3@4]/8", // C5 Gsus2 D5 G F Bb5 G5 D5 …
  F: "bb4 [d3,a4] [g3,g4] bb3 g3 d3 ~ d3 g3 d5@2 bb4, g2!2, ~@6 f4@11 ~ bb3@6", // D5 G
  G: "~ c3 f3 a3 c4 f4 ~@2 g4 g4@2 bb4, [f2,a4,c5] [f3,g3,bb3], ~ f5@11 ~ eb4@11", // F Gm7
  H: "~ f3 d4@2 f3 d4 ~ f3 d4@2 f3 d4, [bb2,bb4] bb2", // Bb
  I: "~ f3 ~@2 f3 d4 ~ [f3,a4] bb4 c5 [f3,bb4] [d4,g4], bb2!2, bb4@3 bb4@4 ~@5, ~ d4 ~@2 d4 ~", // F Bb5 G5
  J: "~@2 d3@2 ~@4 d3@2 bb3@2 ~@2 [d3,a4]@2 bb4@2 c5@2 [d3,bb4]@2 ~ f4, g2!2, bb4@3 bb4@4 ~@5, ~@2 bb3@2 ~@4 bb3@2 ~ bb3", // D5 Gm
  K: "~ bb2 ~@2 bb2 g3 ~ [bb2,eb4] f4 g4 [bb2,f4] [g3,eb4], eb2!2, g4@3 g4@4 ~@5, ~ g3 ~@2 g3 ~", // Eb5 Bb5 Cm
  L: "~ a2 f3@2 a2 f3 ~ a2 f3 a3 f3 [d3,f4], d4@17 ~ d4@4 ~@2, d2!2", // Dm
  M: "[~@2 eb3@2 g3@2 ~@2 g3@2 [eb3,d4]@2 eb4@2 [g3,f4]@2 [c4,g4]@2 [g3,a4]@2 bb4@2 [d3,a4]@2 [g3,g4]@2 bb3@2 g3@2 d3@2 ~@2 d3@2 g3@2 d5@4 bb4@2 ~@2 c3@2 f3@2 a3@2 c4@2 f4@2 ~@4 g4@2 g4@4 ~ bb4@2 ~ [d3,f3]@32 ~@18, c3@12 c3@8 g2@12 g2@12 [f2,a4,c5]@12 [f3,g3,bb3]@13 bb2@32 ~@19, f4@6 c4@4 ~@16 f4@11 ~ bb3@6 ~ f5@11 ~ eb4@12 bb4@30 ~@21]/5", // Ebmaj7 G7 C5 Gsus2 D5 G Dm F …
})).s("gm_piano").gain(0.25)

stack(piano)