Strudelify
KeyD majorTempo120 bpm
0:00/0:00
// The Candyman — Leslie Bricusse and Anthony Newley
// 120 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5917310; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 51 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · "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 · alto sax · "Alto Saxophone"
const alto_sax = note(`<
  ~ A@2 B ~ C@2 D ~ E@2 F ~ G@2 H I J K L M N O P Q@5 R ~ S ~ A@2 B ~ C@2 D T L M N U V W X Y Z AA
>`.pickRestart({
  A: "[~@2 c4 a4@2 g4 ~@2 f4@3 g4@3 ~@10]/2", B: "~@3 d#4@2 d4 ~@2 c#4@3 d4", C: "[c5@6 f5@5 c5@3 f5 ~@3 b4@6]/2",
  D: "d5@2 f5 f5@6 ~@3", E: "[f5@2 c5@2 a#4@2 g#4 a4@3 f4@6 c4@2 d4@4 f4@8 ~@18]/2",
  F: "a4@4 c5@2 c5@4 a4@2 c#5 d5@5 c5@6", G: "[g4@2 c5 c5@2 c5 c5@3 ~@2 d5@3 f5 f5@2 f5 f5@2 f5 g5@2 f5]/2",
  H: "g#5 a5@3 g5@2 g5@2 f5@2 f5@12 c5@2", I: "d5@2 ~@4 c4 d4 f4 g4 a4 c5", J: "d5@2 f5 f5@6 ~@2 f5",
  K: "g#5 a5@3 g5@2 f5@6 f5@10 c5@2", L: "a4@2 g4@2 f4@2 f4@2 f4 c4 d4 f4", M: "g4@2 g4 g4@3 g4@2 g4@3 a4",
  N: "g4@2 f4 f4@2 f4@3 f4 g4@2 f4", O: "g#4 a4@3 g4@2 f4@6 d4@12", P: "c5@5 a#4@6 c5",
  Q: "[d5@2 f5 f5@3 f5@3 ~@2 g5@3 f5 f5@2 f5 f5@3 ~@2 e5@3 f5 e5@2 f5 e5@3 c5@2 a4@3 c5@7 ~@2 e5@3 f5 e5@2 f5 e5@3 c5@3]/5",
  R: "a4@4 c5@2 ~@6 e5 g5 c6@4 ~@6, ~@14 a5 ~@9", S: "~@12 d#5 e5@3 ~@8", T: "g#4 a4@3 g4@2 f4@6 f4@10 c4@2",
  U: "g#4 a4@3 g4@2 f4@6 f4@12", V: "g#5 a5@3 g5@2 f5@6 f4@2 a4@2 c5@2 d5@2 f5@2 g5@2", W: "g#5 a5@3 g5@2 f5@6 c5@12",
  X: "g5@3 g5@3 g5@3 g5@2 a5", Y: "g5@2 f5 f5@3 a5@2 g5 f5@3", Z: "d5", AA: "f5@12 a4 ~ c5 d5 ~ f5@7",
})).s("gm_alto_sax").gain(0.3)

// other · tenor sax · "Tenor Saxophone"
const tenor_sax = note(`<
  A B C@2 D E F G A H A B C@2 D I J K A B L M N O P@3 Q@2 R ~@2 A B C@2 D E F G A B S T A@2 U V W X@2
>`.pickRestart({
  A: "f3 a3 c3 a3", B: "f3 a3 a#2 a3", C: "g3 a#3 c3 a#3", D: "a#3 a3 a#3 a3", E: "a3 g3 d3!2",
  F: "f4@6 g4@3 c4 a#3 g3", G: "f3@3 ~", H: "f3 a3 a#2 a#3", I: "a3 g3 d3 d4", J: "f3", K: "b3 a#3", L: "g3 ~@2 g3",
  M: "c3 ~@3", N: "f3 a3 c3 f3", O: "d#3@5 a#3@4 c4@2 c4",
  P: "[a3@2 f4 a3@3 a3@3 ~@2 g#3@3 f4 f4@2 f4 g#3@3 ~@2 a3@4 g#3@3 g3@6]/3", Q: "[a3@2 g3@7 ~@2 a3@7 g#3@3 c4@3]/2",
  R: "a3@2 c4 ~@9", S: "g3 ~@2 g4", T: "c4 ~@3", U: "f3 f4 f4@2", V: "g3 f3", W: "e3", X: "c4/2",
})).s("gm_tenor_sax").gain(0.3)

// other · baritone sax · "Baritone Saxophone"
const baritone_sax = note(`<
  A B C@2 D E F G A H A B C@2 D E F I A B J K L M N@2 O P Q R@2 S A B C@2 D E F G A B J K A@2 T U V W@2
>`.pickRestart({
  A: "f2 f3 c2 f3", B: "f2 f3 a#2 f3", C: "g2 g3 c2 g3", D: "a#2 d3 a#2 c#3", E: "a2 e3 d2 d3", F: "g2",
  G: "c3@5 a#2 g2@6", H: "f2 f3 a#2 g3", I: "g3 f3", J: "g2 ~@2 g2", K: "c2 ~@3", L: "f2 f3 c2 a#2", M: "f3 f2 g2 a2",
  N: "[a#2@3 ~@3 a3 f3 d3 a#2 d3 b3@7 g#2@2 c2 e2@3]/2", O: "f2 a2 c3 d3", P: "f3 e3 d3 c3", Q: "b2 e3",
  R: "[~@21 c#3 d3@5 ~ c3@2 a#2@4 a2@2 g2@6 f2@6]/2", S: "g2@4 c3@2 ~@6 c2@3 ~@9", T: "f2 f3 d4@2", U: "g2!2", V: "c3",
  W: "f3/2",
})).s("gm_baritone_sax").gain(0.3)

stack(alto_sax, tenor_sax, baritone_sax)