Strudelify

Russisches Zigeunerlied und Thüringer Volkslied Op.88

Wilhelm Popp

KeyF majorTempo52 bpm
0:00/0:00
// Russisches Zigeunerlied und Thüringer Volkslied Op.88 — Wilhelm Popp
// 52 bpm, 2/4, key F 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 (2/4 at bar 1, 11/4 at bar 90, 2/4 at bar 95) are rendered on a constant 2/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/1199101; license: https://creativecommons.org/publicdomain/mark/1.0/
// note: Full arrangement: all 109 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(52/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
const piano = note(`<
  A B C D@4 ~@14 E@5 F@2 G@2 ~ H I J ~@4 K L M N O P Q R S T ~ U V W ~ X Y Z@2 AA@5 ~@27 AB ~@4 AC@2 ~@3 AD@4 AE AF AG
  AH AI@2
>`.pickRestart({
  A: "~@15 [a2,a3,a4]@8 [a2,a3,a4]@8 ~", // A
  B: "[a4,b4] db5 d5@10 [a3,a4]@4 [d4,d5]@4 [db4,db5]@4 ~ [bb3,bb4]@4 [a3,a4]@3, [d3,d4]@3 ~@5", // Asus2 A D Db Bb A D
  C: "~ [g3,g4]@4 [f3,f4]@4 [e3,e4]@4 [d3,d4]@4 ~ [a2,a3,db4,e4]@8 [a2,a3,db4,e4]@6", // G F E D A
  D: "[~@2 [a2,a3]@4 db3@4 e3@4 ~ [a3,a4]@4 [d4,d5]@4 [db4,db5]@4 [bb3,bb4]@4 [a3,a4]@4 [g3,g4]@4 ~ [f3,f4]@4 [e3,e4]@4 [d3,d4]@4 a2@8 a3@8 ~ a2@8 a3@8 [a2,e4,g4]@8 ~ [a3,db4,e4]@8 [a2,d4,f4]@8 [a3,d4,f4]@8 ~@10, ~@2 [db4,e4]@12 ~@38 [db4,e4]@17 [d4,f4]@16 ~@43]/4", // A D Db Bb A G F E …
  E: "[~@13 [a2,c4,e4]@3 ~@3 [a3,c4,e4]@3 ~@3 [a3,d4,f4]@13 [a2,c4,e4]@3 ~@3 [a3,c4,e4]@3 ~@3 [a3,d4,f4]@13 a2@6 [c4,e4]@6 ~ a3@6 [c4,e4]@6 ab3@6 ~ [d4,e4,b4]@6 e3@6 [d4,e4]@6 [a2,c4,e4]@3 ~@4 [a3,c4,e4]@3 ~@3 [a3,d4,f4]@13 [a2,c4,e4]@3 ~@3 [a3,c4,e4]@3 ~@3 [ab3,c4,f4]@9]/5", // Am Dm Am Dm C E7 Dsus2 Am …
  F: "[~@4 [g3,c4,e4]@12 [ab3,d4,f4]@13 [a3,c4,e4]@13 [e3,d4,ab4]@12 ~@10]/2", // C Ddim Am E7
  G: "[~@3 [a3,d4,f4,a4]@13 ~@12 [a3,d4,f4,a4]@13 ~@23]/2", H: "~@8 [a3,d4,f4,a4]@13 ~@6 [c4,e4,a4]@5",
  I: "~ [f2,f3]@6 [c4,eb4,a4]@6 ~ [e2,e3,c4,e4,a4]@6 ~@6 [e2,e3,d4,e4,ab4]@6", // F Adim Am E7
  J: "~@7 [a2,e3]@6 a3@6 [a2,e3]@4 g4@3 f4@3 e4@3, ~@7 [c4,a4]@12 db4@3 ~@4 a3@6", // A5 F
  K: "~ bb3 [d4,g4] bb3, [g1,g2]@15 ~@17", L: "~ d4 [f4,a4] d4, [f1,f2]@15 ~@17",
  M: "[db2,db3] [a3,e4,g4] [d2,d3] [a3,d4,f4]", N: "[a2,a3,db4,e4] ~ [a3,d4,f4]@2",
  O: "[a2,db4,e4]@8 ~@8 [d4,f4]@5 [e4,g4]@5 ~ [f4,a4]@3 ~@2, ~@16 a3@15 ~", // A Dm Em F
  P: "a2@5 a3@5 ~ a2@5 a3@5 a2@5 ~ a3@5, [e4,a4,db5]@8 ~@8 [f4,a4,d5]@15 ~", // A Dm
  Q: "a2@5 a3@5 ~ a2@5 a3@5 a2@5 ~ a3@5, [a4,db5,e5]@15 ~ [a4,d5,f5]@15 ~", // A Dm
  R: "a2@5 a3@5 ~ a2@5 a3@5 a2@5 ~ a3@5, [a4,db5,e5] ~ [a4,e5,g5]@2", // A A7
  S: "a2@5 a3@5 ~ a2@5 a3@5 a2@5 ~ a3@5, [a4,d5,f5] [f4,a4,d5]", T: "[a2,e4,a4,db5] ~@3",
  U: "c3@4 ~ [g3,bb3,c4]@4 c3@4 ~ [g3,bb3,c4]@4 ~ f3@4 ~ [a3,c4]@4 f3@4, e5@2 ~@3 c5@2 ~@2 e5@2 ~@3 c5@2 ~@3 f5@2 ~@3 c5@2 ~@2 a5@2 ~@2", // C7 Am
  V: "~ [a3,c4]@4 ~ c3@4 ~ [g3,bb3,c4]@4 c3@4 ~ [g3,bb3,c4]@4 ~ f3@4 [a3,c4,c5]@3, ~ f5@2 ~@3 e5@2 ~@3 c5@2 ~@2 e5@2 ~@3 c5@2 ~@3 f5@2 ~@5", // Am C7 Am
  W: "~@2 f3@4 ~ [a3,c4]@4 ~@21, ~@2 a5@2 ~@3 f5@2 ~@23", X: "~@23 c3@4 ~ [g3,bb3,c4]@4, ~@23 e5@2 ~@3 c5@2 ~@2",
  Y: "~ c3@4 [g3,bb3,c4]@4 ~ f3@4 ~ [a3,c4]@4 ~ f3@4 [a3,c4]@4 ~ [c3,e5]@3, ~ e5@2 ~@2 c5@2 ~@3 f5@2 ~@3 c5@2 ~@3 a5@2 ~@2 f5@2 ~@6", // C7 Am C
  Z: "[~@2 [g3,bb3,c4]@4 ~ c3@4 [g3,bb3,c4]@4 ~ f3@4 ~ [a3,c4]@4 f3@4 ~ [a3,c4]@4 ~@30, ~@2 c5@2 ~@3 e5@2 ~@2 c5@2 ~@3 f5@2 ~@3 c5@2 ~@2 a5@2 ~@3 f5@2 ~@32]/2", // C7 Am
  AA: "[~@13 [bb3,eb4,g4,bb4,eb5]@4 ~ [bb3,eb4,g4,bb4,eb5]@4 ~ [bb3,eb4,g4,bb4,eb5]@4 ~ [g3,bb3,eb4,g4,bb4,eb5]@40 ~@21 [e3,g3,db4,a4]@4 ~ [e3,g3,db4,a4]@4 ~ [e3,g3,db4,a4]@4 [a2,e3,g3,db4,a4]@40 ~@17, ~@9 g3@18 ~@57 a2@18 ~@58]/5", // Eb A7
  AB: "~@7 [a2,e3,g3,db5,e5,a5,db6]@8 ~@17", AC: "[~@27 g3@4 a3@4 db4@4 a4@8 g4@8 ~@9, ~@23 [a1,a2]@23 ~@18]/2",
  AD: "[~@28 [g2,eb3,g3,eb4,bb4]@16 ~ [g2,eb3,g3,eb4,bb4]@8 [g2,eb3,g3,eb4,bb4]@8 ~ [ab2,ab3,d4,f4,b4]@16 [b2,b3,f4,ab4,d5]@8 ~ [b2,b3,f4,ab4,d5]@8 [a2,a3,a4,d5,f5]@8 [a2,a3,g4,bb4,e5]@8 ~ [a2,a3,f4,a4,d5]@8 [a2,a3,e4,g4,db5]@8]/4", // Eb Abdim Bdim Dm Edim Dm A7
  AE: "~@4 [f4,a4,d5]@2 ~@3 [f4,a4,d5]@2 ~@10 [a4,db5,e5]@2 ~@2 [a4,db5,e5]@2 ~@5, [d2,d3]@12 ~@5 [a1,a2]@12 ~@3", // Dm A D A
  AF: "~@6 [a4,d5,f5]@2 ~@2 [a4,d5,f5]@2 ~@10 [g4,a4,db5]@2 ~@3 [g4,a4,db5]@2 ~@3, ~ [d2,d3]@6 ~@2 [a1,a2]@6 ~", // Dm A7 D A
  AG: "~@3 [d2,a2,a4,d5] [d3,f4] [d2,a2,a4,d5] [d3,f4] [d2,a2,a4,d5] [d3,f4] [d2,a2,a4,d5] [d3,f4] [d2,a2,a4,d5] [d3,f4] [d2,a2,a4,d5] [d3,f4] [d2,a2,a4,d5] [d3,f4] [d2,a2,a4,d5] [d3,f4] ~ [d2,a2,a4,d5] [d3,f4] [d2,a2,a4,d5] [d3,f4] [d2,a2,a4,d5] [d3,f4] [d2,a2,a4,d5] [d3,f4] [d2,a2,a4,d5] [d3,f4] [d2,a2,a4,d5] [d3,f4]", // D5 Dm D5 Dm D5 Dm D5 Dm …
  AH: "[d2,a2,a4,d5] [d3,f4] [d2,a2,a4,d5] [d3,f4] [d2,a2,a4,d5] [d3,f4] [d2,a2,a4,d5] [d3,f4] [d2,a2,a4,d5] [d3,f4] [d2,a2,a4,d5] [d3,f4] [d2,a2,a4,d5] ~ [d3,f4] [d2,a2,a4,d5] [d3,f4] [d2,a2,a4,d5] [d3,f4] [d2,a2,a4,d5] [d3,f4] [d2,a2,a4,d5] [d3,f4] [d2,a2,a4,d5] [d3,f4] [d2,a2,a4,d5] [d3,f4] [d2,a2,a4,d5] [d3,f4] [d2,a2,a4,d5] [d3,f4] [d2,a2,a4,d5]", // D5 Dm D5 Dm D5 Dm D5 Dm …
  AI: "[[d3,f4] [d2,a2,a4,d5] [d3,f4] [d2,a2,a4,d5] [d3,f4] [d2,a2,f4,a4,d5]@4 ~@5 [bb1,bb2,e4,g4,d5]@8 [a1,a2,f4,a4,d5]@8 [g1,g2,e4,bb4,d5]@8 ~ [f1,a4,d5] [d2,f4] [f1,a4,d5] [d2,f4] [f1,a4,d5] [d2,f4] [f1,a4,d5] [d2,f4] [f1,a4,d5] [d2,f4] [f1,a4,d5] [d2,f4] [f1,a4,d5] [d2,f4] [f1,a4,d5] [d2,f4] [f1,f4,a4,d5]@4 ~@5]/2", // Dm D5 Dm D5 Dm Em7b5 Dm Em7b5 …
})).s("gm_piano").gain(0.3)

