Strudelify

Sonatine in A major Op.68

Anton Diabelli

KeyA majorTempo39 bpm
0:00/0:00
// Sonatine in A major Op.68 — Anton Diabelli
// 39 bpm, 2/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (1/8 at bar 1, 2/4 at bar 2, 3/8 at bar 45, 1/8 at bar 45, ...) are rendered on a constant 2/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/3826901; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 67 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(39/2)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// chords · acoustic guitar nylon · "Gitarre"
const acoustic_guitar_nylon = note(`<
  ~ A B C D A E F G H I J K@2 L M N O P Q R S T U V S W X Y Z AA AB AC AD AE AF AG AH AI AJ@2 AK AL AM AN A B C D A E F
  G H I J K@2 AO AP AQ AR AS AT AU AV AW
>`.pickRestart({
  A: "~ [d4,f#4] [c#4,e4] [b3,d4], a2", B: "[c#3,a3,c#4]@2 ~ a2", C: "~ [b3,e4] ~ [c#4,e4], g#2 a2",
  D: "[g#3,b3] e4 d#4 e4 b3 e4 g#3 b3 e2@4 ~@4, e2 ~", E: "[a2,a3,c#4]@2 ~@3 a3 e4 a3, ~ c#3",
  F: "[d3,a3,d4,f#4]@2 ~@3 g#3 b3 e4, ~ e2", G: "~@4 c#4@3 d4 e4@2 f#4@2 g#4@2 a4@2, a2 ~",
  H: "a#4 b4 a4 g#4 f#4 e4 d4 b3", I: "a3 e4 c#4 e4 ~ e4 c#4 e4, a2 a3", J: "~ e4 b3 e4 ~ e4 b3 e4, g#3 e3",
  K: "d#4@2 e4@2 c#4@2 a3@2 d4@3 c#4 b3@4, a2 e2",
  L: "[a2,a3,c#4]@4 [f#2,a3,c#4,f#4]@3 e4 d#4@2 f#4@2 e4@2 d#4@2, ~ b2", // A F#m
  M: "e4@2 d#4 e4 f#4 e4 g#4 e4 b3@2 f#4@2 e4@2 d#4@2, e2 ~ b2 ~", N: "e4 d#4 c#4 b3 a3 g#3 f#3 g#3, e2 ~",
  O: "~ [a3,c#4] ~ [a3,b3], a2 c#3", P: "[e2,g#3,b3]@2 ~@3 [a3,b3]!3, ~ b2", Q: "[e3,g#3,b3]@2 ~@3 [a3,b3]!3, ~ b2",
  R: "[e3,g#3,b3] [e2,b2,e3,g#3,b3,e4]!2 ~", S: "~ [b3,d4] [a#3,c#4] [a3,c4], e2", T: "[e2,g#3,b3] ~",
  U: "~ [d#3,a3,b3,f#4] ~ [e3,g#3,b3,e4]", V: "[b2,d#4] ~@3", W: "[e2,g#3,b3] ~@2 [b3,e4], ~ g#2",
  X: "[a3,c#4,f#4] ~ [a3,b3,f#4] ~, a2 b2", Y: "c3@4 [c3,e3,g3,c4,e4]@4 ~ e3 g3 c4 e3 g3 c4 e4, ~ c3",
  Z: "[c3,g3,b3,f4]@3 e4 d4@3 c4 b3 g3 a3 b3 c4 d4 e4 f4", AA: "[c3,g3,c4,g4]@3 f4 e4@3 d4 c4@2 f4 e4 d4 c4 b3 a3",
  AB: "[b2,f3,g3]@3 a3 g3@3 f3 e3 e4 f4 e4 d4 c4 b3 a3, ~@2 c3 ~", // G7
  AC: "[b2,f3,g3]@3 a3 g3@3 f3 e3 c3 g3 e3 c4 g3 e4 c4", AD: "[e2,c4,g4] ~@3", AE: "[f3,a3] ~@3",
  AF: "~ g3 c4 e4 ~ g3 b3 f4, g2!2", AG: "~ a#3 c#4 e4 ~ a#3 c#4 e4, g2!2", AH: "~ a3 d4 a3 ~ a3 d4 a3, f2!2",
  AI: "~ d#3 a3 c4 ~ d#3 a3 c4, f2!2", AJ: "~ g#3 b3 e4 ~ a3 c4 e4, e2!2",
  AK: "~ [g#3,b3,e4] ~ [a3,c4,e4] ~ [g#3,b3,e4] ~ [a3,c4,e4], e2!4", AL: "[e2,g#3,b3,e4] ~ [e2,g#3,b3,e4] ~",
  AM: "[e2,g#3,b3,e4]@2 ~@2 e4 b3 g#3 b3, ~ e2", AN: "[e2,e3] [e2,b2,e3,g#3,b3,e4] ~@2",
  AO: "[a2,a3,c#4] [g3,c#4,e4] [f#3,a3,d4] [f3,a3,d#4]", // A C#dim D F7
  AP: "[e3,a3,c#4,e4]@2 a4 g#4 f#4 e4 d4 c#4 b3 a3 g#3 f#3 e3 d3 c#3 b2, ~ e2", // A
  AQ: "~ a3 g#3 a3 b3 a3 c#4 a3 ~@2 b3@2 a3@2 g#3@2, a2 ~ e2@2",
  AR: "a3@2 g#3 a3 b3 a3 c#4 a3 ~@2 b3@2 a3@2 g#3@2, a2 ~ e2@2", AS: "a3 g#3 f#3 e3 d3 c#3 b2 c#3, a2 ~@3",
  AT: "~ [f#3,b3] ~ [b3,d4], d3 e2", AU: "[a2,a3,c#4] ~ [e2,b3,d4,e4]@2",
  AV: "[a3,c#4] e4 d#4 e4 [e2,b3,d4,g#4]@4, a2 ~", AW: "[a2,c#4,a4] [a2,e3,a3,c#4,e4]!2 ~",
})).s("gm_acoustic_guitar_nylon").gain(0.2)

