Strudelify

Sonata I

Johann Matheson

KeyD minorTempo120 bpm
0:00/0:00
// Sonata I — Johann Matheson
// 120 bpm, 3/4, key D minor. 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, 3/4 at bar 64, 3/2 at bar 146, 6/8 at bar 185) are rendered on a constant 3/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/5924247; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 267 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/3)

// Notation: c3@3 lasts 3 steps · ~ is a rest · "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.

// other · recorder · "Alto 2"
const recorder = note(`<
  A B@3 C@4 D E@3 F@2 G@2 H@4 I J@3 K L@5 M@2 N@2 O@2 P@6 Q@2 R S@3 T@4 U@8 V@2 W@2 ~@4 X Y Z AA AB AC AD AE AF AG AH AI
  AJ Y Z AK AL AK AM AN AO AP AQ AR AS Y AT X AU AV AW AX AY AZ BA AZ BB BC BD BE BF BG BH BI BJ BK BL BM@2 BN BO BP BQ
  BR BS BT BD BE BU BV BW BX BY BZ CA CB BQ CC BV CD CE CF CG BV CD CE CF CH CI@6 CJ@7 CK@7 CL@3 CM@3 CN@3 CO@6 CP@4 CQ
  CR@2 CS CT CU CV CW CX CY@2 CQ CR@2 CS CT CU CV CW CX CZ@2 DA@2 DB@3 DC@2 DD DE DF DG DH@2 DI DJ@2 DK@2 DL DM DN DO DP
  DQ DR DS@2 DT DU DV DA@2 DB@3 DC@2 DD DE DF DG DH@2 DI DJ@2 DK@2 DL DM DN DO DP DQ DR DS@2 DT DU ~
>`.pickRestart({
  A: "~@9 a5@8 f5@7", B: "[~@2 a5@9 d5@44 d5@8 bb4@9]/3", C: "[d5@9 g4@35 c5@8 c5@9 a4@9 c5@9 f4@8 f5@9]/4",
  D: "d5@9 f5@8 bb4@7", E: "[~@2 g5@9 f5@9 e5@8 d5@9 e5@9 f5@9 g5@8 db5@4 ~ e5@4]/3",
  F: "[d5@9 db5 d5 db5@11 d5@4 d5@17 ~@5]/2", G: "[~@22 g4@9 d5@8 g5@9]/2",
  H: "[c5@22 c5@4 bb4@4 ~ a4@4 bb4@22 bb4@4 a4@4 g4@4 ~ a4@9 a4@8 c5@9]/4", I: "f5@9 e5@8 c5@7",
  J: "[~@2 e5@9 g5@9 f5@8 g5@9 e5@9 f5@9 d5@8 e5@9]/3", K: "c5@9 d5@8 bb4@7",
  L: "[~@2 a4@9 g4@9 a4@8 bb4@9 c5@9 d5@9 a4@8 bb4@22 a4@4 bb4@4 ~ c5@4 f4@22]/5",
  M: "[c5@4 d5@4 ~ e5@4 f5@4 e5@4 ~ f5@4 g5@4 ~ e5@4 d5@4 e5@4 ~ f5@4]/2",
  N: "[g5@4 f5@4 ~ g5@4 a5@4 f5@4 ~ e5@4 f5@4 ~ g5@4 f5@4 e5@4 ~ f5@4]/2",
  O: "[g5@4 e5 f5 ~ e5@10 f5@4 ~ f5@9 c6@8 a5@9]/2",
  P: "[f5@9 g5@8 c5@35 g5@9 bb5@9 g5@9 a5@8 d5@35 a4@4 ~ c6@4 b5 c6 b5@11]/6", Q: "[a5@4 ab5@9 e5@17 ~ d5@8 c5@9]/2",
  R: "a5@17 ab5@7", S: "[~@2 a5@17 ~ d5@8 c5@9 bb4@9 d5@9 bb4@8 d5@9]/3",
  T: "[g4@9 d5@8 g5@4 ~ f5@4 g5@4 ~ f5@4 g5@9 e5@8 f5@4 ~ e5@4 f5@4 e5@4 ~ f5@4 a5@4 ~ g5@4 f5@4 e5@4 ~ g5@4]/4",
  U: "[f5@4 e5@4 ~ d5@4 f5@4 e5@4 ~ f5@4 g5@4 ~ f5@4 e5@4 d5@4 ~ db5@8 a4@9 d5@9 e5@9 f5@43 e5@4 ~ d5@4 e5@26 d5@4 db5@4 ~ d5@4 f5@4 ~ e5@4 d5@4 db5@9]/8",
  V: "[d5@9 db5@13 d5@4 d5@9 c5@9 bb4 c5 bb4 c5]/2", W: "[bb4 c5 bb4 c5 bb4 c5 ~ bb4 c5 bb4 c5 bb4 c5 a4@35]/2",
  X: "~ d5!2", Y: "f5 c5 d5", Z: "e5 b4 c5", AA: "d5 a4 b4", AB: "c5@3 b4 c5 d5", AC: "c5@6 b4@2 b4 c5 b4@10 a4@4",
  AD: "a4@2 db5@3 db5", AE: "d5 db5 d5 e5 d5 db5", AF: "b4!3", AG: "e5 d5 e5 f5 e5 d5", AH: "c5 e5 d5",
  AI: "c5@8 b4 c5 b4@10 c5@4", AJ: "c5 e5!2", AK: "d5 b4 g4", AL: "c5@2 e5@3 e5", AM: "c5 d5 c5 d5 c5 d5",
  AN: "bb4 c5 bb4 c5 bb4 c5", AO: "a4 bb4 a4 bb4 a4 bb4", AP: "g4 a4 g4 a4 g4 a4", AQ: "f4 f5 g5", AR: "a5 e5 f5",
  AS: "g5 d5 e5", AT: "e5 db5@2", AU: "b4", AV: "~ c5!2", AW: "a4 a5!2", AX: "bb5 a5 g5", AY: "a5 f5 d5",
  AZ: "g5 e5 c5", BA: "f5 a5 f5", BB: "f5 a4!2", BC: "d5 db5 d5 e5 f5 g5", BD: "a5 bb5 a5 bb5 a5 bb5",
  BE: "g5 a5 g5 a5 g5 a5", BF: "f5 g5 f5 g5 f5 g5", BG: "e5@3 e5 c5@2", BH: "d5 gb5 d5", BI: "g5 d5 eb5", BJ: "c5 d5@2",
  BK: "g4", BL: "~ g4!2", BM: "[c5@4 c5!2]/2", BN: "f5 e5 f5", BO: "bb4 c5@2", BP: "f4 f5@2", BQ: "e5", BR: "d5 a5 bb5",
  BS: "c6 f5 g5", BT: "bb5 f5 g5", BU: "f5 g5 f5", BV: "e5 db5 d5", BW: "a4@2 d5", BX: "db5@2 d5", BY: "a4!2 d5",
  BZ: "db5 a5 e5", CA: "f5", CB: "~ g5 d5", CC: "f5@3 f5 g5 f5", CD: "a4", CE: "f5 d5 bb5",
  CF: "d5@8 db5 d5 db5@10 d5@4", CG: "d5@3 f5 g5 f5", CH: "d5", CI: "[f5@44 b4@43 c5@15 bb4@14 a4@15 g4@13]/6",
  CJ: "[~ g5@29 ~ db5@43 d5@15 e5@14 gb5@15 g5@14 a5@15 bb5@14 a5@7]/7",
  CK: "[~ g5@7 gb5 g5 gb5@20 g5@7 g5@29 c5@15 f5@29 bb4@14 eb5@29 c5@15]/7", CL: "[f5@29 a4@15 bb4@14 bb5@14]/3",
  CM: "[~ a5@14 g5@15 d5@14 g5@15 e5@13]/3", CN: "[~ c5@15 f5@15 bb4@29 b4@12]/3",
  CO: "[~@2 c5@29 f5@15 bb4@14 c5@29 d5@22 d5@7 ~ g5@7 d5@7 e5@7 f5@4]/6",
  CP: "[~@4 e5 e5@27 ~ f5@44 ~@19, ~@5 f5 ~@90]/4", CQ: "~ a4 d5 f5 e5 a5",
  CR: "[g5@4 f5@12 db5 d5 db5@10 d5@4 e5@4 f5@4 g5@4 f5@4]/2", CS: "g5 c5 d5 e5 f5 e5", CT: "f5!2 e5 d5 e5 f5",
  CU: "e5!2 d5 db5 d5 e5", CV: "d5 db5 d5 db5 d5 e5", CW: "f5 db5@2 ~ d5@2", CX: "~ db5@2 ~ d5@2",
  CY: "[~ db5@6 ~@5]/2", CZ: "[~ db5@6 e5 a5 e5 f5 a5]/2", DA: "[d5@4 db5 d5 db5@10 d5@12 e5@4 a5@4 e5@4 f5@4 a5@4]/2",
  DB: "[d5 db5@3 d5@3 e5@3 f5@3 g5 c6 g5 a5 c6]/3", DC: "[f5 e5@3 f5@3 g5@2 a5 bb5@2]/2", DD: "a5 g5@2 f5 e5@2",
  DE: "d5 c5 f5 c5 d5 e5", DF: "f5 e5 a5 e5 f5 g5", DG: "a5 g5 c6 g5 a5 bb5",
  DH: "[c6@4 g5@4 a5@4 bb5@4 g5 a5 g5@10 f5@4 e5@4 d5@4 c5@4 d5@4]/2", DI: "bb4 a4@2 ~ bb4@2",
  DJ: "[~ c5@3 d5@3 e5@3 f5 g5]/2", DK: "[a5@4 e5@4 f5@4 g5@4 e5 f5 e5@10 f5@12 f5@8]/2", DL: "e5 d5 e5 f5 e5@2",
  DM: "d5 db5 b4 a4 e5@2", DN: "d5 db5 b4 a4 f5 d5", DO: "e5 f5 d5 a4 e5 db5", DP: "d5 e5 db5 a4 f4@2",
  DQ: "~ a4@2 ~ d5 a4", DR: "d5 e5 a4 e5 f5 d5", DS: "[e5@4 f5@4 a4@4 d5@4 db5 d5 db5@10 d5@8 ~@4 db5@8]/2",
  DT: "~@4 d5@8 ~@4 db5 d5 db5@6", DU: "~ d5@2 ~@3", DV: "~ e5 a5 e5 f5 a5",
})).s("gm_recorder").gain(0.3)

stack(recorder)