Strudelify

Suite Polonaise No.1 Op.23

Felix Blumenfeld

KeyE♭ majorTempo116 bpm
0:00/0:00
// Suite Polonaise No.1 Op.23 — Felix Blumenfeld
// 116 bpm, 2/4, key Eb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/6253463; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 99 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(116/2)

// 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 · "Grand Piano"
const piano = note(`<
  ~@7 A B@5 C D ~ E ~@4 F@6 G H I J K@8 L@2 M@2 ~@2 N ~ N ~@14 O P ~@3 Q R S ~ T ~@3 U V@2 W X Y Z AA AB AC@2 AD@2 AE AF
  ~@9
>`.pickRestart({
  A: "~@13 [f3,bb3,d4,ab4,bb4,bb5]@3", // Bb7
  B: "[~ [bb1,bb2,bb3]@2 ~@2 [eb4,eb5]@4 eb6@4 ab5@4 c6@4 bb5 ~ c6 bb5 f5@2 ab5@2 [d4,bb4,g5]@4 [c4,ab4,d5]@4 [bb3,g4,eb5]@4 [eb3,eb6]@4 ab5@4 c6@4 bb5 ~ c6 bb5 f5@2 ab5@2 [d4,bb4,g5]@4 [c4,ab4,bb4]@4 eb5@2 f5@2 [c4,eb4,g4,c5,eb5,g5]@7, ~@5 [eb2,bb2,g3]@8 [ab3,eb4,f4]@8 eb4@16 ~@16 eb4@16 ~@11, ~@21 [bb3,g4]@4 [c4,ab4]@4 ~@16 [ab3,eb4,f4]@8 [bb3,g4]@4 [c4,ab4]@4 ~@8 [eb3,bb3,g4]@4 ~@7]/5", // Bb Eb Gm Dm7b5 Eb Gm Fm Cm …
  C: "~ [g3,d4,g4,bb4,d5,g5,bb5]@4 eb5@2 f5@2 [c4,eb4,g4,c5,eb5,g5]@7, ~@5 [eb4,g4]@4 ~@7", // Gm Cm Eb
  D: "~ [c4,eb4,g4,a4,eb5,g5,a5]@4 [g2,d3,b3,b4,d5,g5,b5]@2 ~@2 [d3,b3,g4,d5,g5]@6 ~", // Am7b5 G
  E: "~@5 [g2,d3,b3]@2 ~@2 [g4,d5,g5]@6 ~", // G G5
  F: "[~@7 [a4,c5]@2 [d3,bb3,g4,bb4,g5]@4 bb4@2 [a4,c5]@2 [d3,bb3,g4,bb4,g5]@4 g4@2 f4@2 [eb5,eb6]@4 ab5@4 c6@4 [eb3,bb5] ~ c6 bb5 f5@2 ab5@2 [d4,bb4,g5]@4 [c4,ab4,d5]@4 [bb3,g4,eb5]@4 [eb3,eb6]@4 ab5@4 c6@4 bb5 ~ c6 bb5 f5@2 ab5@2 [d4,bb4,g5]@4 [c4,ab4,bb4]@4 eb5@2 f5@2 [c4,eb4,g4,c5,eb5,g5]@7, ~@13 [g2,d3,d5]@4 ~@4 [eb2,bb2,g3,bb4,eb5]@4 eb4@12 ~ eb4@15 ~@16 eb4@16 ~@11, ~@29 [ab3,f4]@8 [bb3,g4]@4 [c4,ab4]@4 ~@16 [ab3,f4]@8 [bb3,g4]@4 [c4,ab4]@4 ~@8 [eb3,bb3,g4]@4 ~@7]/6", // Am Gm Am Gm Eb Eb5 Gm Dm7b5 …
  G: "~ [g3,d4,g4,bb4,d5,g5,bb5]@4 [c5,eb5,g5]@2 a5@2 [g3,d4,g4,bb4,d5,g5,bb5]@7, ~@5 [c4,eb4,g4]@4 ~@7", // Gm Cm Gm Cm
  H: "~ [eb3,g3,c4,eb4,c5,g5,c6]@4 [d5,g5,bb5]@2 c6@2 [d3,g3,bb3,d4,d5,g5,bb5,d6]@7, ~@5 [eb3,g3,bb3,eb4]@4 ~@7", // Cm Gm Eb
  I: "~ [c3,g3,bb3,c4,eb5,g5,bb5,eb6]@4 [d3,g3,bb3,d4,d5,g5,bb5,d6]@4 [c3,g3,bb3,c4,eb5,g5,bb5,eb6]@4 [f3,c4,eb4,f4,c5,f5,bb5,c6]@3", // Cm7 Gm Cm7 Fsus4
  J: "~ [f4,a4,c5,eb5,f5,a5,c6,f6]@4 [f3,bb3,d4,bb4,d5,bb5]@4 [bb2,bb3,bb5,bb6]@4 [bb2,f3]@2 bb5", // F7 Bb Bb5
  K: "[~ [f3,c4,c6,eb6]@2 g6@2 [d6,f6] g6 f6@2 [f3,d4,c6,eb6]@2 [bb5,d6]@2 [bb2,f3,a5]@2 g5@2 [f5,f6]@4 [bb2,f3,bb4]@4 [bb4,d5,bb5]@2 ~@4 bb4@2 [c5,eb5]@2 g5@2 [d5,f5] g5 f5@2 [c5,eb5]@2 [bb4,d5]@2 a4@2 g4@2 [f3,eb4,f4,f5]@4 [d5,f5] g5 f5@2 [c5,eb5]@2 [bb4,d5]@2 a4@2 g4@2 [f3,eb4,f4,f5]@4 [d5,f5] g5 f5@2 [c5,eb5]@2 [bb4,d5]@2 a4@2 g4@2 [f3,eb4,f4,f5]@4 d5@2 c5@2 [f3,d4,bb4,bb5]@4 d5@2 c5@2 [f3,d4,bb4,bb5]@4 d5@2 c5@2 [f3,d4,bb4,bb5]@4 d5@2 c5@2 [f3,d4,bb4,bb5]@4 [c5,eb5]@2 bb4@2 [f3,ab3,c4,eb4]@4 ~@3, ~@5 [bb2,f3]@2 ~@6 c6@4 [f3,eb4]@2 ~@6 [f3,d4]@4 [bb2,f3]@4 [f3,c4]@4 [bb2,f3]@4 [f3,d4]@4 [bb2,f3,c5]@4 ~@4 [bb2,f3]@4 [f3,d4]@4 [bb2,f3,c5]@4 ~@4 [bb2,f3]@4 [f3,d4]@4 [bb2,f3,c5]@4 ~@4 [bb2,f3,f5]@4 ~@4 [bb2,f3,f5]@4 ~@4 [bb2,f3,f5]@4 ~@4 [bb2,f3,f5]@4 ~@4 [f1,f2]@4 [ab4,c5,eb5,ab5]@2 ~@5]/8", // F7 Dm F7 Bb Bbmaj7 F Bb5 Bb …
  L: "[~ [eb5,g5]@2 [d5,f5]@2 [db5,e5]@2 [d5,f5]@2 [eb5,g5]@2 [d5,f5]@2 eb5 [eb5,f5] [b4,d5]@2 [c5,eb5]@2 [ab4,c5]@2 ~@11, ~@13 c5@2 ~@17]/2", // Eb Dm Dbm Dm Eb Dm Ebsus2 Bm …
  M: "[~@11 [eb5,c6]@2 [bb2,bb3,f5,d6]@2 [gb5,c6]@2 [g3,eb4,g5,bb5]@2 eb6@2 [c5,d5]@2 bb4@2 [d3,f3,c4,d4,ab4,c5,ab5]@4 ~@3, ~@21 [f1,f2]@4 ~@7]/2", // Cm Bb Gbdim Eb Csus2 Dm7b5 F
  N: "d3 ~@3", O: "~@4 [f3,bb3,d4,ab4,bb4,bb5]@2 [bb1,bb2,bb3] ~", P: "[eb4,eb5] eb6 ab5 c6, [eb2,bb2,g3] [ab3,eb4,f4]",
  Q: "~@6 [bb4,d5,g5,bb5] ~, ~@3 [g3,d4,g4]", // Gm G5
  R: "[c5,eb5,g5] a5 [g3,d4,g4,bb4,d5,g5,bb5]@4 [eb3,g3,a3,eb4,c5,g5,a5,c6]@2, [c4,eb4,g4] ~@3", // Cm Gm Am7b5 Cm
  S: "[d3,gb3,a3,d4]@2 ~ d6 ~@4, [d5,gb5,a5,d6] ~ d5@2 ~@4, ~@5 [gb5,a5]@3 ~@8", // D Gbm
  T: "~@3 d5 ~@4, ~ d4 ~@2, ~@5 [gb4,a4]@3 ~@8", // Gbm
  U: "~@2 [a2,d4,gb4]@2 g4 [d4,a4] [a2,bb3,g4,d5]@2, ~@2 d5 ~ [d2,a2,bb4]@2 ~@2", // D D5 Gm Bbmaj7
  V: "b4 [a4,c5] [d3,g4,b4,g5]@2 c5 [g4,d5] [d3,eb4,c5,g5]@2, [g2,d3,d5] ~ [g2,d3,eb5] ~", // Am G G5 Cm G5 Ebmaj7
  W: "c5 [bb4,d5] [f3,ab3,c4,eb4,ab4,c5,ab5]@2 [eb5,g5] [d5,f5] [f3,ab3,c4,eb4,c5,eb5,c6]@2, [f2,f3,eb5] ~ ab5 ~", // Bb Fm7 Eb Dm Fm7 F7
  X: "ab5 [g5,bb5] [c4,eb4,f4,ab4,f5,ab5,eb6]@2 c6 [bb5,d6] [f4,ab4,c5,eb5,ab5,c6,f6]@2, c6 ~ eb6 ~", // Gm Fm7 Bb Fm7
  Y: "c6 [bb5,d6] [f4,f5,ab5,c6,ab6]@2 c6 [bb5,d6] [c4,c5,ab5,c6,ab6]@2, eb6 ~ [eb4,eb5,eb6] ~", // Bb Fm Bb Fm Eb
  Z: "c6 [bb5,d6] [c3,c4,ab5,c6,ab6]@2 d6 [c6,eb6] [bb1,bb2,bb5,d6,bb6]@2, [f3,f4,eb6] ~ [f2,f3,f6] ~", // Bb Fm Cm Bb F7 F
  AA: "[eb2,bb2,g6,bb6] [f6,ab6] [bb2,g3,g6,eb7] eb6 [eb2,bb2,d6,f6] [c6,eb6] [bb2,ab3,bb5,d6] bb6", // Eb Fm Eb Bb Cm Bb7
  AB: "[eb2,bb2,g5,bb5] [f5,ab5] [bb2,g3,g5,eb6] eb5 [eb2,bb2,d5,f5] [c5,eb5] [bb2,ab3,bb4,d5] bb5", // Eb Fm Eb Bb Cm Bb7
  AC: "[eb2,bb2,g4,bb4] [f4,ab4] [bb2,g3,g4,eb5] eb4 [eb2,bb2,d4,f4] [c4,eb4] [bb2,ab3,bb3,d4] bb4", // Eb Fm Eb Bb Cm Bb7
  AD: "[eb2,bb2,g4,bb4] [f4,ab4] [bb2,g3,g4,eb5] eb4 [eb2,bb2,g4,bb4] [f4,ab4] [bb2,g3,g4,eb5] eb4", // Eb Fm Eb Fm Eb
  AE: "[eb2,bb2,g4,bb4] [f4,ab4] [bb2,g3] ~ [c2,g2] ~ [g2,eb3,eb4,g4,c5] ~, ~ [eb4,g4,bb4]@2 ~", // Eb Fm Eb C5 Cm Eb
  AF: "[eb2,bb2,g4,bb4] [f4,ab4] [bb2,g3] ~ [c2,g2] ~@3, ~ [eb4,g4,bb4]@2 ~", // Eb Fm Eb C5 Eb
})).s("gm_piano").gain(0.3)

