Strudelify

Katyusha

Matvey Blanter

KeyF majorTempo110 bpm
0:00/0:00
// Katyusha — Matvey Blanter
// 110 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5943299; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 58 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(110/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 · recorder · "Soprano Recorder"
const recorder = note("<A B C D E@2 ~@11 F G H I J K L M J K L M N ~@8 A B C O ~@4 P Q@2 R ~@3 S T U V W>".pickRestart({
  A: "g6@3 e6 gb6@3 eb6", B: "e6!2 d6 c6 b5@2 d6@2", C: "~ bb5@2 g6 f6@3 d6", D: "c6 bb5 a5 f6 d6@3 ~",
  E: "~@4 d5 ~ d5!2 d5@2 ~@6", F: "~@4 d6@3 e6", G: "f6@3 d6 f6!2 e6 d6", H: "e6@2 a5@2 e6@3 f6",
  I: "g6@3 e6 g6!2 f6 e6", J: "d5@2 a5 d6", K: "c6@2 d6 c6 bb5!2 a5 g5", L: "a5@2 d5@3 bb5@2 g5",
  M: "a5@3 f5 e5 f5 g5 e5", N: "d5 ~", O: "c6 bb5 a5 f6 d6@4", P: "a5@2 d6@2 c6@2 d6 c6",
  Q: "[bb5!2 a5 g5 a5@2 d5@3 bb5@2 g5 a5@3 f5]/2", R: "e5 f5 g5 e5 d5@4", S: "~@4 g6@3 e6", T: "gb6@3 eb6 e6!2 d6 c6",
  U: "b5@2 d6@2 ~ bb5@2 g6", V: "f6@3 d6 c6 bb5 a5 f6", W: "d6 ~",
})).s("gm_recorder").gain(0.3)

// other · recorder · "Bass Recorder"
const recorder_2 = note("<~@3 A B@9 C D E F G B@7 C D H F I J@4 K ~@23>".pickRestart({
  A: "~@4 d4 ~ a3 ~", B: "d4 ~ a3 ~ d4 ~ a3 ~", C: "~@2 d4 g4", D: "f4@2 g4 f4 eb4!2 d4 c4", E: "d4@2 a3@3 eb4@2 c4",
  F: "d4@3 c4 b3 c4 d4 b3", G: "a3@4 d4 ~ a3 ~", H: "d4@2 g3@3 e4@2 c4", I: "a3@4 a3 ~ a3 ~", J: "a3 ~ a3 ~ a3 ~ a3 ~",
  K: "a3 ~ a3 ~@5",
})).s("gm_recorder").gain(0.25)

// other · recorder · "Contrabass Recorder"
const recorder_3 = note("<~@3 A B@5 C D@2 E ~@4 A B@3 C D@2 E ~@5 F G H I J ~@23>".pickRestart({
  A: "~@4 d3 f3 a2 f3", B: "d3 f3 a2 f3 d3 f3 a2 f3", C: "d3 f3 a2 f3 d3 ~@3", D: "f3 ~@3 g3 ~@3", E: "f3 ~@3 d3 ~@3",
  F: "~@4 d3@3 e3", G: "f3@3 d3 f3!2 e3 d3", H: "e3@2 a2@2 e3@3 f3", I: "g3@6 e3@2 g3@3 g3 f3@2 e3@2", J: "d3 ~",
})).s("gm_recorder").gain(0.2)

stack(recorder, recorder_2, recorder_3)