Strudelify

Danse macabre Op.40

Saint-Saens

KeyB♭ majorTempo195 bpm
0:00/0:00
// Danse macabre Op.40 — Saint-Saëns
// 195 bpm, 3/4, key Bb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (3/4 at bar 1, 1/4 at bar 16, 2/4 at bar 17, 3/4 at bar 17, ...) are rendered on a constant 3/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/594276; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 137 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(195/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 D E@2 F G H I@3 J@4 K L M L N O P Q R S T U V W X Y Z S T U V W AA AB AC AD AE AF AG AH@3 AI AJ AE AF AG AH@3 AK
  AL AM AN H AO I@2 J@4 AP AQ AR AQ AS AT AU AV AW S T U V W X Y Z S T U V W AA AB AX E AY AZ H AO I@2 BA@4 BB BC BD BC
  BE@4 BF BG BH BI BJ BK@3 BL@3 BM BN@3 BO BP ~@3 BQ BR BS BT BU
>`.pickRestart({
  A: "[a4,eb5]", B: "[d4,a4]", C: "[a4,eb5]@11 [a4,eb5]@5", D: "[d4,a4]@11 [d4,a4]@5",
  E: "[a4,eb5]@3 [a4,eb5]@2 [a4,eb5]@3 ~@3 [d4,a4]@3 ~@2", F: "[a4,eb5]@5 [d4,a4]@5 ~ [a4,eb5]@5",
  G: "[d4,a4]@5 [a4,eb5]@5 ~ [d2,gb2,a2,d3,d4,gb4,a4,d5]@5", H: "[g1,bb1,d2,g2,g4,bb4,d5,g5]@5 [g3,bb3]@3 ~@3 d3@3 ~@2",
  I: "g2@5 [g3,bb3]@3 ~@3 d3@3 ~@2", J: "f2@3 ~@2 [ab3,c4]@3 ~@3 eb3@3 ~@2",
  K: "g2@3 ~@2 [g4,bb4]@3 bb5 ~@2 d4@2 a5 ~@2, ~@5 g5 ~@5 g5 ~@4", // Gm
  L: "bb5@5 [g4,bb4]@3 bb5 ~@2 d4@2 bb5 ~@2, g3@3 ~@2 a5 ~@5 g5 ~@4", // Gm
  M: "a5 [a5,bb5] bb5 g5 ~ [g4,bb4]@3 bb5 ~@2 d4@2 a5 ~@2, g3@3 ~@2 g5 ~@5 g5 ~@4", // Bbmaj7 Gm
  N: "ab5@5 [ab4,c5]@3 c6 ~@2 eb4@2 bb5 ~@2, f3@3 ~@2 ab5 ~@5 ab5 ~@4", // Ab
  O: "c6@5 [ab4,c5]@3 c6 ~@2 eb4@2 c6 ~@2, f3@3 ~@2 bb5 ~@5 ab5 ~@4", // Ab
  P: "bb5 [bb5,c6] c6 ab5 ~ [ab4,c5]@3 c6 ~@2 eb4@2 bb5 ~@2, f3@3 ~@2 ab5 ~@5 ab5 ~@4", // Bbsus2 Ab
  Q: "c6@5 [ab4,c5]@3 c6 ~@2 eb4@2 ab5 ~@2, f3@3 ~@2 ab5 ~@5 bb5 ~@4", // Ab
  R: "[g3,d4,bb4,g5]@3 ~@2 [g3,bb3]@3 ~@3 d3@3 ~@2", S: "g2@3 ~@2 [bb3,d4,g4]@3 ~@3 [g3,bb3,d4]@3 ~@2",
  T: "g2@3 ~@2 [bb3,d4,f4]@3 ~@3 [f3,bb3,d4]@3 ~@2", U: "g2@3 ~@2 [g3,bb3,e4]@3 ~@3 [e3,g3,bb3]@3 ~@2",
  V: "g2@3 ~@2 [g3,bb3,eb4]@3 ~@3 [eb3,g3,bb3]@3 ~@2", W: "g2@3 ~@2 [g3,bb3,d4]@3 ~@3 [d3,g3,bb3]@3 ~@2",
  X: "a2@3 ~@2 [a3,d4]@3 ~@3 [gb3,bb3]@3 ~@2", Y: "a2@3 ~@2 [a3,db4,e4]@5 ~ [e3,a3,db4]@3 ~@2",
  Z: "[d2,d3]@3 ~@2 [a3,d4,gb4]@5 ~ [gb3,a3,d4]@3 ~@2", AA: "a2@3 ~@2 [gb3,a3,d4]@3 ~@3 [a3,d4,gb4]@3 ~@2",
  AB: "[a2,a3,d4,gb4,a4]@3 ~@8 [a2,a3,db4,e4,a4]@3 ~@2", // D A
  AC: "[d2,d3,d4]@3 ~@2 [d4,gb4]@3 gb5 ~@2 a3@2 e5 ~@2, ~@5 d5 ~@5 d5 ~@4", // D
  AD: "gb5@5 [d4,gb4]@3 f5 ~@2 a3@2 f5 ~@2, d3@3 ~@2 e5 ~@5 d5 ~@4", // D
  AE: "e5 [e5,f5] f5 d5@2 [d4,gb4]@3 gb5 ~@2 a3@2 e5 ~@2, d3@3 ~@2 d5 ~@5 d5 ~@4", // Fmaj7 D
  AF: "gb5@5 [d4,gb4]@3 gb5 ~@2 a3@2 gb5 ~@2, d3@3 ~@2 e5 ~@5 d5 ~@4", // D
  AG: "[c2,c3,bb4,eb5,g5]@5 [bb3,eb4,g4]@3 ~@3 [g3,bb3,eb4]@3 ~@2", // Cm7 Eb
  AH: "[c2,c3]@3 ~@2 [bb3,eb4,g4]@3 ~@3 [g3,bb3,eb4]@3 ~@2", // C Eb
  AI: "[d2,d3]@3 ~@2 [d4,gb4]@3 gb5 ~@2 a3@2 e5 ~@2, ~@5 d5 ~@5 d5 ~@4", // D
  AJ: "gb5@5 [d4,gb4,e5]@3 gb5 ~@2 a3@2 gb5 ~@2, d3@3 ~@8 d5 ~@4", // D
  AK: "[d2,d3,a3,d4,gb4]@5 [d4,a4]@3 [d4,a4]@3 [d4,a4]@2 [d4,a4]@3", // D D5
  AL: "[a4,eb5]@5 [d4,a4]@3 [d4,a4]@3 [d4,a4]@2 [d4,a4]@3", AM: "[a4,eb5]@3 ~@2 [d4,a4]@3 ~@3 [a4,eb5]@3 ~@2",
  AN: "[d4,a4]@3 ~@2 [a4,eb5]@3 ~@3 [d2,gb2,a2,d3,d4,gb4,a4,d5]@5", AO: "g2@3 ~@2 [g3,bb3]@3 ~@3 d3@3 ~@2",
  AP: "[g1,g2]@5 [g5,g6]@3 [bb5,bb6]@3 [g5,g6]@2 [a5,a6]@3, ~@5 [g3,bb3,d4]@5 ~ [d3,g3,bb3]@5", // G Bb G A Gm
  AQ: "[g1,g2,bb5,bb6]@5 [a5,a6]@3 [bb5,bb6]@3 [g5,g6]@2 [bb5,bb6]@3, ~@5 [g3,bb3,d4]@5 ~ [d3,g3,bb3]@5", // Gm A Bb G Bb Gm
  AR: "[a5,a6]@3 [g5,g6]@2 [g5,g6]@3 [bb5,bb6]@3 [g5,g6]@2 [a5,a6]@3, [g1,g2]@5 [g3,bb3,d4]@5 ~ [d3,g3,bb3]@5", // A G Bb G A G Gm
  AS: "[f1,f2,ab5,ab6]@5 [ab5,ab6]@3 [c6,c7]@3 [ab5,ab6]@2 [bb5,bb6]@3, ~@5 [ab3,c4,eb4]@5 ~ [f3,ab3,c4]@5", // Fm Ab C Ab Bb Ab Fm
  AT: "[f1,f2,c6,c7]@5 [bb5,bb6]@3 [c6,c7]@3 [ab5,ab6]@2 [c6,c7]@3, ~@5 [ab3,c4,eb4]@5 ~ [f3,ab3,c4]@5", // F5 Bb C Ab C Ab Fm
  AU: "[bb5,bb6]@3 [ab5,ab6]@2 [ab5,ab6]@3 [c6,c7]@3 [ab5,ab6]@2 [bb5,bb6]@3, [f1,f2]@5 [ab3,c4,eb4]@5 ~ [f3,ab3,c4]@5", // Bb Ab C Ab Bb F Ab Fm
  AV: "[f1,f2,c6,c7]@5 [ab5,ab6]@3 [c6,c7]@3 [bb5,bb6]@2 [ab5,ab6]@3, ~@5 [ab3,c4,eb4]@5 ~ [f3,ab3,c4]@5", // F5 Ab C Bb Ab Fm
  AW: "[g1,g2,g4,g5]@5 [g3,bb3,d4]@5 ~ [d3,g3,bb3]@5", AX: "[d2,d3,d4]@3 ~@8 [d4,a4]@3 ~@2",
  AY: "[a4,eb5] ~@2 [d4,a4] ~ [a4,eb5] ~@2 [d4,a4] ~@2 [a4,eb5] ~ [d4,a4] ~@2", // Adim D5 Adim D5 Adim D5
  AZ: "[a4,eb5]@3 ~@2 [d4,a4]@3 ~@3 [d2,gb2,a2,d3,d4,gb4,a4,d5]@5", // Adim D5 D
  BA: "eb4 [eb4,f4] f4 [eb4,f4] eb4 [eb4,f4] f4 [eb4,f4] eb4 [eb4,f4] f4 [eb4,f4] eb4 [eb4,f4] f4 [eb4,f4], f2@3 ~@2 [ab3,c4]@3 ~@3 f3@3 ~@2", // Ebsus2 Ab
  BB: "d4 eb4 ~@3 [g4,bb4,d5,g5]@3 [bb4,bb5]@3 [g4,g5]@2 [a4,a5]@3, [g1,g2]@5 [d3,g3,bb3,d4]@5 ~ [d3,g3,bb3,d4]@5", // Gm Bb G A G Gm
  BC: "[g1,g2,bb4,bb5]@5 [a4,a5]@3 [bb4,bb5]@3 [g4,g5]@2 [bb4,bb5]@3, ~@5 [d3,g3,bb3,d4]@5 ~ [d3,g3,bb3,d4]@5", // Gm A Bb G Bb Gm
  BD: "[g1,g2,a4,a5]@5 [g4,bb4,d5,g5]@3 [bb4,bb5]@3 [g4,g5]@2 [a4,a5]@3, ~@5 [d3,g3,bb3,d4]@5 ~ [d3,g3,bb3,d4]@5", // Gsus2 Gm Bb G A Gm
  BE: "[eb3,eb4]/4", BF: "~@5 g3 ~@2 bb3 ~@2 g3 ~ a3 ~@2, db2 ~",
  BG: "db2 eb2 ~ db2 eb2 [db2,g4] ~ eb2 [db2,bb4] eb2 ~ [db2,g4] eb2 [db2,a4] ~ eb2, bb3@5 ~@11", // Dbdim Gb Dbdim Gbm
  BH: "db2 eb2 ~ db2 eb2 [db2,eb5] ~ eb2 [db2,g5] eb2 ~ [db2,eb5] eb2 [db2,f5] ~ eb2, bb4@3 ~@13", // Dbsus2 Dbdim Dbsus2 Db
  BI: "db2 eb2 ~ db2 eb2 [db2,eb6] ~ eb2 [db2,g6] eb2 ~ [db2,eb6] eb2 [db2,f6] ~ eb2, g5@5 ~@11", // Dbsus2 Dbdim Dbsus2 Db
  BJ: "db2@5 ~@11, g6@3 ~@13", BK: "[db2,db3,g3,bb3,eb4,g4]", BL: "[d2,d3,g3,bb3,d4,g4]/3", BM: "[d2,d3,g3,bb3,d4,g4]",
  BN: "[d2,d3,g3,bb3,eb4,g4]/3", BO: "[d2,d3,g3,bb3,eb4,g4]", BP: "[c2,c3,eb4,ab4,eb5]@5 ~@11",
  BQ: "~@5 [g1,g2] ~@2 [bb1,bb2] ~@2 [a1,a2] ~ [bb1,bb2] ~@2", // G Bb A Bb
  BR: "[a1,a2]@3 [g1,g2]@2 [g1,g2] ~@2 [a1,a2] ~@2 [bb1,bb2] ~ [g1,g2] ~@2", BS: "[bb1,d3]@5 ~@11",
  BT: "[d2,gb2,a2,d3,d4,gb4,a4,d5]@5 ~@11", BU: "[g1,bb1,d2,g2,g4,bb4,d5,g5]@5 ~@11",
})).s("gm_piano").gain(0.2)

stack(piano)

More by Saint-Saens