Strudelify

Waltz in F-Sharp Minor (Composition Survivor: Challenge 1)

Stephen MacLellan

KeyB majorTempo80 bpm
0:00/0:00
// Waltz in F-Sharp Minor (Composition Survivor: Challenge 1) — Stephen MacLellan
// 80 bpm, 6/8, key B 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/1134451; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 45 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(80/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 · bagpipe
const bagpipe = note("<A B C D ~@3 E F G H I A J K L ~@3 M@7 N ~ O P Q R S T U V W X Y Z@4 AA@2>".pickRestart({
  A: "f#5@2 c#5 a5 g#5 f#5", B: "f5 f#5 f5 f#5 f5 f#5 f5 f#5 f5 f#5 f5 f#5 f5 f5@11, ~@13 f#5 ~@10",
  C: "d5@2 a4 a5 g#5 f#5", D: "e5 d5 c5 g#5@2 ~", E: "~@5 f5", F: "f#5@2 a4 g#4 a4 b4 c#5@2 g#4@3 b4",
  G: "a4@6 a4 g#4 a4 b4 a4 f#5", H: "g5 f#5", I: "f5 ~", J: "f5 f#5 f5 f#5 f5 f#5 f5 f#5 f5 f#5 f5 f#5 e5@12",
  K: "d5@7 g#4 a4 b4 d5 e5", L: "d5 c5 d5 c#5@2 ~",
  M: "[~@3 g#4 a4 b4 c#5 d5 e5@6 d5@2 c#5@2 d5@8 c#5@2 b4@2 c#5@8 b4@2 a4@2 b4@8 a4@2 g#4@2 a#4@2 b4@2 c#5@4 b4@2 a#4@2 b4@8 a4@2 g#4@2 a4@6]/7",
  N: "a4 b4 c#5 c#5@3", O: "a4", P: "c#5@6 c#5@2 c#5 d#5 f5@2", Q: "f#5 c5@2 d5 a4 f#5", R: "g#4 c#5",
  S: "f#5@4 c#5@2 c#5 d#5 f5@2 g#5@2", T: "f#5@2 c#5@2 e5@2 d#5@3 c#5 b4 a4", U: "a4 g#4 a4 b4 c#5@2 c#5@2 d5@2 c#5@2",
  V: "b4 a4 g#4 a5@2 g#5", W: "f#5 a4", X: "b4 a4 g#4 ~@2 d5", Y: "d5 c#5@2 b4@3",
  Z: "[b4@4 a4@8 c#5@9 b4@5 a4@11 ~@5 a5@5 g#5@5 f5@5 ~ f#5@19 f5 [f5,f#5] f#5 f5 f#5 [f5,f#5] f5 f#5 f5 f#5 [f5,f#5] f5 f#5 [f5,f#5] f5 f#5 f5 [f5,f#5] f#5]/4", // F#maj7
  AA: "[f#5@19 ~@5]/2",
})).s("gm_bagpipe").gain(0.11)

