Strudelify

Dance of the Knight

S. Prokofiev

KeyG majorTempo105 bpm
0:00/0:00
// Dance of the Knight — S. Prokofiev
// 105 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5045240; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 26 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(105/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [...]/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@4 B@2 C@2 D E@2 F@2 G@2 H I J K@2 L M N O P Q>".pickRestart({
  A: "~ b3 ~ b3", B: "~ f#3 ~ f#3", C: "~ c#4 ~ a#3", D: "b3 ~ a#3 ~",
  E: "[a3@4 ~@4 a#3@4 b3@7 e4 g4@3 b4 e5@3 b4 g4@3 e4]/2",
  F: "[b3@3 e4 g4@3 b4 e5 ~@3 b4@7 d5 f#5@3 b5 d6@3 b5 f#5@3 d5]/2",
  G: "[b4@3 d5 f#5@8 f#5@7 g5 f#5 f5!3 f5@4 f#4@4]/2", H: "f4@3 g4 f#4@3 a#5 f5@4 f#4@4", I: "f4 ~@7",
  J: "d5@3 a4 f4@3 a4 f4@3 d4 a3@3 f3", K: "a4@3 f4 d4@3 f4 a4@3 f4 d4@3 f4", L: "a4@3 f4 d4@3 a3 a3@3 d4 f4@3 a4",
  M: "a4@3 f4 d4@3 f4 a4@3 a3 d4@3 f4", N: "a3@3 c4 e4@3 a4 c5@3 a4 e4@3 c4", O: "a3@3 c4 e4@3 a4 c5 ~@3 e4@4",
  P: "e4@3 f4 e4@3 d#4 e4@4 e5@4", Q: "e5@3 f5 e5 d#5!3 d#5@4 e4@4",
})).s("gm_alto_sax").gain(0.3)

// other · tenor sax · "Tenor Saxophone"
const tenor_sax = note("<A@4 B@2 C@2 D E A@2 B@2 F@2 G H I J K L M@2 N@2>".pickRestart({
  A: "~ g3 ~ g3", B: "~ b2 ~ b2", C: "~ a3 ~ g3", D: "f3 ~ e3 ~", E: "e3 ~ d#3 ~", F: "~ f3 ~ b2", G: "b2 ~@7",
  H: "d5@3 a4 f4@3 a4 f4@3 d4 a3@3 f3", I: "d3@4 d3@4 d3@4 d3 ~ e3 ~", J: "f3 ~ g3 ~ a3 ~ a#3 ~ a3@4 a3 ~ a#3 ~",
  K: "c4 ~ d4 ~ e4 ~ f4 ~ e4 ~ d4 ~ c4 ~ d4 ~", L: "c4 ~ a#3 ~ a3 ~ g3 ~ f3 ~ e3 ~ d3@4", M: "~ a3 ~ a3",
  N: "~ b2 ~ a2",
})).s("gm_tenor_sax").gain(0.4)

// other · baritone sax · "Baritone Saxophone"
const baritone_sax = note("<A@4 B@2 C@2 D E A@2 B@2 F@2 G ~@5 H@2 I@2>".pickRestart({
  A: "e2 b2 g2 b2", B: "d3 f#3 b2 f#3", C: "f#2 d3 g2 d3", D: "d3 ~ c#3 ~", E: "c3 ~ b2 ~", F: "a#2 f#3 b2 f#3",
  G: "d2 ~@7", H: "c3 e3 a2 e3", I: "g#2 d#3 a2 e3",
})).s("gm_baritone_sax").gain(0.25)

stack(alto_sax, tenor_sax, baritone_sax)