Strudelify

Piano Sonata No.24 Op.78

Ludwig van Beethoven

KeyB♭ majorTempo31 bpm
0:00/0:00
// Piano Sonata No.24 Op.78 — Ludwig van Beethoven
// 31 bpm, 2/4, key Bb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/3475681; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 74 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(31/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 N O P Q R S T U V W X Y Z AA@2 AB B C D E F G H AC AD AE AF AG AH AI AJ AK AL AM AN@2 AO AP
  AQ AR AS AT AU AV AW AX AY AZ BA BB BC BD BE BF BG BH BI BJ BK BL@2
>`.pickRestart({
  A: "ab3 eb3 ab3 eb3 g3 eb3 g3 eb3, ab2 db3", B: "ab3 eb3 ab3 eb3 bb3 eb3 bb3 eb3, c3 g2",
  C: "ab3 eb3 bb3 eb3 c4 ab3 d4 ab3, ab2 g2 f2 f3", D: "g3 bb3 g3 bb3 g3 bb3 g3 bb3, eb3 eb2",
  E: "g3 bb3 g3 bb3 g3 eb3 g3 eb3, db2 db3", F: "ab3 eb3 ab3 eb3!2 c3 eb3 c3, c3 f2", G: "f3 db3 f3 db3!5, bb1 eb2",
  H: "db3 eb3 db3 eb3 [ab1,c3]@2 ~@2, ab1 ab2 ~@2", // Ab
  I: "[ab3,c4] [eb3,eb4] [ab3,c4] [eb3,eb4] [g3,bb3] [eb3,eb4] [g3,bb3] [eb3,eb4], ab2 db3", // Ab Eb Ab Eb Gm Eb Gm Eb
  J: "[ab3,eb4] [eb3,ab4] [ab3,eb4] [eb3,ab4] [g3,eb4] [eb3,bb4] [g3,eb4] [eb3,bb4], c3 g2", // Ab5 Cm Eb5 Cm Eb5
  K: "[ab3,eb4] [eb3,ab4] [g3,eb4] [eb3,bb4] [f3,ab4] [ab2,c5] [f3,ab4] [ab2,d5], ab2 g2 f2!2", // Ab5 Cm Eb5 Fm Ab Fm Abdim
  L: "[eb2,g4] [g2,bb4] [bb2,g4] [eb3,bb4] [g3,g4] [bb3,bb4] [g3,g4] [bb3,bb4]", // Eb Gm Eb Eb5 G Bb G Bb
  M: "[db2,g4] [g2,bb4] [bb2,g4] [db3,bb4] [g3,g4] [bb3,eb4] [g3,g4] [db3,eb4]", // Dbdim Gm Eb Gb G Eb5 G Dbsus2
  N: "ab4 [eb3,eb4] ab4 [eb3,eb4] [c3,eb4] [f3,c4] [c3,eb4] [f3,c4], c3!2 f2@2", // Eb Cm F5 Cm F5
  O: "[db3,f4] [f3,db4] [db3,f4] [f3,db4] [bb2,db4] [eb3,db4] [bb2,db4] [eb3,db4], bb2 eb2", // Db Bbm Eb7 Bbm Eb7
  P: "db4 [eb3,eb4] [g3,db4] [eb3,eb4] [ab3,c4]@2 ~@2, ab2@3 ~", Q: "~ c4!7", R: "[e3,g3,c4]!4 [f3,ab3,c4]!4",
  S: "[g3,bb3,e4]!4 [ab3,c4,f4]!4", T: "[bb3,f4,ab4]!4 [b3,f4,ab4] [f3,ab3,b3] [b3,d4,ab4]!2",
  U: "[c4,eb4,g4]!4 [ab3,eb4]!4", V: "~ [bb3,eb4,g4]!3 ~ [bb2,d3,ab3]!3", W: "[eb3,g3]@2 ~ bb3 g3 bb3 g3 eb3",
  X: "eb3 d3!2 c3!2 b2!2 bb2, bb1, [f3,ab3]!3 [d3,f3,ab3]", Y: "[eb2,bb2,eb3,g3]@2 ~ bb2 g2 bb2 g2 eb2",
  Z: "[bb1,f3,ab3] [bb2,f3,ab3]", AA: "[f3 e3!2 eb3!2 d3!2 eb3 eb3 e3!2 eb3!2 d3!2 db3, [eb2,g3]]/2",
  AB: "[c3,ab3] eb3 ab3 eb3 ab3 eb3 ab3 eb3, [ab1,ab2] db3", AC: "[b3,eb4]!12, [ab2,ab3] ~",
  AD: "[db4,eb4]!4 [bb3,db4,eb4] [a3,db4,eb4] [db4,eb4]!6, bb3@8 ~@4 bb3 ~ bb3 ~ ab3 ~ g3 ~ f3 ~ eb3 ~", // Dbsus2 Eb7 Ebm7b5 Dbsus2
  AE: "[b3,eb4]!12, ab3 ~@3", // B
  AF: "[bb3,eb4]!4 [eb3,bb3,eb4] [d3,bb3,eb4] [g3,bb3,eb4]!6, eb3@8 ~@4 eb3 ~ e3 ~ eb3 ~ db3 ~ b2 ~ bb2 ~", // Eb5 Ebmaj7 Eb
  AG: "[b3,eb4]!12, ab2 ~@3", AH: "[a2,b2,eb3,gb3]!6 [ab2,b2,e3,ab3]!6, gb4 ~ b4 ~",
  AI: "[db3,e3,gb3,bb3]!6 [b2,e3,ab3,b3]!3 [b1,b2]!3, e5 ~ b4 [gb3,a3,b3]", AJ: "[ab3,b3]!12, [e2,e3] ~@3",
  AK: "[ab3,b3]!12, [e2,e3] ~", // Abm E
  AL: "[a3,b3]!4 [gb3,a3,b3] [f3,a3,b3] [a3,b3]!6, gb3@8 ~@4 gb3 ~ gb3 ~ e3 ~ eb3 ~ db3 ~ b2 ~", // Asus2 B7 Bm7b5 Asus2
  AM: "[ab3,b3]!12, e3 ~@3", AN: "[d3,ab3,b3]!12, ~@2 f1 ~ ab1 ~ b1 ~ d2 ~ f2 ~ ab2@6 ~@6",
  AO: "[db3,ab3,bb3]!3 [bb2,db3,ab3,bb3] [db3,ab3,bb3]!2 [db3,g3,bb3]!3 [bb2,db3,eb3,g3,bb3] [db3,eb3,g3,bb3]!2, ~@2 e2 ~ ab2 ~@9 eb2 ~ g2 ~@7", // Bbm7 Gdim Eb7
  AP: "c3@2 eb3 ~ eb3 ~ ab3@2 eb3 ~ eb3 ~ g3@2 eb3 ~ eb3 ~ g3@2 eb3 ~ eb3 ~, [ab1,ab2] db3", // Ab
  AQ: "ab3@2 eb3 ~ eb3 ~ ab3@2 eb3 ~ eb3 ~ bb3 ~ eb3 ~ eb3 ~ bb3@2 eb3 ~ eb3 ~, c3 g2",
  AR: "ab3@2 eb3 ~ eb3 ~ bb3@2 eb3 ~ eb3 ~ c4@2 ab3 ~ ab3 ~ d4@2 ab3 ~ ab3 ~, ab2 g2 f2 f3",
  AS: "g3@2 bb3 ~ bb3 ~ g3@2 bb3 ~ bb3 ~ g3@2 bb3 ~ bb3 ~ g3@2 bb3 ~ bb3 ~, eb3 eb2",
  AT: "g3 bb3!2 g3 bb3!2 g3 eb3!2 g3 eb3!2, db2 db3", AU: "ab3 eb3!2 ab3 eb3!3 c3!2 eb3 c3!2, c3 f2",
  AV: "f3 db3!2 f3 db3!2 g3 db3!5, bb1 eb2", AW: "db3 eb3!2 db3 eb3!2 [ab1,c3]@3 ~@3, ab1 ab2 ~@2",
  AX: "[ab3,c4] [eb3,eb4]!2 [ab3,c4] [eb3,eb4]!2 [g3,bb3] [eb3,eb4]!2 [g3,bb3] [eb3,eb4]!2, ab2 db3", // Ab Eb Ab Eb Gm Eb Gm Eb
  AY: "[ab3,eb4] [eb3,ab4]!2 [ab3,eb4] [eb3,ab4]!2 [g3,eb4] [eb3,bb4]!2 [g3,eb4] [eb3,bb4] [eb3,eb5], c3 g2", // Ab5 Cm Eb5 Cm Eb5 Eb
  AZ: "[ab3,eb4] [eb3,ab4]!2 [g3,eb4] [eb3,bb4]!2 [f3,ab4] [ab2,c5]!2 [f3,ab4] [ab2,d5]!2, ab2 g2 f2!2", // Ab5 Cm Eb5 Fm Ab Fm Abdim
  BA: "g4 bb4!2 g4 bb4!2 g4 bb4!2 g4 bb4!2, eb2 ~ g2 ~ bb2 ~ eb3 ~ g3 ~ bb3 ~ eb4@12",
  BB: "g4 bb4!2 g4 bb4!2 g4 eb4!2 g4 eb4!2, db2 ~ g2 ~ bb2 ~ db3 ~ g3 ~ bb3 ~ db4@12",
  BC: "ab4 eb4!2 ab4 eb4!3 c4!2 eb4 c4!2, c4 f3",
  BD: "f4 db4!2 f4 db4!2 [bb2,f4] [eb3,db4]!2 db4 [eb3,db4]!2, bb2@2 eb2!2", // Bb5 Eb7
  BE: "ab2@2 eb3 ~ eb3 ~ eb3 ~ eb3 ~ eb3 ~ eb3@2 eb3@2 eb3@2 eb3@2 eb3@2 eb3@2, c4 ~@3", BF: "[eb2,db3,eb3]!12",
  BG: "[ab2,c3,eb3]@2 eb3 ~ eb3 ~ eb3 ~ eb3 ~ eb3 ~ eb3@2 eb3@2 eb3@2 eb3@2 eb3@2 eb3@2, ~@18 eb5@4 e5 ~", // Ab
  BH: "[eb2,db3,eb3]!4 [eb2,db3,eb3,eb5] [eb2,db3,eb3,db5] [eb2,db3,eb3,c5] [eb2,db3,eb3,bb4] [eb2,db3,eb3,ab4] [eb2,db3,eb3,g4] [eb2,db3,eb3,db5] [eb2,db3,eb3,g4], f5 ~@2", // Eb7 Cm Eb7 Dbsus2 Eb7
  BI: "[ab2,c3,eb3,ab4] ~ [eb4,g4]@2", BJ: "[ab3,ab4] ~ [eb3,db4,g4]@2", BK: "[ab3,c4] ~ [eb2,db3,g3]@2",
  BL: "[[ab2,c3]@3 ~@3 [ab1,c3,eb3,ab3]@3 ~@3 [ab1,ab2,c3,ab3]@19 ~@17]/2", // Ab
})).s("gm_piano").gain(0.2)

stack(piano)

More by Ludwig van Beethoven