// chords · piano · "Grand Piano" · soft notes
const piano_soft = note(`<
  A B C B D@2 E@2 ~@6 F@8 ~@18 G@2 ~ H I J@2 K@4 L@2 M@2 N@8 ~ O P Q R ~ S T U V@2 W X ~@13 Y Z@6 AA@3
>`.pickRestart({
  A: "~@5 g4@4 g5@4 c5@3", B: "~ eb5@4 d5 ~ eb5 d5 a4@2 c5@2 bb4@3", C: "~ d4@4 g4@4 g5@4 c5@3", D: "~ d4@4 g4@8 bb4@3",
  E: "[~ d4@4 g4@23 ~@4]/2",
  F: "[~@15 g4@2 [a4,c5]@2 eb5@2 [b4,d5] ~ eb5 d5 [a4,c5]@2 [g4,b4]@2 gb4@2 [e4,g4]@2 [d3,c4,d4,gb4,d5]@4 g4@4 [d3,b3]@4 ~@2 g4@2 [a4,c5]@2 eb5@2 [b4,d5] ~ eb5 d5 [a4,c5]@2 [g4,b4]@2 gb4@2 [e4,g4]@2 [d3,c4,d4,gb4,d5]@4 [b4,d5] ~ eb5 d5 [a4,c5]@2 [g4,b4]@2 gb4@2 [e4,g4]@2 [d3,c4,d4,gb4,d5]@4 [b4,d5] ~ eb5 d5 [a4,c5]@2 [g4,b4]@2 gb4@2 [e4,g4]@2 [d3,c4,d4,gb4,d5]@4 b4@2 [a4,c5]@2 [d3,b3,g4,b4,g5]@4 b4@2 [a4,c5]@2 [d3,b3,g4,b4,g5]@4 [g2,d3,d5]@4 ~@7, ~@13 [g2,d3]@4 [d3,a3]@4 [g2,d3]@4 [d3,b3]@4 [g2,d3,a4]@4 ~@12 [g2,d3]@4 [d3,a3]@4 [g2,d3]@4 [d3,b3]@4 [g2,d3,a4]@4 ~@4 [g2,d3]@4 [d3,b3]@4 [g2,d3,a4]@4 ~@4 [g2,d3]@4 [d3,b3]@4 [g2,d3,a4]@4 ~@4 [g2,d3,d5]@4 ~@4 [g2,d3,d5]@4 ~@4 bb4@2 ~@9]/8", // Am Bm Am G Em D7 G Am …
  G: "[~@5 [bb2,bb3,ab4,bb4]@2 [g4,c5]@2 [ab3,d4,f4,d5]@2 [c5,eb5]@2 [bb2,bb3,d5,f5]@2 [c5,gb5]@2 [g3,eb4,bb4,g5]@2 [eb5,bb5]@2 [bb2,bb3,bb4,ab5]@2 [c5,g5]@2 [ab3,d4,d5,f5]@2 ~@5]/2", // Bb7 C5 Ddim Cm Bb Cdim Eb Eb5 …
  H: "~@2 [eb5,g5]@2 [d5,f5]@2 ~ [db5,e5]@2 [d5,f5]@3 [eb5,g5]@3 ~", // Eb Dm Dbm Dm Eb
  I: "[d5,f5] ~ [eb5,f5] eb5 ~ [b4,d5]@2 ~ [c5,eb5]@3 ~@3 [ab4,c5] ~, ~ c5 ~@6", // Dm Ebsus2 Bm Cm Ab
  J: "[[g2,g4,b4]@2 [ab4,c5]@2 [b3,b4,d5]@2 [c5,eb5]@2 [f2,d5,f5]@2 ab5 [eb5,g5] [ab3,d5,f5]@2 [c5,eb5]@2 [g2,b4,d5]@2 [ab4,c5]@2 [b3,g4,b4]@2 [f4,ab4]@2 [ab2,eb4,g4]@2 [d4,f4]@2 [d3,c4,eb4,g4]@2 [f4,ab4]@2, ~ d3@2 d3@2 d3@2 ~]/2", // G Ab Bm Cm Dm Eb Ddim Cm …
  K: "[[g2,g4,b4]@2 [ab4,c5]@2 [b3,b4,d5]@2 [c5,eb5]@2 [f2,d5,f5]@2 ab5 [eb5,g5] [ab3,d5,f5]@2 [c5,eb5]@2 [g2,b4,d5]@2 [ab4,c5]@2 [b3,g4,b4]@2 [f4,ab4]@2 [ab2,eb4,g4]@2 [d4,f4]@2 [d3,c4,eb4]@2 f4@2 [g2,d3,b3]@4 [d3,b3,d4]@4 ~@2 g3@2 c4@2 eb4@2 d4 eb4 ~ d4 c4@2 b3@2 [g2,d3,a3]@4 d3@4, ~@2 d3@4 d3@4 d3@4 ~ d4@2 ~@3 [g2,d3]@2 [d3,a3]@2 [g2,d3]@2 d3@2 ~@4, ~@32 g4@2 ~@2 g4@19 ~ d4@8]/4", // G Ab Bm Cm Dm Eb Ddim Cm …
  L: "[[g2,d3,b3,d4,g4]@4 [d3,b3,d4]@4 ~@2 g3@2 c4@2 eb4@2 d4 eb4 ~ d4 c4@2 b3@2 [g2,d3,a3]@4 d3@4, ~@4 g4@19 ~ d4@8, ~@2 [g2,d3] [d3,a3] [g2,d3] d3 ~@2]/2", // G Gsus2 G5 D5 G5
  M: "d4 eb4 ~ d4 c4@2 b3@2 [g2,d3,a3]@4 d3@4, [g2,d3,b3] d3 d4@2", // Gsus2 G
  N: "[g4@4 g5@4 c5@4 eb5@4 d5 eb5 ~ d5 a4@2 c5@2 bb4@4 d4@4 g4@4 g5@4 c5@4 eb5@4 d5 eb5 ~ d5 a4@2 c5@2 bb4@4 d4@4 g4@8 bb4@4 d4@4 g4@8 bb4@4 d4@4 g4@23 ~@9, [g2,d3,g3]@57 ~@7]/8", // G5
  O: "bb5 c6 ~ bb5 f5@2 ab5@2 [d4,bb4,g5]@4 [c4,ab4,d5]@4, eb4, [bb3,g4] [c4,ab4] ~@2", // Gm Dm7b5 Eb Fm
  P: "[bb3,g4,eb5] [eb3,eb6] ab5 c6, ~ [ab3,f4]", // Eb Db
  Q: "bb5 c6 ~ bb5 f5@2 ab5@2 [d4,bb4,g5]@4 [c4,ab4,bb4]@4, eb4, [bb3,g4] [c4,ab4] ~@2", // Gm Fm Eb Fm
  R: "eb5 f5 [c4,eb4,g4,c5,eb5,g5]@4 ~@2, [eb3,bb3,g4] ~@3", S: "~@2 a2 ~ [d2,a2] d5 [a2,e5,g5] bb5",
  T: "[gb5,a5] bb5 a5@2 [a2,e5,g5]@2 [d5,gb5]@2 [d2,a2,db5]@2 b4@2 [a4,a5]@4, [d2,a2] ~@3 e5@2 a2 ~", // Gbm A7 D Dmaj7 A D5
  U: "[d2,a2] ~ a2 ~ [d2,a2] d4 [a2,e4,g4] bb4, d4 ~@3", // D5 A7
  V: "[gb4,a4] bb4 a4@2 [a2,e4,g4]@2 [d4,gb4]@2 [d2,a2,db4]@2 b3@2 [a3,a4]@4, [d2,a2] ~@3 e4@2 a2 ~", // Gbm A7 D Dmaj7 A D5
  W: "[d2,a2,gb4,a4] [e4,g4] [d4,gb4]@2 [d2,a2,g4] [d4,a4] [bb3,g4,d5]@2, ~@2 [a2,d5] ~ bb4@2 a2 ~", // D Em D Dsus4 D5 Gm D5
  X: "[gb4,a4] [e4,g4] ~@6, [d2,a2] ~@3", Y: "~@6 [g2,eb3,eb4,g4,c5] ~",
  Z: "[g4@4 g5@4 c5@4 eb5@4 d5 eb5 ~ d5 a4@2 c5@2 bb4@4 d4@4 g4@4 g5@4 c5@4 eb5@4 d5 eb5 ~ d5 a4@2 c5@2 bb4@4 d4@4 g4@8 bb4@4 d4@4 g4@8 bb4@4 d4@4, [g2,d3]@91 ~@5]/6", // G5
  AA: "[~@16 [eb2,bb2,g3,eb4]@4 [eb2,bb2,g3,eb4]@8 [g3,eb4]@4 [g3,eb4]@15 ~, g4@23 ~, ~@28 [eb2,bb2]@19 ~, ~@8 eb1 ~@3]/3", // Eb Cm Eb5
})).s("gm_piano").gain(0.2)

stack(piano, piano_soft)