Strudelify

Waltz in A Minor Chopin (violin flute harp)

Ryan Seneviratne

KeyA minorTempo120 bpm
0:00/0:00
// Waltz in A Minor Chopin (violin flute harp) — Ryan Seneviratne
// 120 bpm, 3/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (1/4 at bar 1, 3/4 at bar 2) are rendered on a constant 3/4 grid of one bar per cycle
// note: sustain pedal (CC 64) lengthens the held notes
// note: Transcription provider: pdmx. https://musescore.com/score/5326355; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 81 bars on a 16-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 · [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(`<
  A B C D E F G H I J K L M N O P Q R S T U R S T U R S T U R S T U V W L M X Y@2 Z ~@2 AA AB ~@2 AC AD V W L M X Y@2 Z
  ~@2 AA AB ~@2 AC AD B C D E F G AE I N O AF AG AH AI AJ AG
>`.pickRestart({
  A: "~@11 e4@5", B: "a4@3 b4@2 c5@3 b4@3 a4@2 g4@3", C: "f4@3 g4@2 a4@3 g4@3 f4@2 e4@3",
  D: "d4@3 g4@2 b4@3 a4@3 g4@2 f4@3", E: "e4@3 c5@2 e5@3 d5@3 c5@2 b4@3", F: "a4@3 b4@2 c5@3 d5@3 c5@2 b4@3",
  G: "d5@3 e5@2 f5@3 e5@3 d5@2 c5@3", H: "b4@3 c5@2 d5@3 c5@3 b4@2 b4@3", I: "c5@5 ~@6 e4@5",
  J: "a4@3 b4@2 c5@5 ~ c5@5", K: "d5@3 e5@2 f5@10 ~", L: "b4@3 c5@2 d5@3 a5@3 g5@2 f5@3",
  M: "e5 [e5,f5] ~ d#5@2 e5@10 ~", N: "c5@3 d5@2 e5@5 ~ e5@5", O: "f5@3 g5@2 a5@10 ~", P: "g5@5 f#5@3 g5@3 d6@2 f5@3",
  Q: "e5@15 ~", R: "a4@2 g#4@2 ~ c5@2 b4@2 c5@2 ~ d#5@2 e5@2, ~@4 a4@2 ~@5 e5@2 ~@3",
  S: "a5@2 g#5@2 ~ c6@2 b5@2 c6@2 ~ d#6@2 e6@2, ~@4 a5@2 ~@5 e6@2 ~@3",
  T: "e6@2 d#6@2 ~ c6@2 b5@2 c6@2 ~ g#5@2 a5@2, ~@4 e6@2 ~@5 a5@2 ~@3",
  U: "e5@2 d#5@2 ~ c5@2 b4@2 c5@2 ~ g#4@2 a4@2, ~@4 e5@2 ~@5 a4@2 ~@3", V: "~@5 a4@3 b4@3 c5@5",
  W: "c5@5 d5@3 e5@3 f5@5", X: "~@5 c5@3 d5@3 e5@5", Y: "[e5@5 f5@3 g5@3 a5@10 d#5@3 e5@3 f#5@5]/2",
  Z: "f#5@5 g#5@3 a5@3 b5@5", AA: "e5 [e5,f#5] ~ d5@2 g#4@3 f#5@3 e5@5", AB: "e5 [e5,f#5] ~ c#5@2 a4@3 f#5@3 e5@5",
  AC: "e5 [e5,f#5] ~ d5@2 g#4@3 f#5@3 e5@2 g#4@3", AD: "a4@5 ~@11", AE: "b4@3 c5@2 d5@3 a5@3 g5@2 b4@3",
  AF: "f5@5 e5@5 ~ d5@5", AG: "c5@5 ~@3", AH: "~@3 a5@2 g5@3 f5@3 e5@2 d5@3", AI: "c#5@5 d5@5 ~ c5@2 d5@3",
  AJ: "c5@5 c5@3 c5@3 d5@2 f4@3",
})).s("gm_flute").gain(0.21)

// chords · orchestral harp · "Harp"
const orchestral_harp = note(`<
  A B C D E F G H I J G H E F G H E K L M L K L M L K L M L K L M L J G H E F G N O P Q P Q P Q P R J G H E F G N O P Q
  P Q P Q P R J G H E F G H S J G P L T U V W
>`.pickRestart({
  A: "~@11 e2@5", B: "~@5 [a3,c4,e4]@5 ~ [a3,c4,e4]@5, [a1,c2,e2]", C: "~@5 [a3,d4,f4]@5 ~ [a3,d4,f4]@5, [a1,d2,f2]",
  D: "~@5 [g3,b3,f4]@5 ~ [g3,b3,f4]@5, [g2,b2,d3]", E: "~@5 [g3,c4,e4]@5 ~ [g3,c4,e4]@5, c3",
  F: "~@5 [a3,c4,e4]@5 ~ [a3,c4,e4]@5, a2", G: "~@5 [a3,d4,f4]@5 ~ [a3,d4,f4]@5, d2",
  H: "~@5 [g3,b3,f4]@5 ~ [g3,b3,f4]@5, g2", I: "~@5 [g3,c4,e4]@5 ~@6, c3@11 ~@5",
  J: "~@5 [a3,c4,e4]@5 ~ [a3,c4,e4]@5, a1", K: "~@5 [e3,d4]@5 ~ [e3,g#3,d4]@5, e2, ~@5 b3@11",
  L: "~@5 [e3,a3,c4]@5 ~ [e3,a3,c4]@5, a2", M: "~@5 [e3,b3,d4]@5 ~ [e3,b3,d4]@5, e2",
  N: "~@5 [a3,b3,d#4]@5 ~ [a3,b3,d#4]@5, b1", O: "~@5 [e3,b3,d4]@5 ~@6, e2@11 ~@5",
  P: "~@5 [e3,g#3,d4]@5 ~ [e3,g#3,d4]@5, e2", Q: "~@5 [e3,a3,c#4]@5 ~ [e3,a3,c#4]@5, a2",
  R: "~@5 [e3,c#4]@5 ~@6, a2@11 ~@5", S: "~@5 [g3,e4]@5 ~@6, c3@11 ~@5", T: "~@5 [e3,a3,e4]@5 ~@6, c3@11 ~@5",
  U: "~@5 [a3,b3,f4]@5 ~@6, d3@11 ~@5", V: "~@5 [e3,c4]@5 ~ [e3,b3,d4]@5, e2@11 ~@5", W: "a2@5 [e3,c4]@5 ~@6",
})).s("gm_orchestral_harp").gain(0.25)

stack(flute, orchestral_harp)

More by Ryan Seneviratne