Strudelify

every 27 years

Benjamin Wallfisch

KeyE♭ majorTempo71 bpm
0:00/0:00
// every 27 years — Benjamin Wallfisch
// 71 bpm, 4/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 (4/4 at bar 1, 6/4 at bar 38) are rendered on a constant 4/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/6094102; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 40 bars on a 48-step grid, each part at one level. Source detail keeps the original performance.
setcpm(71/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@4 B@8 C D E F G H I J K L M N O P Q R S T U V W X Y@6>".pickRestart({
  A: "[~@33 [c4,e4]@20 ~ [c4,e4]@10 ~@11 [b3,e4]@20 ~@2 [b3,e4]@10 ~@11 [c4,eb4]@20 ~ [c4,eb4]@10 ~@11 [b3,eb4]@20 ~@2 [b3,eb4]@10, ~@22 g3@40 ~@3 g3@40 ~@2 g3@40 ~@3 ab3@40 ~@2]/4", // C E5 Cm B
  B: "[~@11 [c4,f4]@20 ~ [c4,f4]@10 ~@12 [c4,e4]@20 ~ [c4,e4]@10 ~@11 [db4,e4]@20 ~@2 [db4,e4]@10 ~@11 [f3,a3,d4]@20 ~ [f3,a3,d4]@10 ~@11 [ab3,db4,f4]@20 ~@2 [ab3,db4,f4]@10 ~@11 [f3,a3,d4]@20 ~ [f3,a3,d4]@10 ~@12 [gb3,b3]@20 ~ [gb3,b3]@10 ~@11 [b3,eb4]@20 ~@2 [b3,eb4]@10 ~@12 [c4,eb4]@20 ~ [c4,eb4]@10, ab3@40 ~@3 a3@40 ~@3 ab3@40 ~@2 [d1,d2]@40 ~@3 [db1,db2]@40 ~@2 [d1,d2]@40 ~@3 [b1,b2]@40 ~@3 [ab1,ab2]@40 ~@2 [ab1,ab2]@43]/8", // F5 C Dbm Dm Db Dm B5 B …
  C: "~@2 a2@11 ~ [a2,e3]@21 ~ [a2,e3]@12, ~ a1@22 ~", D: "~ a2@12 ~ [a2,e3]@21 ~ [a2,e3]@11 ~, ~ a1@44 ~@3",
  E: "~@12 [f3,a3]@23 ~ [f3,a3]@11 ~, c3@23 ~", F: "~@12 [e3,a3]@23 ~ [e3,a3]@11 ~, c3@23 ~",
  G: "~@12 [f3,ab3]@23 ~ [f3,ab3]@11 ~, c3@23 ~", H: "~@12 [e3,ab3]@23 ~ [e3,ab3]@11 ~, [db2,db3]@23 ~",
  I: "~@12 [f3,bb3]@23 ~ [f3,bb3]@11 ~, [bb1,bb2]@23 ~", J: "~@12 [f3,a3]@23 ~ [f3,a3]@11 ~, [d2,d3]@23 ~",
  K: "~@12 [gb3,a3]@23 ~ [gb3,a3]@11 ~, [gb1,gb2]@23 ~", L: "~@12 [e3,bb3]@23 ~ [e3,bb3]@11 ~, [db2,db3]@23 ~",
  M: "~@12 [e3,a3]@23 ~ [c2,c3]@11 ~, [c2,c3]@17 ~@7", N: "~@12 [f3,a3]@23 ~ [f3,a3]@11 ~, [f1,f2]@23 ~",
  O: "~@12 [eb3,gb3]@23 ~ [eb3,gb3]@11 ~, [eb1,eb2]@23 ~", P: "~@12 [d3,f3,a3]@23 ~ [d3,f3,a3]@11 ~, [d1,d2]@23 ~",
  Q: "~@12 [eb3,gb3,bb3]@23 ~ [eb3,gb3,bb3]@11 ~, [eb1,eb2]@23 ~", R: "c3@11 ~ [c3,g3]@23 ~ [c2,c3]@11 ~, c2@17 ~@7",
  S: "~@12 [e3,a3]@23 ~ [e3,a3]@11 ~, [a1,a2]@23 ~", T: "~@12 [eb3,ab3]@23 ~ [eb3,ab3]@11 ~, ab2@23 ~",
  U: "~@12 [eb3,g3]@23 ~ [eb3,g3]@11 ~, [c2,c3]@23 ~", V: "~@12 [gb3,b3]@23 ~ [gb3,b3]@11 ~, [b1,b2]@23 ~",
  W: "~@12 [g3,c4]@23 ~ [g3,c4]@11 ~, [c2,c3]@23 ~", X: "~@12 [a3,e4]@23 ~ [a3,e4]@11 ~, a2@23 ~",
  Y: "[~@13 [db3,gb3]@21 ~ [db3,gb3]@11 ~@13 [gb3,bb3]@23 ~ [gb3,bb3]@11 ~@12 [g3,bb3]@22 ~ [g3,bb3]@11 ~@11 [g3,bb3]@22 ~ [g3,bb3]@12 ~ [g2,g3]@81 ~@20, [gb1,gb2]@44 ~@3 [gb1,gb2]@46 ~@2 g2@43 ~@2 g2@44 ~@104]/6", // Gb5 Gb Gm G Gb
})).s("gm_piano").gain(0.1)

stack(piano)