Strudelify

Gavotte op 67 No 2

D. Popper

KeyF majorTempo120 bpm
0:00/0:00
// Gavotte op 67 No 2 — D. Popper
// 120 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 79, 4/4 at bar 79) are rendered on a constant 4/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/5495851; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 83 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(120/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 I J K L M@3 N O P Q R S T ~@4 U@2 V@2 W ~ X Y Z@7 AA@8 AB AC AD AE AF AG AH ~@26
>`.pickRestart({
  A: "[a1,a2,g3,c4,e4] ~ [d2,d3,f3,a3,d4] ~@5", B: "[a1,g2,d3,g3,bb3] ~ [d2,d3,f3,a3] ~@5",
  C: "~@2 [bb1,bb2] ~ [g1,g2] ~ [a1,a2] ~", D: "[f1,d2] ~ [d2,d3] ~@5", E: "[a1,a2,g3,db4,e4] ~ [d2,d3,f3,a3,d4] ~@5",
  F: "[c2,c3,e3,g3,bb3] ~ [f2,c3,f3,a3] ~@5", G: "[d2,d3] ~ [bb1,bb2] ~ [c2,c3] ~@3", H: "[f1,f2] ~ [f2,f3] ~@5",
  I: "[g2,bb3]@2 [a2,c4] [bb2,d4] [bb2,c4]@2 [a2,bb3]@2", J: "[f2,a3]@2 [g2,bb3] [a2,c4] [a2,bb3]@2 [g2,a3]@2",
  K: "[e2,g3]@2 [f2,a3] [g2,bb3] [g2,bb3]@2 [f2,a3] [e2,g3]", L: "[d2,f3]@2 bb1 [e1,d2], ~ d3",
  M: "[[a1,db3]@2 ~@8 e3 f3 ~@4 d3@2 gb3 g3 g2@2 [a2,bb3]@2, ~@2 gb2@2 g2@2 ~ e3@2 ~@3, ~@3 d3@2 ~ db3@2 ~ bb2 ~@2]/3", // A Bbmaj7
  N: "[d3,a3] [bb2,d3] [g2,bb3] [a2,g3]", O: "[d2,f3]@2 d3@2 [gb3,a3]@2 [g3,bb3] [a3,c4], ~ d2",
  P: "g2@2 d3@2 [ab3,b3]@2 [a3,db4] [b3,d4], [g3,bb3] e2", Q: "a2@2 e3@2 [a3,c4]@2 [bb3,d4] [c4,eb4], [a3,c4] d2",
  R: "[g2,bb3]@2 [f2,a3,d4]@2 [e2,g3,d4] [f3,a3] [e3,g3] [d3,f3]", // Gm Dm Em7 F Em Dm
  S: "[db3,e3] [a2,db3] [b2,d3] [db3,e3] [d3,f3] ~ [bb1,bb2,d3]@2", // Dbm A Bm Dbm Dm Bb
  T: "[g1,g2] ~ [a1,a2] ~ [d1,d2] ~ [d2,d3] ~, bb3 g3 f3 ~", // G A D
  U: "[~@8 [g2,d3,f3,bb3,d4]@15 ~ [c2,g2,e3,g3,bb3]@4 ~@4]/2", // Gm7 C7
  V: "[~@8 [g3,d4,bb4,d5,f5]@15 ~ [c3,g3,e4,bb4,d5]@4 ~@4]/2", W: "~@4 [f1,f2,a4,a5] ~@3", X: "~@4 c3 ~ [a3,c4,f4] ~",
  Y: "c2 ~ [g3,c4,e4] ~ [f2,a3,c4,f4]@2 ~@2", // C F
  Z: "[~@8 [f2,c3]@15 ~ [f2,c3]@15 ~ [f2,c3]@15 ~ [f2,c3]@15 ~ [f2,c3]@15 ~@13 [f4,a4] ~ [g4,bb4] ~ [a4,c5]@4 [f4,a4]@4, ~@88 [f2,c3]@15 ~ [f2,c3]@8]/7", // F5 F Gm Am F F5
  AA: "[[g4,bb4]@4 [c4,g4]@4 [f4,a4]@4 [a3,f4]@4 [a3,f4]@4 ~@4 b2 [f2,c3]@30 ~ b2 [f2,c3]@30 ~ b2 ~@27 [f4,a4] ~ [g4,bb4] ~ [a4,c5]@4 [f4,a4]@4, [c2,c3]@8 [f2,c3]@15 ~@66 [f2,c3]@30 ~ [f2,c3]@8]/8", // Gm C5 F Dm F5 F Gm Am …
  AB: "[g4,bb4] [c4,g4] [f4,a4] [a3,f4], [c2,c3] [f2,c3]", AC: "[a3,f4] ~ [d3,a3,d4,f4,a4] ~",
  AD: "[a2,a3,e4,a4,c5] ~ [d2,d3,gb4,a4,c5,e5] ~", // Am D7
  AE: "[g1,d3,g4,b4,d5,g5]@4 [g3,g4,g5] ~ [a3,a4,a5] ~ [bb3,bb4,bb5] ~ [c4,c5,c6] ~ [bb3,bb4,bb5] ~ [a3,a4,a5] ~", // G A Bb C Bb A
  AF: "[g3,g4,g5] ~ [f3,f4,f5] ~ [e3,e4,e5] ~ [f3,f4,f5] ~ [g3,g4,g5] ~ [a3,a4,a5] ~ [g3,g4,g5] ~ [f3,f4,f5] ~", // G F E F G A G F
  AG: "[e3,e4,e5] ~ [d3,d4,d5] ~ [db3,db4,db5] ~ [d3,d4,d5] ~ [e3,e4,e5] ~ [f3,f4,f5] ~ [e3,e4,e5] ~ [d3,d4,d5] ~", // E D Db D E F E D
  AH: "[db3,db4,db5] ~ [bb2,bb3,bb4] ~ [a2,a3,a4] ~ [bb2,bb3,bb4] ~ [db3,db4,db5] ~@7", // Db Bb A Bb Db
})).s("gm_piano").gain(0.3)

// chords · piano · "鋼琴" · soft notes
const piano_soft = note("<~@59 A B C D A E C D F G H I J@3 K L M N O P Q R S>".pickRestart({
  A: "[a1,a2,g3,db4,e4] ~ [d2,d3,f3,a3,d4] ~@5", B: "[g1,g2,d3,g3,bb3] ~ [d2,d3,f3,a3] ~@5",
  C: "~ [bb1,bb2] [g1,g2] [a1,a2]", D: "[d1,d2] [d2,d3] ~@2", E: "[c2,c3,e3,g3,bb3] ~ [f2,c3,f3,a3] ~@5",
  F: "[g2,bb3]@2 [a2,c4] [bb2,d4] [bb2,d4]@2 [a2,c4]@2", G: "[f2,a3]@2 [g2,bb3] [a2,c4] [a2,c4]@2 [g2,bb3]@2",
  H: "[e2,g3]@2 [f2,a3] [g2,bb3] [g2,bb3]@2 [f2,a3] [e2,g3]", I: "[d2,f3]@2 bb1 e1, ~ d3",
  J: "[[a1,db3]@2 ~@8 e3 f3 ~@6 gb3 g3 ~@2 bb3@2, ~ gb2 g2 ab2 a2 ~, ~@3 d3@2 ~@2 e3@2 ~ db3@2]/3", // A
  K: "[d3,a3] [bb2,d3] [g2,bb3] [a2,g3]", L: "[d2,f3]@2 d3@2 [gb3,a3,d4]@2 [g3,bb3] [a3,c4], ~ d2",
  M: "g2@2 d3@2 [ab3,b3,e4]@2 [a3,db4] [b3,d4], [g3,c4,d4] e2", // E A Bm Gsus4
  N: "a2@2 e3@2 [a3,c4]@2 [bb3,d4] [c4,eb4], [a3,db4,e4] d2", O: "[g2,bb3]@2 [f2,a3]@2 [e2,g3] [f3,a3] [e3,g3] [d3,f3]",
  P: "[db3,e3] [a2,db3] [b2,d3] [db3,e3] [d3,f3] ~ [bb2,d3]@2", // Dbm A Bm Dbm Dm Bb
  Q: "[g2,bb3]@2 [a2,g3]@2 ~ [f3,a3,f4,a4] [e3,g3,e4,g4] [d3,f3,d4,f4]", // Gm A7 F Em Dm
  R: "[db3,e3,db4,e4] [a2,db3,a3,db4] [b2,d3,b3,d4] [db3,e3,db4,e4] [d3,f3,d4] ~ [bb1,bb2] ~, ~@3 d3", // Dbm A Bm Dbm Dm Bb
  S: "[g1,g2] ~ [a1,a2] ~ [d2,d3,f3]@2 [d1,d2,d5,f5,a5,d6]@2, bb3 g3 ~@2", // G A Dm
})).s("gm_piano").gain(0.2)

stack(piano, piano_soft)