Strudelify
KeyE♭ majorTempo45 bpm
0:00/0:00
// Fado da Hylaria — Edição: Casa Suéca - Lisboa
// 45 bpm, 2/4, key Eb 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, 2/4 at bar 2) are rendered on a constant 2/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/5905041; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 27 bars on a 32-step grid, each part at one level. Source detail keeps the original performance.
setcpm(45/2)

// 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@5 Q@4>".pickRestart({
  A: "[c3,eb4]@3 [eb3,g4]@2 [g3,c5]@3 [c4,eb4]@3 [g3,g4]@2 [eb3,c5]@3 [c3,eb4]@3 [eb3,g4]@2 [g3,c5]@3 [c4,eb4]@2 ~ [g3,g4]@2 [eb3,c5]@3", // Cm Eb C5 Cm G Cm Eb C5 …
  B: "[c3,eb4]@3 [eb3,g4]@2 [g3,c5]@3 [c4,eb4]@3 [g3,g4]@2 [eb3,c5]@3 c3@3 eb3@2 g3@3 [c4,c5]@3 g3@2 eb3@3, ~@2 eb5 ~", // Cm Eb C5 Cm G Cm C
  C: "[d3,f4]@3 [f3,g4]@2 [g3,b4]@3 [b3,f4]@3 [g3,g4]@2 [f3,b4]@3 [d3,f4]@3 [f3,g4]@2 [g3,b4]@3 [b3,f4]@2 ~ [g3,g4]@2 [f3,b4]@3", // Dm Fsus2 G Bdim G Fdim Dm Fsus2 …
  D: "[c3,eb4]@3 [eb3,g4]@2 [g3,c5]@3 [c4,eb4]@3 [g3,g4]@2 [eb3,c5]@2 ~ c3@3 eb3@2 g3@3 [c4,c5]@3 g3@2 eb3@3, ~@2 d5 ~", // Cm Eb C5 Cm G Cm C
  E: "[c3,eb6]@3 ~@2 g3@3 [c4,c6]@3 ~@2 eb3@3 [c3,ab5]@3 ~@2 g3@3 f5@3 ~@2 eb3@3, ~@3 eb3@2 ~@6 g3@3 ~@5 eb3@3 ~@2 c4@2 ~ g3@3 ~@2, ~ d6 ~ bb5 ~ g5 ~ eb5", // Cm C Fm
  F: "d3@3 f3@2 g3@3 [b3,g4,g5]@3 g3@2 f3@3 d3@3 f3@2 g3@3 b3@3 g3@2 f3@3, [ab4,ab5]@8 ~@8 g3@5 ~@11", // Em Ab
  G: "g2@3 b2@2 d3@3 f3@3 d3@2 b2@3 g2@3 b2@2 d3@3 f3@2 ~ d3@2 b2@3, g4 f4 eb4 d4",
  H: "c3@3 eb3@2 g3@3 c4@3 g3@2 eb3@3 ~@3 eb3@2 g3@3 c4@3 g3@2 eb3@3, d4@8 ~@8 c3@5 ~@11",
  I: "c3@3 eb3@2 g3@3 c4@3 g3@2 eb3@3 [c3,c6]@3 ~@2 g3@3 [c4,c6]@3 ~@2 eb3@3, eb6@8 d6@8 ~@3 eb3@3 ~@5 g3@3 ~@2, ~@5 b5 ~ g5", // C
  J: "f3@3 ab3@2 d4@3 [f4,ab4]@3 d4@2 ab3@3 f3@3 ab3@2 d4@3 [f4,ab5]@3 d4@2 ab3@3, bb4 ~ bb5 ~", // Fm
  K: "d3@3 f3@2 g3@3 b3@3 g3@2 f3@3 [g2,f4]@3 ~@2 d3@3 d4@3 ~@2 b2@3, ab4@8 g4@8 ~@3 b2@3 ~@2 f3@2 ~ d3@3 ~@2, ~@5 eb4 ~ g4", // G7
  L: "c3@3 eb3@2 g3@3 c4@3 g3@2 eb3@3 [c3,eb4,g4,c5]@8 ~@8, c4 [eb4,g4,c5] ~@2", // Cm
  M: "[c3@2 eb3@2 g3@2 ~ c3@2 eb3@2 g3@2 [eb3,c4]@2 [g3,eb4]@2 [c4,g4]@2 ~ [eb3,c4]@2 [g3,eb4]@2 [c4,g4]@2 d3@2 f3@2 ~ g3@2 [b3,g4]@2 g3@2 f3@2 d3@2 f3@2 ~ g3@2 b3@2 g3@2 f3@2 g2@2 ~ d3@2 f3@2 g2@2 d3@2 f3@2 [b2,g3]@2 ~ [f3,b3]@2 [g3,d4]@2 [b2,g3]@2 [f3,b3]@2 [g3,d4]@2 ~ c3@2 eb3@2 g3@2 [c3,c4]@2 eb3@2 g3@2 ~ d5@2 c5@2, ~@26 ab4@7 ~@6 ab5@7 g5@6 ~@27 d4@6 ~@7 [c3,eb3,g3,c4]@4]/3", // Cm C5 Cm C5 Em Fdim G5 Em …
  N: "b4@2 c5@2 g4@2 ~ eb4@2 eb3@2 eb3@2 ~ g3@2 c4@2 g3@2 ~ eb3@2 eb3@2 ~ g3@2 c4@2 eb4@2, ~@9 c4@7 ~@4 eb4@3 g4@9",
  O: "~@3 g3@2 ~ f3@2 f3@2 ab3@2 ~ d4@2 ab3@2 ~ f3@2 f3@2 ab3@2 ~ d4@2 f4@2 ~ d4@2, ~ c4@2 ~@29, ~@2 g4@3 ~ bb4@7 ab4@7 bb5@7 ab5@5",
  P: "[ab3@2 d3@2 ~ f3@2 g3@2 ~ b3@2 ~@2 f3@2 ~ g2@2 b2@2 ~ d3@2 f3@2 d3@2 f5 b2@2 c3@2 ~ eb3@2 g3@2 c4@2 ~ g3@2 eb3@2 ~ c3@7 ~@10 g3@2 ~@3 e3@2 ~ c4@2 ~@3 g3@2 c4@2 ~ c4@2 ~ e3@2 ~@3 g3@2 b3@2 ~ f3@2 g3@2 ~@4 d4@2 f4@2 ~ f4@2 d4@2 ~@3 b3@2 ~ f4@2 ~ b3@2 d4@2 ~@3 b3@2 ~ f4@2 g4@2 ~ d4@2 ~@3 g3@2 ~ e4@2 ~@3 c4@2 e4@2 ~@4 [c4,b4]@2 [e4,c5]@2, ~@2 g4@10 g3@2 ~@46 c3@6 c3@6 ~ c3@6 ~@4 g3@2 ~ d3@6 ~ d3@6 a4@7 [g4,g5]@3 ~@3 g3@6 ~ g3@6 g3@6 ~@6 b3@2 ~@3 c4@2 ~@3 g3@2 ~@4 e3@2 g3@2 ~@3, ~@13 b4@4 d5@11 eb5@3 d5@7 c5@7 ~@17 e3@2 ~ c4@2 ~@3 g3@2 ~@3 e3@2 ~@3 e4@2 ~@6 f3@2 ~@8 b3@2 a5@6 ~@48 c5@2 ~@4, ~@99 g3@2 b3@2 ~@8 b3@2 ~@3 d4@2 ~@6 f4@2 ~@3 d4@2 ~@3 f4@2 ~@2 c3@6 ~ c3@6 ~ [c3,d5]@2 ~@6]/5", // Cmaj7 C G Csus2
  Q: "[~@3 e3@2 [e2,e3]@2 g3@2 ~ c4@3 e4@2 c4@3 g3@3 e3@2 g3@3 c4@3 e4@2 c4@3 g3@3 [d2,d3]@2 f3@3 a3@3 d4@2 a3@3 f3@3 f4@2 e4@3 d4@3 e4@2 f4@3 gb4@3 g2@2 b2@3 d3@3 f3@2 d3@3 b2@3 g2@3 b2@3 ~ d3@3 f3@3 [d4,f4]@4 b2@3 c3@2 ~ e3@2 g2@2 c3@2 ~ e3@2 g3@2 ~@2 c6@6 ~, [c4,e5]@2 g5@2 ~ [c5,c6]@5 b4@5 c5@5 ~ g4@5 gb4@5 g4@5 ~ [b4,b5]@8 a4@8 ~@16 [f4,g4]@5 gb4@5 g4@5 ~ [g4,b4]@6 ~ [f4,a4]@6 d3@3 ~@4 e4@7 ~@16, ~ g3@2 ~@50 d3@8 ~@8 b3@39 ~@12 [c4,e5,g5]@7 ~]/4", // E D Dm C B Fsus2 G F …
})).s("gm_piano").gain(0.3)

stack(piano)