Strudelify

Andante et Rondo Op.25

Franz Doppler

KeyA majorTempo80 bpm
0:00/0:00
// Andante et Rondo Op.25 — Franz Doppler
// 80 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5879563; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 79 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(80/4)

// 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.

// other · flute
const flute = note(`<
  ~@15 A B C D E F G H E F G I J@2 K L ~@4 M N O ~ P Q R ~ S ~@12 A B C D E T G H E T G U V@2 E ~@8
>`.pickRestart({
  A: "~@15 f#6", B: "f#6@17 ~ e6 ~ d6 ~ b5 ~ f#5 ~ d5 ~ b4 ~ a4 ~", C: "g#4@2 d5@4 c#5 b4 a#4@4 ~@4",
  D: "f#5@2 c#6@4 b5 a5 g#5@2 d6@4 g#5@2", E: "a5 ~@3", F: "~@11 f#6 e6@3 d6",
  G: "c#6@9 ~ e6@2 d#6@2 e6@2 a6@4 c#6@4 d6@6 c#6@2", H: "b5@9 ~ f6@2 g6@2 f6@2 e6@4 g#5@4 c#6@4 b5@4",
  I: "b5@9 ~ f6@2 g6@2 f6@2 e6@8 g#5@4 b5@4",
  J: "[~@2 g#4@2 b4@2 c#5@2 f5@2 d6@2 c6@2 c#6@2 a6@23 ~ g#6@4 f#6@4 d#6@2 e6@2 g#6@2 f#6@2 c#6@2 d6@2 f#5@2 g#5 ~]/2",
  K: "a5@2 ~@3 f5 ~@2", L: "~@5 d6 ~@2", M: "a6@9 f6 ~ d6 a5 f5 ~ e5 d5@8 f5@3 e5 ~ d5 ~@2", N: "b5 ~ e4 ~@5",
  O: "d#4@6 d4 [d#4,f#4] b4@6 a4@2 g#4@6 b4@2 e4@8", P: "a6@9 f6 ~ d6 a5 f5 ~ d5 a4@8 f5@3 e5 ~ d5 ~@2",
  Q: "c5@4 c6@4 b5@4 a5@4 g5@3 f5@2 e5@3 d5@3 c5@2 d5@3", R: "e5@12 b4@4 c5@15 ~",
  S: "b6@9 g6 ~ e6 b5 g5 ~ e5 b4@8 e6@6 b5@2", T: "~@15 d6", U: "b5@9 ~ f6@2 g6@2 f6@2 e6@4 g#5@4 e6@6 b5@2",
  V: "[c#6@4 c6@2 c#6 ~ d#6 ~ f6 ~ f#6 ~ g#6 ~ a6@24 g#6@4 f#6@4 d#6@2 e6@2 g#6@2 f#6@2 c#6@2 d6@2 f#5@2 g#5 ~]/2",
})).s("gm_flute").gain(0.3)