// chords · piano · soft notes
const piano_soft = note(`<
  ~@6 A@7 B@2 C@4 D@3 ~@5 E F G H I ~@2 J K@2 L ~@13 M@2 N ~@2 O@2 ~@4 P Q R@5 S T U@2 V@3 W@2 X@7 Y@5 ~@5 Z AA AB@3 ~@9
>`.pickRestart({
  A: "[~@23 [a2,db4,e4]@16 [a3,d4,f4]@16 ~ [a2,db4,e4,g4]@20 ~@13 [d4,f4]@6 ~ a3@6 [d4,f4]@6 a3@6 [d4,f4]@6 ~ a3@6 [d4,f4]@6 a3@6 ~ [d4,f4]@6 b3@6 [d4,f4]@6 ~ b3@6 [d4,f4]@6 a3@6 [d4,f4]@6 ~ a3@6 [db2,db3]@12 ~ [bb3,e4,g4]@12 [d2,d3]@9, ~@89 [d2,d3]@24 ~ [d2,d3]@24 ~@2 [d2,d3]@24 ~ [d2,d3]@24 ~@35]/7", // A Dm A7 Dm Db Edim D
  B: "[~@4 [a3,d4,f4]@12 [a2,db4,e4]@13 [d3,a3,f4]@13 [a2,db4,e4]@12 ~@10]/2", // Dm A Dm A
  C: "[~@9 a3@6 ~ [d4,f4]@6 a3@6 ~@6 a3@6 ~ [d4,f4]@6 a3@6 ~@7 c4@6 [g4,bb4]@6 c4@6 ~@7 c4@6 [f4,a4]@6 c4@6 ~ [g2,g3]@12 [d4,e4,bb4]@12, ~@3 [d2,d3]@24 ~ [d2,d3]@24 ~ [e2,e3]@24 ~@2 [f2,f3]@24 ~@25]/4", // Dm Gm F G Em7b5 D E F
  D: "[~ [a2,a3]@12 ~ [d4,f4,a4]@12 [a1,a2]@12 ~ [g3,db4]@12 d2@6 ~ a2@6 d3@6 ~@26, ~@17 [f3,d4]@6 ~@9]/3", // A Dm A Gdim Dm
  E: "~@22 a2@3 ~@4 [a3,c4,e4,a4]@3", F: "~@16 a2@3 ~@3 [a3,c4,e4,a4]@3 ~@7",
  G: "~@9 a2@6 [c4,e4,a4]@6 e3@6 ~ [c4,e4,a4]@4", H: "~@2 ab3@6 [d4,e4,b4]@6 ~ e3@6 [d4,e4,ab4]@6 a2@3 ~@2",
  I: "~ [a3,c4,e4,a4]@3 ~@16 [a2,a3]@6 ~@6", J: "d4 a3 [d4,f4] a3, [d2,d3]@15 ~@17",
  K: "~ a3 [d4,f4] a3, [d2,d3]@15 ~@17", L: "~ a3 [db4,e4] a3, [a1,a2]@15 ~@17",
  M: "[~@12 db3@4 [g3,a3]@4 ~ d3@4 ~ [f3,a3]@4 ~ e3@4 [g3,a3]@4 ~ f3@4 ~ a3@4 [bb4,d5]@2 ~@3 [bb3,d4]@4 ~ [g4,db5]@2 ~@3, ~@12 e5@2 ~@7 f5@2 ~@8 db5@2 ~@7 d5@2 ~@7 g3@4 ~@6 a3@4 ~]/2", // Gsus2 F Gsus2 Bb Gdim
  N: "e4@4 d4@4 ~ a3@4 ~ f3@4 ~ d3@4 ~@9, ~@4 [f4,a4,d5]@9 ~@19", // Dm
  O: "[~@3 db3@4 ~ [g3,a3]@4 d3@4 ~ [f3,a3]@4 ~ e3@4 ~ [g3,a3]@4 f3@4 ~ a3@4 ~@24, ~@3 e5@2 ~@7 f5@2 ~@8 db5@2 ~@7 d5@2 ~@31]/2", // Gsus2 F Gsus2
  P: "[db4,e4]@5 [d4,f4]@4 [e4,g4]@4 ~@6 [db4,e4]@5 [d4,f4]@4 [e4,g4]@4, a3@13 ~@6 a3@13", // Dbm Dm Em Dbm Dm Em
  Q: "~@3 [a2,e3,g3,db4]@11 ~@2", // A7
  R: "[~@12 [d4,f4]@7 a3@7 [d4,f4]@6 a3@7 [d4,f4]@7 a3@7 [d4,f4]@7 a3@7 [d4,f4]@7 b3@7 [d4,f4]@7 b3@7 [d4,f4]@7 a3@7 [d4,f4]@7 a3@7 [db2,db3]@13 [bb3,e4,g4]@13 ~ [d2,d3]@10, ~@12 [d2,d3]@26 ~ [d2,d3]@26 ~@2 [d2,d3]@26 ~@2 [d2,d3]@26 ~@39]/5", // Dm Db Edim D
  S: "~@4 [a3,d4,f4]@13 ~ [a2,db4,e4]@14", T: "[d3,a3,f4]@14 [a2,db4,e4]@13 ~@5",
  U: "[~@16 a3@7 [d4,f4]@7 a3@7 ~@7 a3@7 [d4,f4]@7 a3@6, ~@10 [d2,d3]@26 ~ [d2,d3]@26 ~]/2", // Dm D
  V: "[~@8 c4@7 [g4,bb4]@7 c4@7 ~@7 c4@7 [f4,a4]@7 c4@6 [g2,g3]@13 ~ [d4,e4,bb4]@13 ~ [a2,a3]@12, ~ [e2,e3]@26 ~@2 [f2,f3]@26 ~@41]/3", // Gm F G Em7b5 A E F
  W: "[~@2 [d4,f4,a4]@13 ~ [a1,a2]@13 ~ [g3,db4]@13 ~ [f3,d4]@7 a3@7 [d4,f4]@6, ~@44 [d2,d3]@13 ~@7]/2", // Dm A Gdim Dm D
  X: "[a3@7 ~@8 a3@8 [d4,f4]@8 a3@8 ~@8 a3@8 [d4,f4]@8 a3@8 ~@8 a3@8 [d4,f4]@8 a3@8 ~@8 a3@8 [db4,e4]@8 a3@8 ~@8 bb3@8 [d4,g4]@8 bb3@8 ~@8 d4@8 [f4,a4]@8 d4@8 [d1,d2,d4,f4,a4]@8 ~@8 [g1,g2,d4,e4,bb4]@8 ~, ~@7 [d2,d3]@15 ~@17 [d2,d3]@15 ~@17 [d2,d3]@15 ~@17 [a1,a2]@15 ~@17 [g1,g2]@15 ~@17 [f1,f2]@15 ~@42]/7", // Dm Dbm G5 F Dm Em7b5 D A …
  Y: "[~@7 a1@2 a2@2 a1@2 a2@2 a1@2 ~@2 a1@2 a2@2 a1@2 a2@2 a1@2 a2@2 a1@2 ~@2 a1@2 a2@2 a1@2 a2@2 a1@2 a2@2 a1@2 ~@2 a1@2 a2@2 a1@2 a2@2 a1@2 a2@2 a1@2 ~@2 a1@2 a2@2 [a2,e3,g3,db5,e5,bb5]@11 ~ [a2,e3,g3,db5,e5,bb5]@4 [a2,e3,g3,db5,e5,bb5]@4 ~@4 [a2,e3,g3,db5,e5,a5]@4 ~@4 [a2,e3,g3,db5,e5,ab5]@4 ~@4 [a2,e3,g3,db5,e5,a5]@4 ~@4 [a2,e3,g3,db5,e5,bb5]@4 ~@4 [a2,e3,g3,db5,e5,a5]@4 ~@29, ~@7 [d4,f4]@8 ~@2 a2@2 ~@4 d5@5 ~ db5@5 d5@3 ~@2 [a4,d5]@8 ~@2 a2@2 ~@4 a5@5 ~ ab5@5 a5@3 ~@91, ~@7 a4@5 ~ ab4@5 a4@3 ~@2 [f4,a4]@8 ~@2 a2@2 ~@4 f5@5 ~ e5@5 f5@3 ~@2 [d5,f5]@8 ~@2 a2@2 ~@93]/5", // A7 Dm D5 F Dm
  Z: "~@23 [d3,f4]@4 ~ [f4,a4]@4", AA: "a3@4 [f4,a4]@4 db3@4 [e4,g4,a4]@4 a3@4 [e4,g4,a4]@4 ~ d3@4 [d4,f4,a4]@3",
  AB: "[~ a3@4 [d4,f4,a4]@4 a2@4 [db4,e4,a4]@4 ~ [a3,db4,e4,a4]@4 g3@4 ~@4 [d4,a4,c5]@4 ~@4 [d4,bb4]@4 ~@5 [c4,g4,bb4]@4 ~@4 [c4,f4,a4]@4 ~@4 [bb3,f4,bb4]@4 ~@5 [c4,g4,bb4]@4 ~@4 [e4,g4,a4]@4 ~@4 [d4,f4,a4]@4 ~@4, ~@26 gb3@8 g3@8 ~ e3@8 f3@8 d3@8 ~ e3@8 db3@8 d3@8 ~@4]/3", // Dm A D7 Gm C7 F Bb5 C7 …
})).s("gm_piano").gain(0.2)

stack(piano, piano_soft)

More by Wilhelm Popp