// chords · piano · "Klavier"
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 AB AC AD AE AF AG AH AI AJ AK AL AM AN@2 AO AP AQ AR B C D E F
  G H I AS K L M@2 AT AU AV AW AX AY AZ BA BB
>`.pickRestart({
  A: "~@12 c#5@3 e5", B: "a4 [a3,a4] [a2,a4] [a3,g#4]",
  C: "a4@2 d5 c#5 b4 a4 g#4 f#4 e4@2 a4@2 c#5@2 e5@2, a2@2 ~ [a3,c#4,e4]", // A
  D: "d5@3 b4 e5@3 d5 c#5 e5 a5 g#5 f#5 e5 d5 c#5, [g#3,b3,e4] [a3,c#4,e4]", E: "[e3,g#3,b3,e4,b4]@8 ~@4 c#5@3 e5",
  F: "a4@4 [a3,a4,a5]@4 [a2,a4,a5]@3 g#5 [a3,g#5]@4", // A Amaj7
  G: "a5 b5 a5 g#5 a5 b5 c#6 d6 e6 d6 c#6 b5 a5 g#5 f#5 e5, a2 ~ [c#3,e3]@2", // C#m
  H: "g#5 f#5 e5 d5 c#5 b4 d5 b4 a4 g#4 f#4 e4 d#4 e4 f#4 g#4, [d3,f#3] ~ [e3,b3]@2", // D E5
  I: "[a3,c#4,a4] [c#4,e4]!7, ~@2 a3 ~", J: "[d4,e4]!8, g#3 e3 ~ [e2,e3]",
  K: "[a2,c#4,e4]@2 [a3,c#4,e4]@2 [a3,c#4,e4,c#5]@2 ~ d5 [a3,c#4,e4,e5]@2 [a3,c#4,e4,f#5]@2 [a3,c#4,e4,g#5]@2 [a3,c#4,e4,a5]@2, ~@3 [a3,c#4,e4] ~@4", // A F#m7 Amaj7 A
  L: "[g#3,b3,d4,e4,a#5] [g#3,b3,d4,e4,b5] [g#3,b3,d4,e4,a5] [g#3,b3,d4,e4,g#5] [g#3,b3,d4,e4,f#5] [g#3,b3,d4,e4,e5] [g#3,b3,d4,e4,d5] [g#3,b3,d4,e4,b4]", // E7 G#m7b5 E7
  M: "a3 [e4,a4,c#5] a3 [e4,a4,c#5] g#3 [e4,b4,d5] e3 [e4,b4,d5]", // A E7
  N: "g#3 [e4,a4,c#5] a3 [e4,a4,c#5] g#3 [e4,b4,d5] e3 [e4,b4,d5]", // A E7
  O: "[a3,a4,c#5]@2 [f#2,f#3,a4,c#5,a5]@2 ~ [a4,b4] [g#4,b4] [f#4,b4], ~ [b2,b3]", // A F#m Asus2 G#m B5 B
  P: "~ [g#4,b4]!3 ~ [a4,b4] [g#4,b4] [f#4,b4], e3 ~ [b2,b3]@2", // G#m Asus2 G#m B5 B
  Q: "[e4,g#4,b4] [d#4,f#4,b4] [c#4,e4,a4] [b3,d#4,g#4] [a3,c#4,f#4] [g#3,b3,e4] [f#3,a3,d#4] [g#3,b3,e4], e3 e2", // E B A G#m F#m E D#dim E
  R: "f#4 g#4 a4 b4 d#5 c#5 b4 a4 g#4 f#4 f4 f#4 e4 d#4 c#4 d#4, [a2,c#3,f#3] [b2,f#3,a3]", // F#m B7
  S: "[e3,g#3] b3 a#3 b3 d#5 a5 g#5 f#5, e4 ~ [b2,f#3,a3]@2", // E B7
  T: "[e3,g#3] b3 a#3 b3 d#4 a4 g#4 f#4, e5 ~ [b2,f#3,a3]@2", // E B7
  U: "[e3,g#3,e4]@4 [e2,e3,b3,g#4]@4 [e2,e3,g#3,e4]@4 g#4@3 b4", V: "e4 [e3,e4] [e2,e4] [e3,d#4]",
  W: "e4@2 f#4 e4 d#4 e4 g#4 b4 e5@2 d#5@2 c#5@2 b4@2, e2@2 ~ e3",
  X: "~@2 a5 f#5 d#5 b4 a4 f#4 g#4 b4 e5 d#5 c#5 b4 a4 g#4, d#3 e3",
  Y: "b2 b3 a#3 b3 f#3 b3 d#3 f#3 b2@4 g#5@3 b5, f#4 ~@3", Z: "e5@4 [e3,e4,e5]@4 [e2,e4,e5]@3 d#5 [e3,d#5]@4",
  AA: "e5 g#5 b5 a5 g#5 b5 e6 d#6 c#6 b5 a5 g#5 f#5 e5 g#5 e5, e2 ~ g#2@2",
  AB: "d#5 c#5 a5 g#5 f#5 e5 d#5 c#5 b4 a4 g#4 f#4 e4 d#4 c#4 d#4, a2 ~ b2@2",
  AC: "e4 [g3,c4,e4] ~ [g3,c4,e4] ~ [g3,c4,e4] ~ [g3,c4,e4], [c2,c3]!4", // C
  AD: "~ [g3,b3,d4,f4] ~ [g3,b3,d4,f4] ~ [g3,b3,d4,f4] ~ [g3,b3,d4,f4], [c2,c3]!4", // G7 C
  AE: "~ [g3,c4,e4] ~ [g3,c4,e4] ~ [g3,c4,e4] ~ [g3,c4,e4], [c2,c3]!4", // C
  AF: "~ [g3,d4,f4] ~ [g3,d4,f4] ~ [g3,c4,e4] ~ [g3,c4,e4], [b1,b2]!2 [c2,c3]!2", // G7 C B C
  AG: "~ [g3,d4,f4] ~ [g3,d4,f4] [c2,c3,g3,c4,e4]@2 ~@2, [b1,b2]!2 ~@2", // G7 C B
  AH: "~ g4 a4 b4 c5 d5 e5 f5 g5 f#5 a5 g5 f5 e5 d5 c5, [e3,g3,c4]@15 ~", // C
  AI: "b4 a4 g#4 a4 e5 d5 c#5 d5 g5 f5 e5 f5 b5 a5 g#5 a5, [f3,a3] ~@3", // F
  AJ: "g5 e6 b5 d6 c6 b5 a5 g5 f#5 g5 b5 a5 g5 f5 e5 d5, [g3,c4,e4] [g3,b3,f4]", // C G7
  AK: "~ c#5 ~ e5 ~ g5 ~ a5 ~ a#5 ~ g5 ~ f5 ~ e5, [g3,a#3,c#4,e4]!8", // Gdim
  AL: "~ d5 ~ f5 ~ a5 ~ c#6 ~ d6 ~ e6 ~ f6 ~ d6, [f3,a3,d4]!8", // Dm
  AM: "~ c6 ~ b5 ~ a5 ~ g#5 ~ a5 ~ c5 ~ b4 ~ a4, [f3,a3,d#4]!8", // F7
  AN: "~ g#4 ~ b4 ~ e5 ~ b4 ~ a4 ~ c5 ~ e5 ~ c5, e3 e4 b3 g#3 e3 e4 c4 a3",
  AO: "~ b4 ~ e4 ~ c5 ~ e4 ~ b4 ~ e4 ~ c5 ~ e4, e3 g#3 e3 a3 e3 g#3 e3 a3",
  AP: "~ e4 f#4 g#4 a4 b4 c#5 d#5 [e3,e5]@2 [f#3,f#5] [g#3,g#5] [a3,a5] [b3,b5] [c#4,c#6] [d#4,d#6], e3 ~@3", // E F# G# A B C# D#
  AQ: "[e4,e6] ~ [b3,b5] ~ [g#3,g#5] ~ [b3,b5] ~ [e3,e5] ~ [b2,b4] ~ [g#2,g#4] ~ [b2,b4] ~", // E B G# B E B G# B
  AR: "[e2,e4]@4 [e2,g#2,b2,e3,e5,g#5,b5,e6]@4 ~@4 c#5@3 e5", // E
  AS: "[g#3,d4,e4] [d4,e4] [e3,d4,e4] [d4,e4]!5, ~@3 [e2,e3]", // E7 Dsus2 E7 Dsus2 E
  AT: "~ [a4,c#5] ~ [a4,c#5,a5] ~ [a4,d5,a5] ~ [a4,c5,d#5,a5], [a2,a3] [g2,g3] [f#2,f#3] [f2,f3]", // A D5 Adim A G F# F
  AU: "[e2,e3,a4,c#5,e5,a5] ~ [e2,e3,b3,d4,g#4] ~", // A E7
  AV: "[c#4,a4] [c#4,e4]!3 ~ [d4,e4] [c#4,e4] [b3,e4], a2 ~ [e2,e3]@2", // F#m C#m Dsus2 C#m E5 E
  AW: "~ [c#4,e4]!3 ~ [d4,e4] [c#4,e4] [b3,e4], a2 ~ [e2,e3]@2", // C#m Dsus2 C#m E5 E
  AX: "[c#4,e4] [g#3,b3,e4] [f#3,a3,d4] [e3,g#3,c#4] [d3,f#3,b3] [c#3,e3,a3] [b2,d3,g#3] [c#3,e3,a3], a2 a1", // C#m E D C#m Bm A G#dim A
  AY: "b3 c#4 d4 e4 f#4 g#4 a4 b4 a4 g#4 f#4 e4 d#4 e4 f#4 g#4, [d2,d3] [e2,e3]", // D E
  AZ: "[a2,c#3] e3 d#3 e3 g#4 d5 c#5 b4, a4 ~ [e2,e3]@2", BA: "[a2,c#3,a4]@2 ~@2 g#5 d6 c#6 b5, ~ [e2,e3]",
  BB: "[a2,a5] [a1,a2,e5,a5,c#6] [a1,a2,c#4,e4,a4] ~", // A
})).s("gm_piano").gain(0.2)

stack(acoustic_guitar_nylon, piano)