Strudelify

Grandfathers Clock

Fred Weber

KeyA♭ majorTempo70 bpm
0:00/0:00
// Grandfathers Clock — Fred Weber
// 70 bpm, 2/4, key Ab major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (1/4 at bar 1, 2/4 at bar 1) are rendered on a constant 2/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/5980042; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 124 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(70/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@2 I J I K L J M@2 I J I K L J M@2 N@2 O N@2 P Q R S T S U V W X@2 B C D E F G H@2 I J I K L J Y@2 I J
  I K L J Y@2 N@2 O N@2 P Q R S Z S U V W AA@2 AB AC AD AE AF AG AH@2 AI AJ AI AK AL AM AN AO AI AJ AI AK AL AM AN AP AQ
  AR AS AT AQ AR AU AV AI AJ AW AK AL AX AY AZ BA BB@2
>`.pickRestart({
  A: "~@2 eb4!2", B: "~ [c4,eb4] [c4,eb4,g4] [c4,eb4,ab4], ab2@15 ~, ab4 ~",
  C: "~ [db4,eb4] [db4,eb4,ab4] [db4,eb4,bb4], eb2@15 ~, bb4 ~", // Dbsus2 Eb7
  D: "~ [c4,eb4] [c4,eb4,db5] [c4,eb4,c5], ab2@15 ~, c5 ~", E: "~ [bb3,db4] [db4,f4,c5] [db4,f4,bb4], db3@15 ~, f4 ~",
  F: "~ [c4,eb4] [c4,eb4,bb4] [c4,eb4,ab4], eb3@15 ~, ab4 ~", // Cm Cm7 Ab
  G: "~ [db4,eb4] [db4,eb4,c5] [db4,eb4,bb4], eb2@15 ~, g4 ~", // Dbsus2 Cm Eb7
  H: "[~ [c4,eb4] [eb3,c4,eb4] [c3,c4,eb4] [ab2,c4,eb4]@2 ~@2, ab4@23 ~@9, ab2 ~@3]/2", I: "[ab2,ab3,c4,eb4]@15 ~",
  J: "[eb2,g3,db4,eb4]@15 ~", K: "[db3,bb3,db4,f4]@15 ~", L: "[eb3,ab3,c4,eb4]@15 ~",
  M: "[ab2@2 eb3 c3 ab2@2 ~@2, [ab3,c4,eb4]@15 ~]/2", N: "ab2 [c4,eb4,ab4]", O: "db3 [db4,f4,ab4]",
  P: "bb2 [bb3,d4,ab4]", Q: "eb2@2 bb2 g2, ~ [bb3,eb4,g4]", R: "[eb2,bb3,eb4,g4] ~", S: "[ab2,c4,eb4,ab4]@15 ~",
  T: "[eb2,db4,eb4,g4]@15 ~", U: "[db3,db4,f4,bb4]@15 ~", V: "[eb3,eb4,ab4,c5]@15 ~", W: "[eb2,db4,g4,bb4]@15 ~",
  X: "[ab2@2 eb3 db3 ab2@2 eb4@2, [c4,eb4,ab4]@23 ~@9]/2", Y: "[ab2@2 eb3 c3 ab2@2 ~@2, [ab3,c4,eb4]@23 ~@9]/2",
  Z: "[eb2,db4,eb4,ab4]@15 ~", AA: "[ab2@2 eb3 db3 ab2@2 f4!2, [c4,eb4,ab4]@23 ~@9]/2",
  AB: "~ [d4,f4] [d4,f4,a4] [d4,f4,bb4], bb2@15 ~, bb4 ~", AC: "~ [eb4,f4] [eb4,f4,bb4] [eb4,f4,c5], f2@15 ~, c5 ~",
  AD: "~ [d4,f4] [d4,f4,eb5] [d4,f4,d5], bb2@15 ~, d5 ~", AE: "~ [c4,eb4] [eb4,g4,d5] [eb4,g4,c5], eb3@15 ~, g4 ~",
  AF: "~ [d4,f4] [d4,f4,c5] [d4,f4,bb4], f3@15 ~, bb4 ~", AG: "~ [eb4,f4] [eb4,f4,d5] [eb4,f4,c5], f2@15 ~, a4 ~",
  AH: "[~ [d4,f4] [f3,d4,f4] [d3,d4,f4] [bb2,d4,f4]@2 ~@2, bb4@23 ~@9, bb2 ~@3]/2", AI: "~ [bb3,d4,f4]!3, bb2 ~",
  AJ: "~ [a3,eb4,f4]!3, f2 ~", AK: "~ [c4,eb4,g4]!3, [eb2,eb3] ~", AL: "~ [bb3,d4,f4]!3, [f2,f3] ~",
  AM: "~ [a3,eb4,f4]!3, [f2,f3] ~", AN: "~ [bb3,d4,f4] [f3,bb3,d4,f4] [d3,bb3,d4,f4], bb2 ~", AO: "[bb2,bb3,d4,f4] ~",
  AP: "[bb2,bb3,d4,f4]@2 d3 eb3", AQ: "~ [d4,f4,bb4] d3 [c3,d4,f4,bb4], f3 ~",
  AR: "~ [d4,f4,bb4] a2 [bb2,d4,f4,bb4], bb2 ~", AS: "c3 [bb2,eb4,g4,bb4] a2 [g2,eb4,g4,bb4]",
  AT: "~ [d4,f4,bb4] [d3,d4,f4,bb4] [eb3,d4,f4,bb4], f2 ~", AU: "c3 [a2,eb4,f4,a4] [g2,eb4,f4,a4] [a2,eb4,f4,a4]",
  AV: "[f2,eb4,f4,a4] ~", AW: "~ [c4,eb4,g4]!3, bb2 ~", AX: "~ [a3,eb4,f4]!3, g2 ~",
  AY: "~ [f3,bb3,d4]!2 [bb3,d4,f4], bb2 ~", AZ: "~ [f4,bb4]@7 ~@8, [bb2,d4] ~",
  BA: "~ [bb4,d5]@7 [d2,d3]@8, [f2,f3,f4] ~", BB: "[~ bb4@23 ~@8, [bb1,bb2,d4,f4]@3 ~]/2",
})).s("gm_piano").gain(0.3)

stack(piano)