// other · flute · soft notes
const flute_soft = note(`<
  ~@11 A B C D E ~@3 F G ~@2 H I ~@4 J K L M N ~@10 O P Q R S T U V W B X D E ~@3 F Y ~@2 H Z ~@5 AA AB AC AD AE AF@3
>`.pickRestart({
  A: "~@12 e5@3 e6", B: "e6@23 ~ e5@6 e6@2", C: "e6@19 ~ d6@4 c#6@4 b5@4", D: "a#5 b5 g5 b5 f#5@3 c#5",
  E: "d5@15 ~@9 f#5@6 ~@2", F: "~@10 d6@2 c#6@3 b5", G: "a5@2 e5@2 c#5@3 a4 g#4@2 ~@6",
  H: "~@9 c#6 b5 g#5 e5 d5 b4 f#5", I: "e5 a5 e5 c#5 a4 c#5 b4 a4 g#4@2 ~@6", J: "~@6 e5 d5",
  K: "c#5@4 e5@11 ~@9 c#6@4 b5@4", L: "a#5@4 b5@4 g#6@11 ~ f#6@4 d6@4 b5@4", M: "g#5 f#5 d5 b4 g#4@3 b4",
  N: "b4@16 a4@11 ~@5", O: "d6@5 c6@3 c6 ~@2 b5 ~ a5 ~@2 g5@3 f#5@2 b5@5 ~ f#5@2 b5@3",
  P: "a5@8 g5@10 ~ g5@2 f#5@3 e5@3 b4@2 g4@3", Q: "f#4@3 e5@8 d5 ~ c5 ~@2 b4@11 f#4@2 g4@3", R: "e4 ~@3",
  S: "~@8 e5@11 f5@2 e5@3 a5@5 e5@3", T: "d5@11 e5@2 d5@3 c5@8 e5@5 c5@3",
  U: "b4@3 g#4@2 b4@3 e5@8 ~@3 f#4@2 a4@3 d#5@8", V: "~@3 b5@2 e5@3 ~@3 d#5@2 c6@3 ~@3 b5@2 e5@3 ~@3 d#5@2 c6@3",
  W: "b5@4 ~@8 e5@3 e6", X: "e6@19 ~ d6@4 d6@4 b5@4", Y: "a5@2 e5@2 c#5@3 a4 g#4@2 ~ f#6 e6@3 ~",
  Z: "e5 a5 e5 c#5 a4 c#5 b4 a4 g#4@2 ~ f#6 e6@3 ~", AA: "~ b5 g#5 f#5 e5@7 f5 g#5 f#5 e5 d5", AB: "c#5@11 ~@21",
  AC: "~@2 b5@2 g#5@2 f#5@2 e5@11 ~ a#4@4 b4@2 a#4@2 b4@2 c#5@2",
  AD: "d5 c#5 d5 d#5 e5 d#5 e5 f#5 g#5 g5 g#5 a5 b5 a#5 b5 c#6",
  AE: "d6@2 c#6@2 d6@2 d#6@2 e6@2 f6@2 f#6@2 g6@2 g#6@15 ~", AF: "[a6@7 ~]/3",
})).s("gm_flute").gain(0.15)

