Strudelify

MASQUERADE WALTZ

Aram Khachaturian

KeyE minorTempo120 bpm
0:00/0:00
// MASQUERADE WALTZ — Aram Khachaturian
// 120 bpm, 3/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5895210; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 252 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/3)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once.
// 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 A B C D E F G H ~@17 I ~ I ~@7 J K L M L N O P O Q R S T Q R S T U V U V W X Y Z AA AB AC AD AE AF AG AH AE AF
  AG AH AI AJ AK AL AI AM AK AN AO AN AO AP AQ AR AS AT AQ AR AS AT AU AV AW AX AU AY AW AZ BA BB BC BD G BE BF BG BH O
  P O Q R S T Q R S T BI BJ BI BJ W X Y Z AA AB AC AD BK BL BM BN ~@4 BI BO BI BP BI BQ BR BS BI BO BI@2 BT BU BV BW BI
  BO BI BP BI BQ BR BS BI BO BI@2 BT BU BX BY ~@28 AE AF AG AH AE AF AG AH AI AJ AK AL AI AM AK AN BZ CA CB CC G BE BF
  BG BH O P O Q R S T Q R S T BI BJ BI BJ W X Y Z AA AB AC AD
>`.pickRestart({
  A: "[a1,a2]@4 e4 [e3,c4,e4,c5,e5]@5 ~ [e3,c4,e4]@5", B: "[c2,c3]@4 e4 [e3,a3,e4,c5,e5]@5 ~ [e3,a3,e4]@5",
  C: "[b1,b2]@4 e4 [e3,g#3,e4,d5,e5]@5 ~ [e3,g#3,e4]@5", D: "[e1,e2]@4 g#4 [e3,g#3,d4,d5,e5]@5 ~ [e3,g#3,d4,e4]@5",
  E: "[a1,a2,a3]@5 [e3,c4,e4]@5 ~ [e3,c4,e4]@5", F: "[e1,e2]@5 [e3,c4,e4]@5 ~ [e3,c4,e4]@5",
  G: "[a1,a2]@5 [e3,c4,e4]@5 ~ [e3,c4,e4]@5", H: "[e1,e2]@5 [e3,c4,e4]@5 ~@6", I: "f#4@5 a#5@5 ~ a#4@5",
  J: "~@11 [g#3,d4,e4]@5", K: "[a1,a2]@5 [e3,a3,c4,e4]@5 ~ [e3,a3,c4,e4]@5",
  L: "e4@3 g#4@2 a4 ~@2 b4 ~@2 c5 ~ d#5 ~@2, [c2,c3]@5 [e2,e3,a3,c4,e4]@5 ~ [e2,a2,e3,a3,c4,e4]@5", // C Am
  M: "[g#1,g#2]@5 [e3,a3,c4,e4]@5 ~ [e3,a3,c4,e4]@5, e5@15 ~", // G# Am
  N: "[g1,g2]@5 [e3,a3,c4,e4]@5 ~ [e3,a3,c4,e4]@5, e5@15 ~", O: "[c2,c3]@5 [e3,a3,c4,e4]@5 ~ [e3,a3,c4,e4]@5",
  P: "[f#1,f#2]@5 [e3,a3,c4,e4]@5 ~ [e3,a3,c4,e4]@5", Q: "[b1,b2]@5 [d#3,a3,b3,d#4]@5 ~ [d#3,a3,b3,d#4]@5",
  R: "[f#1,f#2]@5 [d#3,a3,b3,d#4]@5 ~ [d#3,a3,b3,d#4]@5", S: "[c2,c3]@5 [e3,g3,c4,e4]@5 ~ [e3,g3,c4,e4]@5",
  T: "[g1,g2]@5 [e3,g3,c4,e4]@5 ~ [e3,g3,c4,e4]@5", U: "[c2,c3]@5 [g3,c4,e4]@5 ~ [g3,c4,e4]@5, [g4,g5]@15 ~",
  V: "[f#1,f#2,f#4]@5 [f#3,c4,e4,a#5]@5 ~ [f#3,c4,e4,a#4]@5", W: "~@5 [a3,b3,d#4]@5 ~ [a3,b3,d#4]@5, [f2,f3]@15 ~",
  X: "~@5 [g#3,a#3,d4]@5 ~ [g#3,a#3,d4]@5, [e2,e3]@15 ~", Y: "~@5 [g3,a3,c#4]@5 ~ [g3,a3,c#4]@5, [d#2,d#3]@15 ~",
  Z: "~@5 [f#3,g#3,c4]@5 ~ [f#3,g#3,c4]@5, [d2,d3]@15 ~", AA: "~@5 [e3,g3,b3]@5 ~ [e3,g3,b3]@5, [c#2,c#3]@15 ~",
  AB: "~@5 [e3,f#3,a#3]@5 ~ [e3,f#3,a#3]@5, [c2,c3]@15 ~", // F#7 C
  AC: "~@5 [d#3,f#3,a3,b3]@5 ~ [d#3,f#3,a3,b3]@5, [b1,b2]@15 ~", AD: "[e1,e2,b2,e3,g3,b3]@5 [e2,e3,g3,b3,e4]@10 ~",
  AE: "[b1,b2]@5 [g#3,d4,e4]@5 ~ [g#3,d4,e4]@5", AF: "[e1,e2]@5 [g#3,d4,e4]@5 ~ [g#3,d4,e4]@5",
  AG: "[a1,a2]@5 [a3,c4,e4]@5 ~ [a3,c4,e4]@5", AH: "[e1,e2]@5 [a3,c4,e4]@5 ~ [a3,c4,e4]@5",
  AI: "~@5 [b3,d#4,a4]@5 ~ [b3,d#4,a4]@5, [b1,b2]@15 ~", AJ: "~@5 [b3,d#4,f#4]@5 ~ [b3,d#4,f#4]@5, [a2,a3]@15 ~",
  AK: "~@5 [b3,e4,g4]@5 ~ [b3,e4,g4]@5, [g2,g3]@15 ~", AL: "~@5 [b3,e4,g4]@5 ~ [b3,e4,g4]@5, [e2,e3]@15 ~",
  AM: "~@5 [b3,d#4,a4]@5 ~ [b3,d#4,a4]@5, [a2,a3]@15 ~", AN: "~@5 [b3,d#4,a4]@5 ~ [b3,d#4,a4]@5, [f#2,f#3]@15 ~",
  AO: "~@5 [b3,d#4,a4]@5 ~ [b3,d#4,a4]@5, [f2,f3]@15 ~", // B7 F
  AP: "[e4,f4,d5]@5 c5@5 ~ [d4,b4]@5, [e2,e3,g#3,b3], d4@11 ~@5, ~@5 e4@11", // Dm G E
  AQ: "[b1,b2]@5 [e5,b5] ~@2 [b4,e5] ~@2 [e5,b5] ~ [b4,e5] ~@2, ~@5 [g#3,d4,e4]@5 ~ [g#3,d4,e4]@5", // B E5 E7
  AR: "[e1,e2]@5 [e5,b5] ~@2 [b4,e5] ~@2 [e5,b5] ~ [b4,e5] ~@2, [e5,b5] ~@4 [g#3,d4,e4]@5 ~ [g#3,d4,e4]@5", // E E5 E7
  AS: "[a1,a2]@5 [e5,a5] ~@2 [c5,e5] ~@2 [e5,a5] ~ [c5,e5] ~@2, ~@5 [a3,c4,e4]@5 ~ [a3,c4,e4]@5", // A A5 C A5 C Am
  AT: "[e1,e2]@5 [e5,a5] ~@2 [c5,e5] ~@2 [e5,a5] ~ [c5,e5] ~@2, [e5,a5] ~@4 [a3,c4,e4]@5 ~ [a3,c4,e4]@5", // E A5 C A5 C A5 Am
  AU: "~@5 [d#5,a5] ~@2 [d#5,f#5] ~@2 [d#5,a5] ~ [d#5,f#5] ~@2, [b1,b2]@15 ~, ~@5 [b3,d#4,a4]@5 ~ [b3,d#4,a4]@5", // D#dim D#m D#dim D#m B B7
  AV: "~@5 [d#5,a5] ~@2 [d#5,f#5] ~@2 [d#5,a5] ~ [d#5,f#5] ~@2, [a2,a3]@15 ~, ~@5 [b3,d#4,f#4]@5 ~ [b3,d#4,f#4]@5", // D#dim D#m D#dim D#m A B
  AW: "~@5 [e5,g5] ~@2 [b4,e5] ~@2 [e5,g5] ~ [b4,e5] ~@2, [g2,g3]@15 ~, ~@5 [b3,e4,g4]@5 ~ [b3,e4,g4]@5", // Em E5 Em E5 G Em
  AX: "~@5 [e5,g5] ~@2 [b4,e5] ~@2 [e5,g5] ~ [b4,e5] ~@2, [e2,e3]@15 ~, ~@5 [b3,e4,g4]@5 ~ [b3,e4,g4]@5", // Em E5 Em E5 E Em
  AY: "~@5 [d#5,a5] ~@2 [d#5,f#5] ~@2 [d#5,a5] ~ [d#5,f#5] ~@2, [a2,a3]@15 ~, ~@5 [b3,d#4,a4]@5 ~ [b3,d#4,a4]@5", // D#dim D#m D#dim D#m A B7
  AZ: "~@5 [d#5,a5] ~@2 [d#5,f#5] ~@2 [d#5,a5] ~ [d#5,f#5] ~@2, [f#2,f#3]@15 ~, ~@5 [b3,d#4,a4]@5 ~ [b3,d#4,a4]@5", // D#dim D#m D#dim D#m F# B7
  BA: "~@5 c#5@3 d5@3 d#5@2 e5@3, [f3,a3,d#4]@15 ~", // F7
  BB: "[d5,f5]@3 [d#5,f#5]@2 [e5,g5]@3 [f5,g#5]@3 [f#5,a5]@2 [g5,a#5]@3, [f#3,a3,d#4]@15 ~", // Dm D#m Em Fm F#m Gm D#dim
  BC: "[g#5,b5]@3 [a5,c6]@2 [a#5,c#6]@3 [b5,d6]@3 [c6,d#6]@2 e6@3, [f3,a3,d#4]@15 ~", // G#m Am A#m Bm Cm F7
  BD: "e2 [e2,f2] f2 [e2,f2] e2 [e2,f2] f2 [e2,f2] e2 [e2,f2] f2 [e2,f2] e2 [e2,f2] f2 [d#2,e2], [d4,f4,g#4,d6]@5 [c4,e4,g#4,c6]@5 ~ [b3,d4,g#4,b5]@5", // Fmaj7 Emaj7 Ddim Caug G#dim
  BE: "e4@3 g#4@2 a4 ~@2 b4 ~@2 c5 ~ d#5 ~@2, [c2,c3]@5 [e3,c4,e4]@5 ~ [e3,c4,e4]@5", // C
  BF: "[g#1,g#2]@5 [e3,a3,c4,e4]@5 ~ [e3,a3,c4,e4]@5", // G# Am
  BG: "e4@3 g#4@2 a4 ~@2 b4 ~@2 c5 ~ d#5 ~@2, [c2,c3]@5 [e3,a3,c4,e4]@5 ~ [e3,a3,c4,e4]@5", // C Am
  BH: "[g1,g2]@5 [e3,a3,c4,e4]@5 ~ [e3,a3,c4,e4]@5", BI: "[c2,c3]@5 [g3,c4,e4]@5 ~ [g3,c4,e4]@5",
  BJ: "[f#1,f#2]@5 [f#3,c4,e4]@5 ~ [f#3,c4,e4]@5", // F# F#m7b5
  BK: "~@4 [g3,c4,e4] [g3,c4,e4]@3 ~@3 [g3,c4,e4]@3 ~@2, [c2,c3]@5 ~@3", // C
  BL: "~@5 [g3,c4,e4]@3 ~@3 [g3,c4,e4]@3 ~@2, [e2,e3]@5 ~@3", // C E
  BM: "~@4 [g3,b3,f4] [g3,b3,f4]@3 ~@3 [g3,b3,f4]@3 ~@2, [d2,d3]@5 ~@3", // G7 D
  BN: "~@5 [g3,b3,f4]@3 ~@3 [g3,b3,f4]@3 ~@2, [c#2,c#3]@5 ~@3", BO: "[c2,c3]@5 [a3,b3,d4]@5 ~ [a3,b3,d4]@5",
  BP: "[g1,g2]@5 [g3,c4,e4]@5 ~ [g3,c4,e4]@5", BQ: "[c2,c3]@5 [g3,b3]@5 ~ [g3,b3]@5",
  BR: "[c2,c3,c4]@5 [g3,c4,e4]@5 ~ [g3,c4,e4,g4]@5", BS: "[g1,g2,e4]@5 [g3,c4,e4,c5]@5 ~ [g3,c4,e4,g4]@5",
  BT: "[b1,b2]@5 [g3,b3,e4]@5 ~ [g3,b3,e4]@5", BU: "~@5 [a3,b3,d#4]@5 ~ [a3,b3,d#4]@5, [b1,b2]@15 ~",
  BV: "[e2,e3]@5 [g#3,d4,f4]@5 ~ [g#3,d4,e4]@5", BW: "[g2,g3,b3,d4,f4]@5 [g2,d3,g3,b3,d4,f4,g4]@10 ~",
  BX: "[e2,e3,g#3,e4]@5 [g#3,d4,e4]@5 ~ [g#3,d4,f4]@5, ~@5 [e2,e3]@10 ~", // E E7 Ddim E
  BY: "[g#3,d4,g4]@5 [g#3,d4,f4]@5 ~ [e2,e3,g#3,d4,e4]@5, [e2,e3]@5 ~@3", BZ: "[f3,a3,d#4]@15 ~",
  CA: "d5@3 d#5@2 e5@3 f5@3 f#5@2 g5@3, [f#3,a3,d#4]@15 ~", CB: "g#5@3 a5@2 a#5@3 b5@3 c6@3 ~@2, [f3,a3,d#4]@15 ~",
  CC: "e2 [e2,f2] f2 [e2,f2] e2 [e2,f2] f2 [e2,f2] e2 [e2,f2] f2 [e2,f2] e2 [e2,f2] f2 [d#2,e2], [d4,f4,g#4]@5 [c4,e4,g#4]@5 ~ [b3,d4,g#4]@5", // Fmaj7 Emaj7 Ddim Caug G#dim
})).s("gm_piano").gain(0.4)

// chords · piano · soft notes
const piano_soft = note(`<
  ~@11 A B C D C E C F C G H I J G H I J I K L K M N O P Q R S T ~@100 U V W X ~@32 B Y Z Y AA C F C G H I J G H I AB I
  K I K M N O P Q R AC AD ~@48
