Strudelify
KeyD majorTempo68 bpm
0:00/0:00
// Ständchen — Franz Schubert arrg. Matthew Lane
// 68 bpm, 3/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: Transcription provider: pdmx. https://musescore.com/score/5192413; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 82 bars on a 32-step grid, each part at one level. Source detail keeps the original performance.
setcpm(68/3)

// 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 E F K L M N O P Q R S T O U V W X Y Z AA AB AC AD AA AB AE E F G H I J E F K L M N O P Q R S T O U
  V W X AF AG@8 AH AI@3 AJ AK AL AM AN AO AP AQ@3
>`.pickRestart({
  A: "~@5 [a3,d4]@3 ~@3 [d4,f4]@3 ~@2 [a3,d4]@3 ~@2 [d4,f4]@3 ~@3 [a3,d4]@3 ~@2, [d2,d3]@5 ~@3", // D5 Dm D5 Dm D5 D
  B: "~@5 [a#3,d4]@3 ~@3 [d4,f4]@3 ~@2 [a#3,d4]@3 ~@2 [d4,f4]@3 ~@3 [a#3,d4]@3 ~@2, [a#1,a#2]@5 ~@3", // A# Dm A# Dm A#
  C: "~@5 [a#3,d4]@3 ~@3 [d4,e4]@3 ~@2 [a#3,d4]@3 ~@2 [d4,e4]@3 ~@3 [a#3,d4]@3 ~@2, [g1,g2]@5 ~@3", // A# Dsus2 A# Dsus2 A# G
  D: "~@5 [a3,c#4]@3 ~@3 [c#4,e4]@3 ~@2 [a3,c#4]@3 ~@2 [c#4,e4]@3 ~@3 [a3,c#4]@3 ~@2, [a1,a2]@5 ~@3", // A C#m A C#m A
  E: "~@5 [a3,d4]@5 ~ [d4,f4]@5 [a3,d4]@5 [d4,f4]@5 ~ [a3,d4]@5, [d2,d3]@5 ~@3", // D5 Dm D5 Dm D5 D
  F: "~@5 [g3,d4]@5 ~ [d4,e4]@5 [g3,d4]@5 [d4,e4]@5 ~ [g3,d4]@5, [a#1,a#2]@5 ~@3", // G5 Dsus2 G5 Dsus2 G5 A#
  G: "~@5 [f3,g3,c#4]@5 ~ [g3,c#4,e4]@5 [f3,g3,c#4]@5 [g3,c#4,e4]@5 ~ [f3,g3,c#4]@5, [a1,a2]@5 ~@3", // Gm7b5 C#dim Gm7b5 C#dim Gm7b5 A
  H: "~@5 [e3,g3,d4]@5 ~ [g3,d4,f4]@5 [e3,g3,d4]@5 [g3,d4,f4]@5 ~ [e3,g3,d4]@5, [d2,d3]@5 ~@3", // Em7 G7 Em7 G7 Em7 D
  I: "[a1,a2]@5 [a3,c#4,e4]@5 ~ [e4,g4]@5 [a3,c#4,e4,e5,g5]@5 [e4,g4]@4 [d5,f5]@2 ~ [c#5,e5]@3 ~, [c#5,a5]@15 ~@6 [e5,g5]@3 ~@3 [a3,c#4,e4]@5", // A Em A7 Em Dm C#m F#m Em …
  J: "[d2,d3]@5 [a3,d4]@5 ~ [d4,f4]@5 [a3,d4]@5 [d4,f4]@5 ~ [a3,d4]@5, [d5,f5]@15 ~", // D D5 Dm D5 Dm D5 Dm
  K: "~@5 [g3,a#3,c4]@5 ~ [a#3,c4,e4]@5 [g3,a#3,c4]@5 [a#3,c4,e4]@5 ~ [g3,a#3,c4]@5, [c2,c3]@5 ~@3", // C7 C
  L: "~@5 [f3,g3,c4]@5 ~ [g3,c4,e4]@5 [f3,g3,c4]@5 [g3,c4,e4]@5 ~ [f4,d5]@5, [a1,a2]@5 ~@3", // Fsus2 C Fsus2 C Dm A
  M: "e2@5 [c3,g3]@5 ~ [g3,a#3]@5 [c3,g3,g4,a#4]@5 [g3,a#3]@4 [f4,a4]@2 ~ [e4,g4]@3 ~, [e4,c5]@16 ~@5 [g4,a#4]@3 ~@3 [c3,g3]@5", // C5 Gm C7 Gm F Em C Gm …
  N: "f2@5 [c3,f3]@5 ~ [f3,a3]@5 [c3,f3]@5 [f3,a3]@5 ~ [c3,f3]@5, [f4,a4]@15 ~", // F5 F F5 F F5 F
  O: "~@5 [g3,a3]@5 ~ [a3,c#4]@5 [g3,a3]@5 [a3,c#4]@5 ~ [g3,a3]@5, [a1,a2]@5 ~@3", // Gsus2 A Gsus2 A Gsus2 A
  P: "~@5 [f3,a3]@5 ~ [a3,d4]@5 [f3,a3]@5 [a3,d4]@5 ~ [f3,a3]@5, [d2,d3]@5 ~@3", // F D5 F D5 F D
  Q: "~@5 [f3,a#3,d4]@5 ~ [a#3,d4,f4]@5 [f3,a#3,d4]@5 [a#3,d4,f4]@5 ~ [f3,a#3,d4]@5, [a#1,a#2]@5 ~@3", // A#
  R: "~@5 [f3,a3,c4]@5 ~ [a3,c4,f4]@5 [f3,a3,c4]@5 [a3,c4,f4]@5 ~ [f3,a3,c4]@5, [f1,f2]@5 ~@3", // F
  S: "a#4 c5 a#4@2 ~@3 a#4@3 ~ [c4,e4]@5 [g3,c4]@5 [c4,e4]@5 ~ [g3,c4,a#4]@5, [c2,c3]@4 a4@3 ~@4 d5@15 ~@6, ~@5 [g3,c4]@5 ~@22", // C C5 C C7 C C5
  T: "[f1,f2]@5 [f3,a3,c4]@5 ~ [a3,c4,f4]@5 [a3,c4]@5 [f3,a3,c4,f4]@5 ~ [a3,c4]@5, a4@15 ~", // F Am F Am
  U: "~@5 [f#3,a3]@5 ~ [a3,d4]@5 [f#3,a3]@5 [a3,d4]@5 ~ [f#3,a3]@5, [d2,d3]@5 ~@3", // F#m D5 F#m D5 F#m D
  V: "~@5 [g3,b3,d4]@5 ~ [b3,d4,g4]@5 [g3,b3,d4]@5 [b3,d4,g4]@5 ~ [g3,b3,d4]@5, [a#1,a#2]@5 ~@3", // G A#
  W: "~@5 [f#3,a3,d4]@5 ~ [a3,d4,f#4]@5 [f#3,a3,d4]@5 [a3,d4,f#4]@5 ~ [f#3,a3,d4]@5, [d2,d3]@5 ~@3", // D
  X: "[a1,a2]@4 ~@3 [g4,g5]@3 ~ [a3,c#4]@5 [e3,a3]@5 [a3,c#4]@5 ~ [e3,a3,g4,g5]@5, [g4,g5]@3 ~ [f#4,f#5]@3 ~@4 [b4,b5]@15 ~@6, ~@5 [e3,a3]@5 ~@22", // A G A A5 A A7 G F# …
  Y: "d2@5 [d3,f#3,a3]@5 ~ [f#3,a3,d4]@5 [d3,f#3,a3]@5 [f#3,a3,d4]@5 ~ [d3,f#3,a3]@5, [f#4,f#5]@15 ~", // D F#
  Z: "[d2,d3]@5 [d3,g3,a#3]@5 ~ [g3,a#3,d4]@5 [d3,g3,a#3]@5 [g3,a#3,d4]@5 ~@3 [g4,a#4]@3, [g4,a#4]@20 ~ [a#4,d5]@6 [d3,g3,a#3]@5", // D Gm A# Gm
  AA: "d2@5 [d3,f#3,a3]@5 ~ [f#3,a3,d4]@5 [d3,f#3,a3]@5 [f#3,a3,d4]@5 ~ [d3,f#3,a3]@5, [f#4,a4]@15 ~ [f#4,a4]@3 ~@2 [f#4,a4]@3 ~@3 [f#4,a4]@3 ~@2", // D F#m
  AB: "[f1,f2]@5 [e3,a3]@5 ~ [a3,c#4]@5 [e3,a3]@5 [g3,c#4]@5 ~ [e3,a3]@5, [g4,a4]@15 ~ [c#4,a4]@3 ~@2 [e4,a4]@3 ~@3 [g4,a4]@3 ~@2", // F A5 A A5 Gdim A5 Gsus2 F#m …
  AC: "d2@5 [f#3,a3]@5 ~ [a3,d4]@5 [f#3,a3]@5 [a3,d4]@5 ~ [f#3,a3]@5, [f#4,a4]@20 ~ [f#4,a4]@10 ~", // F#m D5 F#m D5 F#m
  AD: "[d2,d3]@5 [d3,g3,b3]@5 ~ [g3,b3,d4]@5 [d3,g3,b3]@5 [g3,b3,d4]@5 ~@3 [g4,b4]@3, [g4,b4]@20 ~ [b4,d5]@6 [d3,g3,b3]@5", // D G Bm G
  AE: "d2@5 [f#3,a3]@5 ~ [a3,d4]@5 [f#3,a3]@5 [a3,d4]@5 ~ [f#3,a3]@5, [f#4,a4]@15 ~", // F#m D5 F#m D5 F#m
  AF: "d2@5 [d3,f#3,a3]@5 ~ [f#3,a3,d4]@5 [d3,f#3,a3]@5 [f#3,a3,d4]@5 [d3,f#3,a3]@5 [a1,a2], [f#4,f#5]@15 ~", // D A F#
  AG: "[~@4 [a2,c#3,e3]@5 [c#3,e3,g3]@5 [a2,c#3,e3]@5 [c#3,e3,g3]@5 [a2,c#3,e3]@5 a2@4 ~@3 [a3,a4]@2 [e3,g3,c#4,c#5]@5 ~@3 [c#4,c#5]@2 [a#2,c#3,e3,e4,e5]@5 ~@2 [e4,e5]@2 ~ [a1,a2]@5 [a2,e3]@5 [e3,g3]@5 [a2,e3]@5 [a#2,c#3,e3]@4 [c#3,e3,g3]@5 [a1,a2]@5 [a2,e3]@5 [e3,g3]@5 [a2,e3,c#4,c#5]@5 [a#2,c#3,e3,e4,e5]@5 ~@2 d5@2 ~ [a#1,a#2]@5 [e3,f#3]@5 [f#3,c#4]@4 [e3,f#3]@5 [f#3,c#4]@5 [d3,f#3]@5 [b1,b2]@5 [d3,f#3]@5 [f#3,b3]@5 [d3,f#3]@5 [f#3,b3]@5 [d3,f#3]@5 [b1,b2]@4 ~@3 c#5@2 [e3,g3,b3]@5 [b2,e3,g3]@5 [e3,g3,b3,b4]@5 [b2,e3,g3]@5 [b1,b2]@5 ~@2 c#5@2 ~ [d3,f#3,b3]@5 [b2,d3,f#3]@5 [d3,f#3,b3,b4]@4 [b2,d3,f#3]@5 ~@5 [g3,b3,d4]@5 [b3,d4,g4]@5 [g3,b3,d4]@5 [b3,d4,g4]@2, ~@29 [a1,a3,a4]@7 ~@144 [e3,g3]@5 d5@10 ~@15 [b2,d3,f#3]@5 d5@10 ~@9 [a#1,a#2]@19 ~@3, ~@33 [a2,e3]@5 ~@5 [a2,e3]@5 ~@5 [c#3,e3,g3]@5 [d4,d5]@10 [c#4,c#5]@9 ~@10 [a3,a4]@14 ~@11 [c#3,e3,g3]@5 [e4,f#4,c#5]@28 ~ [d4,f#4,b4]@28 ~@2 [e4,g4,b4]@9 [e4,g4]@20 [e4,g#4,b4]@9 ~ [e4,g#4]@20 ~@21]/8", // A C#dim A C#dim A C#dim C# A#dim …
  AH: "~@3 [g3,b3,d4]@5 ~@5 [f#3,a3,d4]@5 [a3,d4,f#4]@4 [f#3,a3,d4]@5 [a3,d4,f#4]@5, ~@8 [d2,d3]@19 ~@5", // G D
  AI: "[[f#3,a3,d4]@5 [g4,g5]@3 [f#4,f#5]@2 ~@2 [g4,g5]@3 [a3,c#4]@5 [e3,a3]@5 [a3,c#4]@5 [e3,a3,g4,g5]@5 d2@4 [d3,f#3,a3]@5 [f#3,a3,d4]@5 [d3,f#3,a3]@5 [f#3,a3,d4]@5 [d3,f#3,a3]@5 ~ [d2,d3]@5 [d3,f3,a3]@5 [f3,a3,d4]@5 [d3,f3,a3]@5 ~ [f3,a3,d4]@5 [d3,f3,a3]@5, ~@5 [a1,a2]@5 [e3,a3]@5 [b4,b5]@14 ~@6 [f#4,f#5]@58 ~@3]/3", // D G F# G A A5 A A7 …
  AJ: "[a1,a2]@5 ~ [e3,g3]@5 [g3,a#3]@5 [e3,g3]@5 ~ [g3,a#3]@5 [e3,g3]@5, [e4,e5]@15 ~", // A Em Gm Em Gm Em E
  AK: "[f1,a2]@5 ~ [e3,g3]@5 [g3,a3]@5 [e3,g3]@5 ~ [g3,a3]@5 [e3,g3]@5, [c#4,c#5]@15 ~", // F Em Gsus2 Em Gsus2 Em C#
  AL: "d2@5 ~ [d3,f#3]@5 [f#3,a3]@5 [d3,f#3]@5 ~ [f#3,a3]@5 [d3,f#3]@5, [d4,d5]@10 ~ [f#4,a4]@5", // D F#m D F#m D F#m
  AM: "[d2,d3]@5 ~ [d3,g3,a#3]@5 [g3,a#3,d4]@5 [d3,g3,a#3]@5 ~ [g3,a#3,d4]@5 ~@3 [g4,a#4]@2, [g4,a#4]@10 ~ [a#4,d5]@4 ~, ~@27 [d3,g3,a#3]@5", // D Gm A# Gm
  AN: "d2@5 ~ [d3,f#3]@5 [f#3,a3]@5 [d3,f#3]@5 ~ [f#3,a3]@5 [d3,f#3]@5, [f#4,a4]@15 ~ [f#4,a4]@3 ~@3 [f#4,a4]@3 ~@2 [f#4,a4]@3 ~@2", // D F#m D F#m D F#m
  AO: "[a1,a2]@5 ~ [a2,e3]@5 [e3,g3]@5 [a2,e3]@5 ~ [e3,g3]@5 [a2,e3]@5, [g4,a4]@15 ~ [c#4,a4]@3 ~@3 [e4,a4]@3 ~@2 [g4,a4]@3 ~@2", // A A5 Em A5 Em A5 Gsus2 F#m …
  AP: "d2@5 ~ [a2,d3]@5 [d3,f#3]@5 ~ [a2,d3]@5 [d3,f#3]@6 [a2,d3]@4, [f#4,a4]", // D5 D D5 D D5 F#m
  AQ: "[~@2 d2@6 [a2,d3]@6 ~ [d3,f#3]@6 [a2,d3]@6 ~ [d3,f#3]@7 ~ [a2,d3]@8 [d2,a2,d3,a3,f#4,a4]@47 ~@5, ~@2 [a3,f#4,a4]@39 ~@55]/3", // D5 D D5 D D5 D
})).s("gm_piano").gain(0.09)

stack(piano)