// chords · piano
const piano = note(`<
  A B C ~@13 D ~@4 E F ~@2 G H I J K@2 L@2 M N O P Q R S T U V W X Y Z AA AB AC AD AE AF AG AH AI AJ D ~@4 E F ~@2 G H I
  J A AK AL AM AN AO AP AQ AR
>`.pickRestart({
  A: "[a2,e3,a3,c#4,e4,c#5]@11 ~ [b2,e3,g#3,d4,e4,g#4]@4 [c#3,e3,a3,c#4,e4,a4]@8 [d3,f#3,b3,d4,f#4,b4]@8", // A E7 A Bm
  B: "[g#2,e3,b3,e4]@11 ~ [b2,e3,g#3,d4]@4 [a2,e3,a3,c#4]@8 [f#2,c#3,f#3,a3,c#4,a4]@8", // E E7 A F#m
  C: "a3!2 [g#3,g#4] [f#3,a4] d4 f4 e4 [d4,c#5], [b2,d4]@15 ~ [e3,g#3]@15 ~, f#4@8 ~@8 b4@11 ~@5", // G# F#m Dmaj7 Bm E
  D: "~ [d4,f#4,b4]!3 ~ [d4,f#4,b4]!2 [b3,d4,f#4], [g#2,g#3]@15 ~ [g#2,g#3]@15 ~", // Bm G#
  E: "[a1,a2] [e3,a3,c#4,e4,a4,c#5] [e3,a3,c#4] [e3,a3,c#4,e4,a4,c#5] [g#1,g#2] [f#3,a3,c#4,f#4,a4,c#5] [f#3,a3,c#4] [f#3,a3,c#4,f#4,a4,c#5]", // A G# F#m
  F: "[d2,d3] [d3,a3,b3,f#4,a4,b4] [d3,a3,b3] [d3,a3,b3,f#4,a4,b4] [e2,e3] [e3,g#3,d4,e4,g#4,c#5] [e3,g#3,d4] [e3,g#3,d4,e4,g#4,b4]", // D Bm7 E C#m E7
  G: "~ c#4 e4 a4 c#5 a4 e4 a4 ~ c#4 e4 a4 c#5 a4 e4 a4, [a1,a2] [e3,a3,c#4]@2 [e3,a3,c#4] [f#1,f#2] [c#3,f#3,a3]@2 [c#3,f#3,a3]", // A F# F#m
  H: "~ b3 f4 a4 b4 a4 f4 a4 ~ d4 e4 g#4 b4 g#4 e4 g#4, [d2,d3] [d3,a3,b3]@2 [d3,a3,b3] [e2,e3] [e3,g#3,d4]@2 [e3,g#3,d4]", // D Bm7 E E7
  I: "~ c#4 g#4 b4 c#5 b4 g#4 b4 ~ c#4 f#4 a4 c#5 a4 f#4 a4, f2 [c#3,f3,b3]@2 [c#3,f3,b3] f#2 [c#3,f#3,a3]@2 [c#3,f#3,a3]", // C#7 F#m
  J: "~ d#4 f#4 a4 b4 a4 f#4 a4 ~ d4 e4 g#4 b4 g#4 e4 g#4, [b1,b2] [d#3,a3,b3]@2 [d#3,a3,b3] [e2,e3] [e3,g#3,d4]@2 [e3,g#3,d4]", // B B7 E E7
  K: "a4 e3 a3 [e3,c#4,e4] b4 f3 g#3 [f3,b3,d4], a2@15 ~ a2@15 ~, ~ [c#4,e4]@2 ~@2 [b3,d4]@2 ~", // C#m Bdim C#m Bm
  L: "[~ e3 g#3 e3 ~ e3 g#3 [e3,d4] d4@2 e3@2 g#3@2 [e3,b3,d4]@2, a2@15 ~ a2@15 ~ a2@30 ~@2, ~@4 [b3,d4]@8 [b3,d4]@8 [b3,d4]@8 b3@11 ~ [b3,d4]@15 ~@9]/2", // E7 Bm
  M: "f3 ~ [c#4,a4] ~, a2@23 ~@9, [d4,g#4]@15 ~@17, ~@8 e3@15 ~@9", // F#m Ddim
  N: "[e3,a3,c4]@3 [e3,a3,c4]@2 [e3,a3,c4]@3 [e3,a3,c4]@3 [e3,a3,c4]@2 [e3,a3,c4]@3 [e3,a3,c4]@3 [e3,a3,c4]@2 [e3,a3,c4]@3 [a1,a2,e3,c4]@3 [b1,b2,e3,b3]@2 [c2,c3,e3,a3]@3, [a1,a2]@23 ~@9", // Am E5 Am A
  O: "[a3,b3,f4]@3 [a3,b3,f4]@2 [a3,b3,f4]@3 [a3,b3,f4]@3 [a3,b3,f4]@2 [a3,b3,f4]@3 [a3,b3,f4]@3 [a3,b3,f4]@2 [a3,b3,f4]@3 [d2,d3,a3,b3,f4]@3 [e2,e3,a3,b3,e4]@2 [f2,f3,a3,b3,d4]@3, [d2,d3]@23 ~@9", // Bm7b5 Esus4 Bm7b5 D
  P: "[b3,d4,e4]@3 [b3,d4,e4]@2 [b3,d4,e4]@3 [b3,d4,e4]@3 [b3,d4,e4]@2 [b3,d4,e4]@3 [a3,c4,e4]@3 [a3,c4,e4]@2 [a3,c4,e4]@3 [a1,a2,c4,e4,c5]@3 [b1,b2,c4,e4,b4]@2 [c2,c3,c4,e4,a4]@3, [g#2,e3]@15 ~ [a2,e3]@8 ~@8", // E7 Am Cmaj7 Am C#m A5
  Q: "[a3,b3,d#4]@3 [a3,b3,d#4]@2 [a3,b3,d#4]@3 [a3,b3,d#4]@3 [a3,b3,d#4]@2 [a3,b3,d#4]@3 [g#3,b3,e4]@3 [g#3,b3,e4]@2 [g#3,b3,e4]@3 [g#3,b3,e4]@3 [g#3,b3,e4]@2 [g#3,b3,e4]@3, [b1,b2]@15 ~ [e2,e3]@11 ~@5", // B7 E B E
  R: "[a#3,e4,g4]@3 [a#3,e4,g4]@2 [a#3,e4,g4]@3 [a#3,e4,g4]@3 [a#3,e4,g4]@2 [a#3,e4,g4]@3 [a#3,e4,g4]@3 [a#3,e4,g4]@2 [a#3,e4,g4]@3 [c#2,c#3,a#3,e4,g4]@3 [d2,d3,a#3,d4,f4]@2 [e2,e3,a#3,c#4,e4]@3, [c#2,c#3]@23 ~@9", // Edim C#dim A# A#dim C#
  S: "[a3,d4,a4]@3 [a3,d4,a4]@2 [a3,d4,a4]@3 [a3,d4,a4]@3 [a3,d4,a4]@2 [a3,d4,a4]@3 [a3,d4,f4]@3 [a3,d4,f4]@2 [a3,d4,f4]@3 [a3,f4]@3 [e2,e3,a3,e4]@2 [f2,f3,a3,d4]@3, [f2,f3]@15 ~ [d2,d3]@10 ~@6", // D5 Dm A5 Dm F D
  T: "[a3,c4,e4]@3 [a3,c4,e4]@2 [a3,c4,e4]@3 [a3,c4,e4]@3 [a3,c4,e4]@2 [a3,c4,e4]@3 [a3,b3,f4]@3 [a3,b3,f4]@2 [a3,b3,f4]@3 [a3,b3,d4]@3 [a3,b3,d4]@2 [a3,b3,d4]@3, [e2,e3]@15 ~ [d2,d3]@8 [f2,f3]@8", // Am Bm7b5 Bm7 E D F
  U: "[a3,b3,e4]@3 [a3,b3,e4]@2 [a3,b3,e4]@3 [g#3,b3,e4]@3 [g#3,b3,e4]@2 [g#3,b3,e4]@3 [e3,a3,c4,e4]@3 [e3,a3,c4,e4]@2 [e3,a3,c4,e4]@3 [e3,a3,c4,e4]@3 [e3,a3,c4,e4]@2 [e3,a3,c4,e4]@3, [e2,e3]@15 ~ [a1,a2]@15 ~", // Asus2 E Am E A
  V: "[a3,b3,d#4]@3 [a3,b3,d#4]@2 [a3,b3,d#4]@3 [a3,b3,d#4]@3 ~ d#2 [a3,b3,d#4]@2 b2 [a3,b3,f#4]@3 [a3,b3,f#4]@2 [a3,b3,f#4]@3 [a3,b3,f#4]@3 [a3,b3,f#4]@2 [a3,b3,f#4]@3, b1@11 [a3,b3,d#4]@2 f#2 ~@2 d#3@15 ~", // B7
  W: "[g3,b3,g4]@3 [g3,b3,g4]@2 [g3,b3,g4]@3 [g3,b3,g4]@3 ~ g2 [g3,b3,g4]@2 e3 [b3,e4,b4]@3 [b3,e4,b4]@2 [b3,e4,b4]@3 [b3,e4,b4]@3 [b3,e4,b4]@2 [b3,e4,b4]@3, e2@11 [g3,b3,g4]@2 b2 ~@2 g3@15 ~", // G E5 G
  X: "f#3@15 ~ b2@15 ~", Y: "c3@15 ~ g2@15 ~",
  Z: "~@3 [f#3,c4,e4]@2 [f#3,c4,e4]@3 [f#3,c4,e4]@3 [f#3,c4,e4]@2 [f#3,c4,e4]@3 ~@3 [a3,b3,d#4]@2 [a3,b3,d#4]@3 [a3,b3,d#4]@3 [a3,b3,d#4]@2 [a3,b3,d#4]@3, a2@15 ~ b2@15 ~", // F#m7b5 B7
  AA: "g#3@3 b3@2 e4@3 g#3@3 b3@2 e4@3 ~@3 e3@2 a3@3 c4@3 a3@2 e3@3, [e2,e3]@8 d3@8 c3@15 ~", // E
  AB: "~@3 e3@2 g#3@3 b3@3 g#3@2 e3@3 ~@3 e3@2 a3@3 c4@3 a3@2 e3@3, b2@15 ~ a2@15 ~",
  AC: "~@3 e3@2 b3@3 d4@3 b3@2 e3@3 ~@3 e3@2 a3@3 c4@3 a3@2 e3@3, g#2@15 ~ a2@15 ~",
  AD: "~@3 d3@2 e3@3 g#3@3 b3@2 e4@3 ~@3 d#3@2 f#3@3 a3@3 b3@2 c4@3, e2@15 ~ e2@15 ~",
  AE: "[e2,g#3,b3] ~ [e2,a3,c4,d#4,f#4] ~ [e2,g#3,b3,e4,g#4] ~ [e2,a3,c4,d#4,f#4] ~", AF: "[e2,g#3,b3,e4,g#4] ~@3",
  AG: "~@2 [g3,c#4,e4]@2 [g3,c#4,e4]@2 [g3,c#4,e4]@2 ~@2 [g#3,d4,e4]@2 [g#3,d4,e4]@2 ~ e2, a#2@15 ~ b2@11 ~ [g#3,d4,e4]@4", // C#dim E7
  AH: "~@2 [g3,c#4,e4]@2 [g3,c#4,e4]@2 [g3,c#4,e4]@2 ~@2 [f#3,b3,d4]@2 [f#3,b3,d4]@2 c#3 d3, a#2@15 ~ b2@11 ~ [f#3,b3,d4]@4", // C#dim Bm
  AI: "e3 [g3,b3,c#4] c#3 [b3,e4,g4] f#3 [a#3,e4,f#4] f#2 [f#3,a#3,e4]", // C#m7b5 Em F#7
  AJ: "~ [f#3,b3,d4]!3 ~ [b3,d4,f#4]!3, b2 ~ a2 ~", AK: "[g#3,d4,e4]@11 ~ [g3,c#4,e4]@4 [g#3,d4,e4]@15 ~, [e2,e3]@15 ~",
  AL: "[a2,e3,a3,c#4,e4,c#5]@11 ~ [c#2,c#3,b3,c#4,f4,g#4]@4 [f#2,f#3,a3,c#4,e4,a4]@8 [b1,b2,a3,d#4,f#4,b4]@8", // A C#7 F#m7 B7
  AM: "[g#3,d4,e4]@11 ~ [a#3,c#4,e4]@4 [b3,d4,e4]@15 ~, [e2,e3]@15 ~", AN: "[e2,g#3,d4]@15 ~",
  AO: "[e3,d4,g#4]@15 ~ [e3,d4,g#4,b4]@15 ~", AP: "[c#4,a4] a3@2 c#4 [c#4,e4] [e4,a4] [a4,c#5] [c#5,e5], [a2,e3]@15 ~",
  AQ: "[a3,e4,a4,c#5,a5]@15 ~ [a1,a2,e3,a3,c#4]@15 ~", AR: "[a1,a2,e3,a3,c#4]@23 ~@9",
})).s("gm_piano").gain(0.4)