>`.pickRestart({
  A: "~@11 [e3,c4,e4]@5", B: "[a1,a2]@5 [e3,c4,e4]@5 ~ [e3,c4,e4]@5", C: "[c2,c3]@5 [e3,c4,e4]@5 ~ [e3,c4,e4]@5",
  D: "[g#1,g#2]@5 [e3,c4,e4]@5 ~ [e3,c4,e4]@5", E: "[g1,g2]@5 [e3,c4,e4]@5 ~ [e3,c4,e4]@5",
  F: "[f#1,f#2]@5 [e3,c4,e4]@5 ~ [e3,c4,e4]@5", G: "[b1,b2]@5 [a3,b3,d#4]@5 ~ [a3,b3,d#4]@5",
  H: "[f#1,f#2]@5 [a3,b3,d#4]@5 ~ [a3,b3,d#4]@5", I: "[c2,c3]@5 [g3,c4,e4]@5 ~ [g3,c4,e4]@5",
  J: "[g1,g2]@5 [g3,c4,e4]@5 ~ [g3,c4,e4]@5", K: "[f#1,f#2]@5 [f#3,c4,e4]@5 ~ [f#3,c4,e4]@5",
  L: "[c2,c3]@5 [g3,c4,e4]@5 ~ [g3,c4,e4]@5, g4@15 ~", M: "~@5 [a3,b3,d#4]@5 ~ [a3,b3,d#4]@5, [f2,f3]@15 ~",
  N: "~@5 [g#3,a#3,d4]@5 ~ [g#3,a#3,d4]@5, [e2,e3]@15 ~", O: "~@5 [g3,a3,c#4]@5 ~ [g3,a3,c#4]@5, [d#2,d#3]@15 ~",
  P: "~@5 [f#3,g#3,c4]@5 ~ [f#3,g#3,c4]@5, [d2,d3]@15 ~", Q: "~@5 [e3,g3,b3]@5 ~ [e3,g3,b3]@5, [c#2,c#3]@15 ~",
  R: "~@5 [e3,f#3,a#3]@5 ~ [e3,f#3,a#3]@5, [c2,c3]@15 ~", S: "~@5 [f#3,a3,d#4]@5 ~ [f#3,a3,d#4]@5, [b1,b2]@15 ~",
  T: "[g#3,d4,e4]@5 ~@3, [e2,e3]@15 ~", U: "c2 ~@3 g3 [g3,c4,e4]@3 ~@3 [g3,c4,e4]@3 ~@2, ~ c3@9 ~@6",
  V: "e2 ~@4 [g3,c4,e4]@3 ~@3 [g3,c4,e4]@3 ~@2, ~ e3@9 ~@6", // C
  W: "d2 ~@3 g3 [g3,b3,f4]@3 ~@3 [g3,b3,f4]@3 ~@2, ~ d3@9 ~@6", // G7
  X: "c#2 ~@4 [g3,b3,f4]@3 ~@3 [g3,b3,f4]@3 ~@2, ~ c#3@9 ~@6", // G7
  Y: "e3@3 g#3@2 a3 ~@2 b3 ~@4 d#4 ~@2, [c2,c3]@5 [e3,c4,e4]@5 ~ [e3,c4,e4]@5", // C
  Z: "[g#1,g#2,e4]@5 [e3,c4,e4]@5 ~ [e3,c4,e4]@5", AA: "[g1,g2,e4]@5 [e3,c4,e4]@5 ~ [e3,c4,e4]@5",
  AB: "[g1,g2]@5 [e3,g3,c4,e4]@5 ~ [e3,g3,c4,e4]@5", AC: "~@5 [d#3,f#3,a3,b3]@5 ~ [d#3,f#3,a3,b3]@5, [b1,b2]@15 ~",
  AD: "[e1,e2,b2,e3,g3,b3]@5 [e2,e3,g3,b3,e4]@10 ~", // Em
})).s("gm_piano").gain(0.2)

stack(piano, piano_soft)