Strudelify

Theme and Variations

Charles Dancla

KeyF majorTempo80 bpm
0:00/0:00
// Theme and Variations — Charles Dancla
// 80 bpm, 4/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 (1/8 at bar 1, 4/4 at bar 1, 1/4 at bar 19, 4/4 at bar 19, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/5105380; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 89 bars on a 32-step grid, each part at one level. Source detail keeps the original performance.
setcpm(80/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@8 D@5 E F G H I J K L M N O P Q R S T U@2 V@2 W J K L X Y Z AA AB@2 AC AD AE AF AG AH AB@2 AC AD AE AF AG AH AI
  AJ AK AL AM AJ AN AO AB@2 AP AD AQ AR AS AT AK AS AK AS AU AV AW AV AX@2 AY@2 AZ BA
>`.pickRestart({
  A: "~@4 [d3,a4,d5,f5] [d3,a4,d5,f5]@5 ~@5 [g2,bb4,d5,e5] [g2,bb4,d5,e5]@5 ~@4 [a2,e4,g4,db5] ~ [a2,e4,g4,db5]@5", // Dm Em7b5 A7
  B: "~@4 [bb2,d4,f4,d5] [bb2,d4,f4,d5]@5 ~@5 [g2,bb3,d4,e4] [g2,bb3,d4,e4]@5 ~@4 [a2,db4,e4,a4] ~ [a2,db4,e4,a4]@5", // Bb Em7b5 A
  C: "[~@8 a3@3 f4@2 d4@3 ~@3 a3@2 f4@3 d4@3 ~@2 a3@3 g4@3 e4@2 ~@3 a3@3 g4@2 e4@3 ~@3 db4@2 g4@3 e4@3 ~@2 a3@3 g4@3 e4@2 ~@3 a3@3 f4@2 d4@3 ~@3 a3@2 f4@3 d4@3 ~@2 a3@3 a4@3 d4@2 ~@3 a3@3 a4@2 d4@3 ~@3 d4@2 bb4@3 g4@3 ~@2 a3@3 f4@3 d4@2 ~@3 a3@3 g4@2 db4@3 ~@3 a3@2 f4@3 d4@3 db4@2 a4@3 [a3,db4]@3 a4@2 [b3,d4]@3 a4@3 [db4,e4]@2 a4@3 ~@3 a3@2 f4@3 d4@3 ~@2 a3@3 f4@3 d4@2 ~@3 a3@3 g4@2 e4@3 ~@3 a3@2 g4@3 db4@3 ~@2 a3@3 g4@3 e4@2 ~@3 db4@3 g4@2 e4@3 ~@3 a3@2 f4@3 d4@3 ~@2 a3@3, ~@5 d3@11 f3@10 ~ e3@10 e3@10 ~ a2@10 ~ db3@10 d3@11 d2@10 ~ f3@10 gb3@10 ~ g3@10 ~ f3@10 e3@10 ~ d3@10 ~ a2@20 ~ d3@11 f3@10 e3@11 a2@10 ~ db3@10 a2@10 ~ d3@11 d2@5]/8", // A Bm Dbm
  D: "[f4@3 d4@2 ~@3 f4@3 ab4@2 a4@3 ~@3 e4@2 c5@3 a4@3 ~@2 e4@3 d5@3 ab4@2 ~@3 e4@3 c5@2 a4@3 ~@3 d4@2 f4@3 d4@3 c4@2 e4@3 b3@3 e4@2 db4@3 e4@3 a4@2 e4@3 db4@3 e4@2 a4@3 e4@3 d4@2 e4@3 ab4@3 e4@2 d4@3 e4@3 ab4@2 e4@3 db4@3 e4@2 a4@3 e4@3 db4@2 e4@3 a4@3 e4@2 eb4@3 gb4@3 eb4@2 gb4@3 d4@3 gb4@2 d4@3 e4@3 [a2,a3,db4]@5, ~@5 d4@10 ~ c4@10 ~ b3@10 a3@10 ~ d3@10 ~ e3@10 [a2,e3]@20 ~@2 [a2,e3]@20 ~ [a2,e3]@20 ~ a2@20 ~@7, ~@133 gb3@10 ~ ab3@10 ~@6]/5", // A A5
  E: "[a2,e3,a3,db4,e4,a4]@5 [a2,e3,a3,db4,e4,a4]@5 ~ [a2,e3,a3,e4,a4,db5]@5 [a2,e3,a3,e4,a4,db5]@5 [a2,e3,a3,a4,db5,e5]@5 ~ [a2,e3,a3,a4,db5,e5]@5", // A
  F: "[a2,e3,a3,db5,e5,a5]@5 [a2,e3,a3,db5,e5,a5]@5 ~@5 [a3,db4,e4,a4] [a3,db4,e4,a4]@5 ~@4 [ab3,d4,f4,bb4] ~ [ab3,d4,f4,bb4]@5", // A Bb7
  G: "~@4 [g3,d4,f4,b4] [g3,d4,f4,b4]@5 ~@5 [c3,d4,g4,c5] [c3,e4,g4,c5]@4 [c3,gb4,a4] [c3,gb4,a4]@4 [c3,g4,bb4] ~ [c3,g4,bb4]@4 [c3,db4,gb5,a5]", // G7 Csus2 C Gbdim C7 Gbm
  H: "[c3,db4,gb5,a5]@4 [c3,db4,g5,bb5] [c3,c4,g5,bb5]@4 [c3,e3,g3,e4,g4,bb4,c5] ~ [c3,e3,g3,e4,g4,bb4,c5]@5 ~@16", // Gbm Gdim C7
  I: "f2@5 [ab3,b3,f4]@3 ~@3 [a3,c4,f4]@3 ~@2 [bb3,d4,f4]@3 ~@2 f2@5 ~ [a3,c4,f4]@5, ~@11 f3@5 ~@16", // Fdim F Bb F
  J: "f3@5 [a3,c4,f4]@5 ~ f3@5 [a3,c4,f4]@5 f3@5 ~ [a3,c4,f4]@5", // F
  K: "bb2@5 [bb3,d4,g4]@5 ~ bb2@5 [bb3,d4,g4]@5 d3@5 ~ [c4,d4,gb4]@5", // Gm D7
  L: "gb3@5 [c4,d4,a4]@5 ~ g3@5 [bb3,d4,g4]@5 bb2@5 ~ [bb3,d4,g4]@5", // D7 Gm
  M: "c3@5 [bb3,c4,e4]@5 ~ c3@5 [bb3,c4,e4]@5 [f2,a3,c4,f4]@3 ~@3 [f3,c4,f4,a4]@3 ~@2", // C7 F
  N: "[f2,a3,c4,f4]@5 ~@6 f2@5 [ab3,b3,f4]@3 ~@2 [a3,c4,f4]@3 ~@3 [bb3,d4,f4]@3 ~@2, ~@21 f3@5 ~@6", // F Fdim F Bb
  O: "f2@5 [a3,c4,f4]@5 ~ f3@5 [a3,c4,f4]@5 f3@5 ~ [a3,c4,f4]@5", // F
  P: "f3@5 [a3,c4,f4]@5 ~ bb2@5 [bb3,d4,g4]@5 bb2@5 ~ [bb3,d4,g4]@5", // F Gm
  Q: "d3@5 [c4,d4,gb4]@5 ~ gb3@5 [c4,d4,a4]@5 g3@5 ~ [bb3,d4,g4]@5", // D7 Gm
  R: "bb2@5 [bb3,d4,g4]@5 ~ c3@5 [bb3,c4,e4]@5 c3@5 ~ [bb3,c4,e4]@5", // Gm C7
  S: "[f2,a3,c4,f4]@3 ~@2 [f3,c4,f4,a4]@3 ~@3 [f2,a3,c4,f4]@5 ~@5 bb3@3 c4@3 a3@2 c4@3, ~@21 [c2,g4]@5 ~ [c3,f4]@5", // F C5 F5
  T: "g3@3 bb3@2 ~@3 bb3@3 [e3,c4]@2 g3@3 [f3,d4]@3 ab3@2 [gb3,eb4]@3 a3@3 [g3,e4]@2 bb3@3, [c2,e4]@5 [c3,f3,d4]@5 ~ c2@5 c3@5 c2@5 ~ c3@5", // C Dm Ebm C Dm7
  U: "[a3@3 c4@2 f4@3 c4@3 a3@2 c4@3 f4@3 c4@2 bb3@3 c4@3 e4@2 c4@3 bb3@3 c4@2 e4@3 c4@3 c3@2 [bb3,c4,g4]@3 c3@3 [a3,c4,f4]@2 c3@3 [bb3,d4,e4]@3 c3@2 [f3,bb3,d4]@3, [f2,f3]@20 ~ c3@20 ~@23]/2", // C7 F Em7b5 Bb F
  V: "[c2@3 [e3,g3,c4]@2 c3@3 [f3,ab3,d4]@3 c2@2 [gb3,a3,eb4]@3 c3@3 [g3,bb3,e4]@2 ab3@3 c4@3 f4@2 c4@3 ab3@3 c4@2 f4@3 c4@3 [c3,g3,c4,e4]@5 ~@16, ~@21 [f2,f3]@20 ~@23]/2", // C Ddim Ebdim Edim C F
  W: "f2@5 [ab3,b3,f4]@3 ~@3 [a3,c4,f4]@3 ~@2 [bb3,d4,f4]@3 ~@2 f3@5 ~ [a3,c4,f4]@5, ~@11 f3@5 ~@16", // Fdim F Bb F
  X: "c3@5 [bb3,c4,e4]@5 ~ c3@5 [bb3,c4,e4]@5 f3@3 ~@3 [f3,a3,c4,a4]@3 ~@2", // C7 F
  Y: "[f2,a3,c4,f4]@3 ~@2 [d4,f4,ab4,f5]@4 d5 ~ [c4,f4,a4,c5]@5 [a3,c4,d4,gb4,d5]@4 a4 [g3,bb3,d4,g4,bb4]@5 ~ [g3,bb3,c4,e4,c5]@4 g4", // F Ddim F D7 Gm C7
  Z: "[f3,a3,c4,f4,a4]@5 [eb3,eb4,f4,a4,f5]@5 ~ [d3,d4,f4,bb4,f5]@5 [db3,db4,f4,b4,f5]@5 [f4,c5,f5]@3 c6 b5 ~ d6 c6 bb5 ~ a5, ~@21 [c3,f3,a3]@10 ~", // F F7 Bb Db7 F5 F
  AA: "g5 f5 ~ e5 d5 c5 ~ bb4 a4 g4 ~ [f3,a3,f4]@5 [f2,f3,a4,c5,f5]@5 ~@11, [c3,e3,g3,bb3]@5 ~@11", // F C7
  AB: "~ [a3,c4,f4]!3 ~ [a3,c4,f4]!3, f2 ~ f3 ~", // F
  AC: "f2 [a3,c4,f4] [f3,a3,c4,f4] [a3,c4,f4] f2 [a3,c4,f4] [f3,a3,c4,f4] [a3,c4,f4]", // F
  AD: "~ [bb3,d4,g4]!3 ~ [bb3,d4,g4]!3, bb2 ~ bb2 ~", AE: "[d3,gb3,a3,d4,gb4,a4] ~ [d3,gb3,a3,gb4,a4,d5] ~",
  AF: "[g2,bb2,g3,d4,g4,bb4] ~ [g2,bb2,g3,bb4,d5,g5] ~", AG: "[c3,g3,bb3,c4,e4] ~ [c3,e3,g3,e4,g4,bb4,c5] ~",
  AH: "[f2,f3,c4,f4,a4] ~ [f2,f3,a4,c5,f5] ~", AI: "~ [bb3,c4,g4]!3 ~ [a3,c4,f4]!3, c3 ~ c3 ~",
  AJ: "c3 [g3,bb3,e4] c3 [e3,bb3,c4] c3 [f3,bb3,d4] c3 [g3,bb3,e4]", AK: "~ [a3,c4,f4]!3 ~ [a3,c4,f4]!3, f3 ~ f3 ~",
  AL: "~ [g3,bb3,e4]!3 ~ [g3,bb3,e4]!3, c3 ~ c3 ~", AM: "c3 [bb3,c4,g4] c3 [bb3,c4,g4] c3 [a3,c4,f4] c3 [a3,c4,f4]",
  AN: "~ [ab3,c4,f4]!3 ~ [ab3,c4,f4]!3, f3 ~ f2 ~", AO: "[c3,g3,c4,e4] ~@3",
  AP: "f2 [a3,c4,f4] f3 [a3,c4,f4] f2 [a3,c4,f4] f3 [a3,c4,f4]", AQ: "~ [c4,d4,gb4]!3 ~ [c4,d4,a4]!3, d3 ~ gb3 ~",
  AR: "~ [bb3,d4,g4]!3 ~ [bb3,d4,g4]!3, g3 ~ bb2 ~", AS: "~ [bb3,c4,e4]!3 ~ [bb3,c4,e4]!3, c3 ~ c3 ~",
  AT: "~ [a3,c4,f4]!3 [f2,f3,a3,c4,f4]@2 ~@2, f3 ~@3", // F
  AU: "f3 [f4,a4,c5] f3 [f4,a4,c5] bb2 [d4,g4,bb4] bb2 [d4,g4,bb4]", // F Gm
  AV: "c3 [c4,f4,a4] c3 [c4,f4,a4] c3 [c4,e4,g4] c3 [c4,e4,g4]", // F C
  AW: "f3 [c4,f4,a4] f3 [c4,f4,a4] bb2 [d4,g4,bb4] bb2 [d4,g4,bb4]", // F Gm
  AX: "~ [a3,c4,f4]!3 ~ [g3,bb3,c4,e4]!3, [f2,f3] ~ c3 ~", // F C7 F
  AY: "[f2,c3,a3,c4] [f3,f4] [f2,c3,a3,c4] [f3,f4] [f2,c3,a3,c4] [f3,f4] [f2,c3,a3,c4] [f3,f4] [f2,c3,a3,c4] [f3,f4] [f2,c3,a3,c4] [f3,f4] [f2,c3,a3,c4] [f3,f4] [f2,c3,a3,c4] [f3,f4]", // F
  AZ: "[f2,c3,f3,a3,c4,f4]@4 ~@3 [f3,f4,a4,c5,f5] [f3,f4,a4,c5,f5]@4 ~@3 [f2,f3,a3,c4,f4]", // F
  BA: "[f2,f3,a3,c4,f4]@23 ~@9", // F
})).s("gm_piano").gain(0.4)

stack(piano)