// chords · piano · soft notes
const piano_soft = note("<~@3 A B C D E F G H I J K L M ~ N O P@2 ~@2 Q P ~@33 N O P@2 ~@2 Q P ~@13>".pickRestart({
  A: "[a2,e3,c#4,a4] [e3,a3,c#4]!3 ~ [e3,a3,c#4]!3, ~@16 [a1,a2]@15 ~", // A
  B: "~ [e3,g#3,d4]!3 ~ [e3,g#3,d4]!3, [b1,b2]@15 ~ [b1,b2]@15 ~", // E7 B
  C: "~ [e3,a3,e4]!3 ~ [e3,a3,e4] [f3,a3,f4]!2, [c#2,c#3]@15 ~ c#3@15 ~", // A5 F C#
  D: "~ [a3,b3,f#4]!3 a3 [g#3,d4,e4] [f#3,d4,e4] [g#3,d4,e4], [d3,f#3]@15 ~ e3@15 ~", // B7 E7 D E7 D
  E: "~ [c#4,e4]!3 ~ [c#4,e4,c#5]!3, [a2,a3]@15 ~ a3@15 ~", F: "~ [b3,e4,b4]!3 ~ [b3,d#4,a4]!3, g#3@15 ~ f#3@15 ~",
  G: "~ [b3,d4,g#4]!3 ~ [a3,c#4,a4]!3, f3@15 ~ f#3@15 ~", // G#dim A
  H: "~ [f#3,c4,e4]!3 ~ [a3,b3,d#4] [a3,b3,g#4] [a3,b3,f#4], a2@15 ~ b2@15 ~", // F#m7b5 B7 E B7
  I: "~@4 [g#3,b3,e4]@4 [g#3,b3,e4]@4 ~@2 e2@2 e2 ~@3 [g#3,b3,e4]@4 e3@2 d3@2 c#3@2 b2@2, e2@8 ~@4 [g#3,b3,e4]@4 ~ e3@7 [g#3,b3,e4]@4 [g#3,b3,e4]@4", // E
  J: "~@2 [g3,c#4,e4]@2 [g3,c#4,e4]@2 [g3,c#4,e4]@2 ~@2 [g#3,d4,e4]@2 [g#3,d4,e4]@2 ~ e2, a#2@15 ~ b2@11 ~ [g#3,d4,e4]@4", // C#dim E7
  K: "~@2 [g3,c#4,e4]@2 [g3,c#4,e4]@2 [g3,c#4,e4]@2 ~@2 [f#3,b3,d4]@2 [f#3,b3,d4]@2 c#3 d3, a#2@15 ~ b2@11 ~ [f#3,b3,d4]@4", // C#dim Bm
  L: "e3 [g3,b3,c#4] c#3 [b3,e4,g4] f#3 [a#3,e4,f#4] f#2 [f#3,a#3,e4]", M: "~ [f#3,b3,d4]!3 ~ [b3,d4,f#4]!3, b2 ~ a2 ~",
  N: "~ [b3,c#4,f4]!3 ~ [a#3,c#4,e4]!3, c#3@15 ~ f#2@15 ~", O: "~ [a3,b3,d#4]!3 ~ [g#3,b3,d4]!3, b2@15 ~ e2@15 ~",
  P: "[a1,a2] [e3,a3,c#4] [c#2,c#3] [e3,a3,c#4] [b1,b2] [e3,g#3,d4] [e1,e2] [e3,g#3,d4]", // A C# A B E7 E E7
  Q: "[a1,a2,c#4,a4] [e3,a3,c#4] [c#2,c#3] [e3,a3,c#4] [b1,b2] [e3,g#3,d4] [e1,e2] [e3,g#3,d4]", // A C# A B E7 E E7
})).s("gm_piano").gain(0.15)

stack(flute, flute_soft, piano, piano_soft)