Strudelify
KeyG majorTempo228 bpm
0:00/0:00
// Venus Valse — Herbert Lincoln Clarke
// 228 bpm, 3/4, key G 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 (3/4 at bar 1, 14/4 at bar 15, 3/4 at bar 23) are rendered on a constant 3/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/6242202; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 188 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(228/3)

// 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@3 D@8 E F ~@38 G H I J K L M N O P Q R S N T L T U V W T X Y Z AA X AB AC AD AE AF AG AH AI@4 AJ@4 AK AL AM AN
  AO AP AQ AP AR AS AT AU AV AU AW AX AY AZ BA BB BC BD BE BF AR AS AT AU AV AU AW AX AY AZ BA BB BG BH BI BJ BK BL BM
  BN BO BP BQ BR BS BT BU BV BW BX BY BZ ~@25 CA CB CC CD CE CF CG CH CI CJ CK@2 CL
>`.pickRestart({
  A: "~ [c2,c3]@5 [c2,c3]@3 ~@2 [c2,c3]@3 ~@2, ~ [a#3,d4,g4]@15", // C Gm
  B: "~ [c2,c3]@3 ~@2 [c2,c3]@3 ~@2 [c2,c3]@3 ~@2, ~ [d4,g4,a#4]@15", // C Gm
  C: "[[c2,c3]@3 ~@2 [c2,c3]@3 ~@2 [c2,c3]@3 ~@2 [c2,c3]@3 ~@2 [c2,c3]@3 ~@2 [c2,c3]@3 ~@2 [c2,c3]@3 ~@2 [c2,c3]@3 ~@2 [g4,a#4,e5]@5 [c2,c3,f4,a#4,d5]@3, [g4,a#4,d5]@15 [a#4,d5,g5]@15 [g4,a#4,e5]@10 [c2,c3]@3 ~@5]/3", // C Edim A# Gm Edim C
  D: "[~@2 [c2,c3]@3 ~@2 [f4,a#4,c#5]@5 ~ [c2,c3]@3 ~@2 [e2,e3]@5 [f2,f3]@5 [f#2,f#3]@5 [g2,g3]@5 [e2,e3]@5 [c2,c3]@5 c3@10 [c2,c3]@5 [c2,c3]@5 [c2,c3]@5 [c2,c3]@5 [c2,c3]@5 [c2,c3]@5 ~ [c2,c3]@5 [c2,c3]@5 [c2,c3]@5 [c3,c4,e5,g5,c6]@5 [c3,c4]@10 [c3,c4,f5,b5,d6]@5 [c3,c4]@4, ~@7 [c2,c3]@3 ~@3 [e4,g4,c5]@30 [d4,g4,a#4]@15 [g4,a#4,d5]@14 ~ [a#4,d5,g5]@14 ~@2 [d5,g5,a#5]@14 ~@25]/8", // C A#m C E F F# G E …
  E: "~@6 [c3,c4,g5,a#5,e6]@5 ~@5", F: "~@4 [c3,g3,c4,e4,g4] [c3,g3,c4,e4,g4]@5 ~@6", G: "~@5 b4@3 c5@3 d5@2 e5@3",
  H: "[a4,c5,f5]@3 ~@2 [a3,c4]@5 ~ [a3,c4]@5, f3@5 [a4,c5,f5]@11", // F Am F
  I: "[a4,c5,e5]@3 ~@2 [a3,c4]@5 ~ [a3,c4]@5, c3@5 [a4,c5,e5]@11", // Am
  J: "[a#4,d5]@3 ~@2 [a#3,c4]@5 ~ [a#3,c4]@5, g3@5 [a#4,d5]@11", // A# A#sus2 A#
  K: "[a#4,e5]@3 ~@2 [a#3,c4]@5 ~ [a#3,c4]@5, c3@5 [a#4,e5]@11", L: "[f2,f3]@5 [c4,f4,a4]@5 ~ [c4,f4,a4]@5",
  M: "[c2,c3]@5 [c4,f4,a4]@5 ~ [c4,f4,a4]@5", N: "[g2,g3]@5 [c4,e4,a#4]@5 ~ [c4,e4,a#4]@5",
  O: "[c2,c3,c4,e4,a#4]@5 c5@3 d5@3 e5@2 f5@3", P: "[a#4,g5]@3 ~@2 [a#3,c4]@5 ~ [a#3,c4]@5, e3@5 [a#4,g5]@11",
  Q: "[a#4,f5]@3 ~@2 [a#3,c4]@5 ~ [a#3,c4]@5, c3@5 [a#4,f5]@11", // A#5 A#sus2 A#5
  R: "[a#4,e5]@3 ~@2 [a#3,c4]@5 ~ [a#3,c4]@5, g3@5 [a#4,e5]@11", // A#dim A#sus2 A#dim
  S: "[a#4,d5]@3 ~@2 [a#3,c4]@5 ~ [a#3,c4]@5, c3@5 [a#4,d5]@11", T: "[c2,c3]@5 [c4,e4,a#4]@5 ~ [c4,e4,a#4]@5",
  U: "~@5 [c4,f4,a4]@5 ~ [c4,f4,a4]@5, f2@15 ~", V: "~@5 [c4,d#4,a4]@5 ~ [c4,d#4,a4]@5, f#2@15 ~",
  W: "~@5 [c4,e4,a#4]@5 ~ [c4,e4,a#4]@5, g2@15 ~", X: "~@5 [a3,d4,f4]@5 ~ [a3,d4,f4]@5, [d2,d3]@15 ~",
  Y: "~@5 [a3,d4,f4]@5 ~ [a3,d4,f4]@5, a2@15 ~", Z: "~@5 [a3,e4,a4]@5 ~ [a3,e4,a4]@5, c#3@15 ~",
  AA: "~@5 [a3,c#4,g4]@5 ~ [a3,c#4,g4]@5, a2@15 ~", AB: "~@5 [g#3,b3,f4]@5 ~ [g#3,b3,f4]@5, [c#2,c#3]@15 ~",
  AC: "~@5 [a3,c4,f4]@5 ~ [a3,c4,f4]@5, [c2,c3]@15 ~", AD: "~@5 [g#3,d4,f4]@5 ~ [g#3,d4,f4]@5, [b1,b2]@15 ~",
  AE: "~@5 [a#3,d4,g4]@5 ~ [a#3,c#4,g4]@5, [c2,c3]@15 ~", AF: "~@5 [a#3,c4,e4]@5 ~ [a#3,c4,e4]@5, [c2,c3]@15 ~",
  AG: "[f2,f3]@5 [c3,a3,c4,f4]@5 ~ [a2,a3,c4,f4]@5", AH: "[f2,a3,c4,f4]@5 ~@11",
  AI: "[[c4,d#4,g4]@11 [c4,d#4,g4]@3 ~@2 [d#4,g4,c5]@11 [d#4,g4,c5]@3 ~@2 [g4,c5,d#5]@11 [g4,c5,d#5]@3 ~@7 [f2,f3]@5 ~ [f2,f3]@5, [f2,f3]@51 ~@13, ~@3 [c5,d#5,g5]]/4", // Cm F Cm
  AJ: "[[d#4,g4,c5]@11 [d#4,g4,c5]@3 ~@2 [g4,c5,d#5]@11 [g4,c5,d#5]@3 ~@2 [c5,d#5,g5]@11 [c5,d#5,g5]@3 ~@7 [f2,f3]@5 ~ [f2,f3]@5, [f2,f3]@51 ~@13, ~@3 [d#5,g5,c6]]/4", // Cm F Cm
  AK: "[f3,a3,c4,a5]@5 g5@5 ~ f5@5, c5", AL: "g5@5 f5@5 ~ d#5@5, [f2,f3,a#4]", AM: "f5@5 d#5@5 ~ d5@5, [f2,f3,a4]",
  AN: "[f2,g4,d#5]@5 [g2,f4,d5]@5 ~ [a2,d#4,c5]@5", AO: "[a#2,d4,a#4]@5 [f3,a#3,d4]@3 ~@3 [f3,a#3,d4]@3 ~@2",
  AP: "f2@5 [f3,a#3,d4]@3 ~@3 [f3,a#3,d4]@3 ~@2", AQ: "a#2@5 [f3,a#3,d4]@3 ~@3 [f3,a#3,d4]@3 ~@2",
  AR: "~@5 [f3,a#3,d4]@5 ~ [f3,a#3,d4]@5, a#2@15 ~", AS: "~@5 [f3,g#3,d4]@5 ~ [f3,g#3,d4]@5, b2@15 ~",
  AT: "~@5 [f3,a3,d#4]@5 ~ [f3,a3,d#4]@5, c3@15 ~", AU: "f2@5 [f3,a3,d#4]@5 ~ [f3,a3,d#4]@5",
  AV: "c3@5 [f3,a3,d#4]@5 ~ [f3,a3,d#4]@5", AW: "a#2@5 [f3,a#3,d4]@5 ~ [g3,a#3,d#4]@5",
  AX: "a#2@5 [f3,a#3,d4]@5 ~ [f3,a#3,d4]@5", AY: "~@5 [g3,d4,f4]@5 ~ [g3,d4,f4]@5, b2@15 ~",
  AZ: "~@5 [g3,b3,f4]@5 ~ [g3,b3,f4]@5, g2@15 ~", BA: "~@5 [g3,c4,d#4]@5 ~ [g3,c4,d#4]@5, c3@15 ~",
  BB: "~@5 [g3,c4,d#4]@5 ~ [g3,c4,d#4]@5, d#3@15 ~", BC: "e3@5 [a#3,c4,g4]@5 ~ [a#3,c4,g4]@5",
  BD: "c3@5 [a#3,c4,e4]@5 ~ [a#3,c4,e4]@5", BE: "[f3,a3,c4,d#4]@5 [g3,g4]@5 ~ [f3,f4]@5",
  BF: "[d#3,d#4]@5 [d3,d4]@5 ~ [c3,c4]@5", BG: "f3@5 [f3,a#3,d4]@5 ~ [f3,a#3,d4]@5",
  BH: "~@5 [f3,c4,d#4]@5 ~ [f3,c4,d#4]@5, d#3@15 ~", BI: "f3@5 [f3,a3,d#4]@5 ~ [f2,f3,a3,d#4]@5",
  BJ: "[a#2,f3,a#3,d4]@5 ~@11", BK: "[g3,c5]@5 [a#3,c4,d5]@5 ~ [a#3,c4,e5]@5",
  BL: "c3@5 [a#3,c4]@5 ~ [a#3,c4,a#4,c5]@5, [a#4,d5]@5 ~@3", BM: "[f3,a4]@5 [a3,c4,a#4]@5 ~ [a3,c4,b4]@5",
  BN: "[c3,c5]@5 [a3,c4,d5]@5 ~ [a3,c4,f5]@5", // C D7 F
  BO: "[d5,f5]@3 [c5,e5]@2 [a#3,c4]@5 ~ [a#3,c4]@5, g3@5 [c5,e5]@3 ~@3 [c5,e5]@3 ~@2", // Dm C A#sus2 C
  BP: "[c5,e5]@3 [a#4,d5]@2 [a#3,c4]@5 ~ [a#3,c4]@5, c3@5 [a#4,d5]@3 ~@3 [a#4,d5]@3 ~@2", // C A# A#sus2 A#
  BQ: "[f3,a#4,d5]@5 [c4,a4,c5]@5 ~ [d4,g#4,b4]@5", BR: "c4@5 a3@5 ~ f3@5, [a4,c5]@15 ~",
  BS: "[e3,g4]@5 [a#3,c4,a4]@5 ~ [a#3,c4,a#4]@5", BT: "[c3,c5]@5 [a#3,c4,d5]@5 ~ [a#3,c4,e5]@5",
  BU: "[f3,f5]@5 [a3,c4,g5]@5 ~ [a3,c4,g#5]@5", BV: "[c3,c5,a5]@5 [c4,a#4,g5]@5 ~ [c4,a4,f5]@5",
  BW: "c3@5 c4@3 c4@3 [c4,g4,a#4,e5]@5, [g4,a#4,e5]@11 ~@5", BX: "c3@5 c4@3 c4@3 [c4,a4,c5,f5]@5, [a4,c5,f5]@11 ~@5",
  BY: "c3@5 c4@3 c4@3 [c4,a4,c5,d#5,f#5]@5, [a4,c5,d#5,f#5]@11 ~@5", BZ: "[c3,c4,a#4,c5,e5,g5]@5 ~@11",
  CA: "~@5 [a3,c4,f4]@5 ~ [a3,c4,f4]@5, a2@15 ~", CB: "~@5 [a#3,d4,g4]@5 ~ [a#3,d4,g4]@5, f2@15 ~",
  CC: "~@5 [a#3,d4,g4]@5 ~ [a#3,d4,g4]@5, a#2@15 ~", CD: "[c2,c3,a#3,c4,e4]@5 ~@11",
  CE: "[e4,g4,c#5]@3 ~@2 [e4,g4,c#5]@3 ~@3 [e4,g4,c#5]@3 ~@2, [a#2,a#3]", // C#dim A#
  CF: "[f4,a4,d5]@3 ~@2 [f4,a4,d5]@3 ~@3 [f4,a4,d5]@3 ~@2, [a2,a3]", // Dm A
  CG: "[g4,a#4,e5]@3 ~@2 [g4,a#4,e5]@3 ~@3 [g4,a#4,e5]@3 ~@2, [g2,g3]", // Edim G
  CH: "[f2,f3,a4,c5,f5]@3 ~@2 [c3,a4,c5,f5]@3 ~@3 [a2,a4,c5,f5]@3 ~@2", // F
  CI: "[f2,a4,c5,f5]@3 ~@2 [c3,a4,c5,f5]@3 ~@3 [f3,a4,c5,f5]@3 ~@2", // F
  CJ: "[a3,a4,c5,f5]@3 ~@2 [f3,a4,c5,f5]@3 ~@3 [a3,a4,c5,f5]@3 ~@2", // F
  CK: "[c4@2 ~@3 a3@2 ~@2 c4@2 ~@3 f4@2 ~@2 c4@2 ~@3 a3@2 ~@2 [f3,a4,c5,f5]@2 ~@3, [a4,c5,f5]@14 [a4,c5,f5]@13 ~@5]/2", // F
  CL: "[c3,a4,c5,f5]@2 ~@2 [a2,a4,c5,f5]@2 ~@3 [f2,a4,c5,f5]@4 ~@3", // F
})).s("gm_piano").gain(0.3)

// chords · piano · soft notes
const piano_soft = note(`<
  ~@22 A B A C D E F G H I H J K L M N D O P Q R S T P U O V W X Q Y Z ~@96 A B A C D E F G H I H J K L M N D O P Q R S
  T P D ~@13