// chords · piano
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 A B C D E F G H AC AD AE AF AG@3 AH@2
>`.pickRestart({
  A: "~ [f#3,a3]!2 ~ [f#3,a3]!2, f#2@11 ~ f#2@11 ~", B: "~ [f3,g#3]!2 ~ [f3,g#3]!2, c#2@11 ~ c#2@11 ~",
  C: "~ [f#3,a3]!2 ~ [f#3,a3]!2, d2@11 ~ d2@11 ~", D: "~ [d#3,f#3,a3]!2 ~ [f3,c#4]!2, c2@11 ~ c#2@11 ~",
  E: "~ [f#3,a3,c#4]!2 ~ [f3,g#3,c#4]!2, [f#1,f#2]@11 ~ [c#2,c#3]@11 ~", // F#m C# F# C#
  F: "~ [e3,g3,c#4]!2 ~ [d#3,f#3,b3]!2, [a#1,a#2]@11 ~ [b1,b2]@11 ~", // C#dim B A# B
  G: "~ [d3,f#3,b3]!2 ~ [c#3,f#3,a3]!2, d2@11 ~ c#2@11 ~", // Bm F#m
  H: "~ [c#3,f3,g#3]!2 ~ [c#3,f3,g#3,c#4]@2, c#2@11 ~ c#2@11 ~", I: "f#2@2 c#3 g#2@2 c#3", J: "d2@2 a2 e2@2 a2",
  K: "b1@2 b1 c2@2 c2", L: "c#2@2 c#3 c#2@2 c#3", M: "~@2 [f#3,a3,c#4]!4 ~@2 [f#3,a3,c#4]!4, f#2@11 ~ f#2@11 ~",
  N: "~@4 [f3,g#3,c#4]@2 [f3,g#3,c#4]@2 [f3,g#3,c#4]@2 [f3,g#3,c#4]@2 ~@4 [f#3,a#3,c#4]!2 ~ [f#3,a#3,c#4] [f#3,a#3,c#4]@2 [f#3,a#3,c#4]@2, g#2@11 ~ a#2@11 ~", // C# F#
  O: "~@2 [f#3,b3,d4]!4 ~@2 [f#3,b3,d4]!4, [b1,b2]@11 ~ [b1,b2]@11 ~", // Bm B
  P: "~@2 [d#3,f#3,a3]!4 ~@2 [f3,g#3,b3,c#4]@2 [f3,g#3,b3,c#4]@2, [c2,c3]@11 ~ [c#2,c#3]@11 ~", // D#dim C#7 C C#
  Q: "[f#2,f#3]@2 [c#2,c#3] [a2,a3] [g#2,g#3] [f#2,f#3]", // F# C# A G# F#
  R: "f3 f#3 f3 f#3 f3 f#3 f3 f#3 f3 f#3 f3 f#3 [c#2,f3]@11 ~, f2@11 ~@13", // C#
  S: "[b1,b2,g#3,b3]@2 [b1,b2,g#3,b3] [d2,d3,d4] [c#2,c#3,c#4] [b1,b2,b3]", // E D C# B
  T: "[a1,a2,e3,a3,c#4] ~@4 [f#1,f#2,c#3,f#3,a#3]", U: "[b1,b2,d3,f#3,b3]@19 ~ [e2,d3,e3,g#3,b3]@4",
  V: "[a1,a2,e3,a3,c#4]@19 ~ [f#1,f#2,f#3,a3,c#4]@4", // A F#m
  W: "[g#1,g#2,d#3,g#3,b3]@11 ~ [c#2,c#3,f3,g#3,b3]@8 [c#2,c#3,f3,g#3,b3]@4", // G#m C#7
  X: "~ [c#3,f#3,a3]!2 ~ [c#3,f#3,a#3]!2, f#2@11 ~ f#2@11 ~", Y: "~ [d3,f#3,b3]!2 ~ [d3,f#3,b3]!2, b2@11 ~ b2@11 ~",
  Z: "~ [f#3,a3,c#4]!2 ~ [f#3,a3,c#4]!2, f#2@11 ~ f#2@11 ~", // F#m
  AA: "~ [f3,g#3,c#4]!2 ~ [f3,g#3,c#4]!2, [c#2,c#3]@11 ~ [c#2,c#3]@11 ~", // C#
  AB: "~ [d3,f#3]!2 ~ [c#3,f3,g#3] [c#2,c#3,f3,g#3], d2@11 ~ c#2@8 ~@4", // D C#
  AC: "~ [c#3,f#3,a3]!2 ~ [c#3,f#3,a3]!2, f#2@11 ~ f#2@11 ~", AD: "~ [c#3,f3,g#3]!2 ~ [b2,e3,g#3]!2, c#2@11 ~ e2@11 ~",
  AE: "~ [c#3,e3,a3]!2 ~ [c#3,f3,g#3]!2, a1@11 ~ c#2@11 ~", // A C#
  AF: "~@4 [d3,f#3,a3]@4 [d3,f#3,a3]@4 ~@5 [f3,g#3,c#4]@4 [f3,g#3,c#4]@3, d2@11 ~ c#2@12", // D C#
  AG: "[~@7 [f#3,a3]@5 [f#3,a3]@5 ~@6 [f3,g#3]@5 [f3,g#3]@5 ~@7 [f#3,a3]@6 ~ [f#3,a3]@6 ~@6 [f3,g#3]@6 ~ [f3,g#3]@6, ~@2 f#2@15 ~ c#2@15 ~ d2@18 ~ c#2@18 ~]/3", // F#m Fm F#m Fm
  AH: "[~@4 [f#3,a3]@35 ~@9, f#1@19 ~@5, ~ [c#2,f#2]@38 ~@9, ~ a2@18 ~@5, ~ c#3@12 ~@3]/2", // F#m F#5
})).s("gm_piano").gain(0.44)

stack(bagpipe, piano)