>`.pickRestart({
  A: "~@5 [a3,c4,f4]@5 ~ [a3,c4,f4]@5, [f2,c3]@15 ~", B: "~@5 [g#3,b3,f4]@5 ~ [g#3,b3,f4]@5, [f2,d3]@15 ~",
  C: "[c2,c3]@5 [a3,c4,f4]@5 ~ [a3,c4,f4]@5", D: "~@5 [a3,c4,f4]@5 ~ [a3,c4,f4]@5, [f2,f3]@15 ~",
  E: "~@5 [a#3,c4,e4]@5 ~ [a#3,c4,e4]@5, [g2,g3]@15 ~", F: "[a2,a3]@5 [c4,f4]@5 ~ [c4,g4]@5",
  G: "[c4,a4]@5 [a#3,g4]@5 ~ [a3,f4]@5, c3@15 ~", H: "~@5 [a#3,d4,g4]@5 ~ [a#3,d4,g4]@5, [g2,d3]@15 ~",
  I: "~@5 [a3,c4,f#4]@5 ~ [a3,c4,f#4]@5, [g2,d#3]@15 ~", J: "~@5 [d4,g4,a#4]@5 ~ [d4,g4,a#4]@5, a#2@15 ~",
  K: "~@5 [c4,e4,g4]@5 ~ [c4,e4,g4]@5, c3@15 ~", L: "~@5 [b3,f4,g4]@5 ~ [b3,f4,g4]@5, d3@15 ~",
  M: "~@5 [a#3,g4]@5 ~ [c4,a4]@5, e3@15 ~", N: "[d4,e4,a#4]@5 [c4,e4,a4]@5 ~ [a#3,e4,g4]@5, c3@15 ~",
  O: "~@5 [a3,c4,f4]@5 ~ [a3,c4,f4]@5, a2@15 ~", P: "~@5 [a#3,c4,e4]@5 ~ [a#3,c4,e4]@5, c3@15 ~",
  Q: "~@5 [a#3,c4,e4]@5 ~ [a#3,c4,e4]@5, [c2,c3]@15 ~", R: "~@5 [a3,c4,f4]@5 ~ [a3,c4,f4]@5, f2@15 ~",
  S: "~@5 [a3,c4,d#4]@5 ~ [a3,c4,d#4]@5, f#2@15 ~", T: "~@5 [a#3,c4,e4]@5 ~ [a#3,c4,e4]@5, g2@15 ~",
  U: "~@5 [a3,c4,f4]@5 ~ [a3,c4,f4]@5, f3@15 ~", V: "~@5 [a#3,d4,f4]@5 ~ [a#3,d4,f4]@5, a#2@15 ~",
  W: "~@5 [a#3,d4,f4]@5 ~ [a#3,d4,f4]@5, g2@15 ~", X: "~@5 [a#3,d4,f4]@5 ~ [a#3,d4,f4]@5, [c2,c3]@15 ~",
  Y: "[f2,f3]@5 [c3,a3,c4,f4]@5 ~ [a2,a3,c4,f4]@5", Z: "[f2,a3,f4]@5 ~@11",
})).s("gm_piano").gain(0.2)

stack(piano, piano_soft)