Strudelify

State Anthem of the Soviet Union

Alexander Alexandrov

KeyD majorTempo80 bpm
0:00/0:00
// State Anthem of the Soviet Union — Alexander Alexandrov
// 80 bpm, 4/4, key D 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/4010476; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 27 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(80/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · trumpet · "B♭ Trumpet"
const trumpet = note("<A B C D E F G H I J K L M N O P Q R S T U V@4 W@2>".pickRestart({
  A: "c5@6 ~ g4", B: "c5@6 g4@4 ~ a4 b4@6 e4@3 e4@3", C: "a4@6 g4@4 ~ f4 g4@6 c4@3 c4@3",
  D: "d4@6 d4@4 ~ e4 f4@6 f4@4 ~ g4", E: "a4@2 b4 c5 d5@3 g4", F: "e5@6 d5@4 ~ c5 d5@6 b4@3 g4@3",
  G: "c5@6 b4@4 ~ a4 b4@6 e4@3 e4@3", H: "a4@6 g4@4 ~ f4 g4@6 c4@4 ~ c4", I: "c5@6 b4@4 ~ a4 g4@3 b4@3 c5@3 d5@3",
  J: "e5@4 d5 c5 b4 c5", K: "d5@3 g4!2 b4 c5 d5", L: "c5@4 b4 a4 g4 a4", M: "b4@3 e4!2 g4 a4 b4",
  N: "c5@6 a4@4 ~ b4 c5@6 a4@4 ~ b4", O: "c5@2 a4 c5 f5@4", P: "f5@4 e5 d5 c5 d5", Q: "e5@3 c5 c5@4",
  R: "d5@4 c5 b4 a4 b4", S: "c5@3 a4 a4@4", T: "c5@6 b4@4 ~ a4 g4@6 c4@4 ~ c4", U: "c5@6 b4@4 ~ a4 g4@6 g4@3 ~@3",
  V: "[~@13 g4@3 [c5,c6]@6 [g4,g5]@4 ~ [a4,a5] [b4,b5]@6 [e4,e5]@3 [e4,e5]@3 [a4,a5]@6 [g4,g5]@4 ~ [f4,f5] [g4,g5]@6 [c4,c5]@3 [c4,c5]@3 [d4,d5]@6 [d4,d5]@4 ~ [e4,e5] [f4,f5]@6 [f4,f5]@4 ~ [g4,g5] [a4,a5]@6 [b4,b5]@2]/4", // C G A B E A G F …
  W: "[~ [c5,c6]@3 [d5,d6]@9 [g4,g5]@3 [c5,e6]@24 ~@8]/2", // C D G C
})).s("gm_trumpet").gain(0.4)

// other · trumpet · "B♭ Trumpet"
const trumpet_2 = note("<A B C D E F G H I J K L M N O P Q R S T U V@4 W@2>".pickRestart({
  A: "c4@3 ~", B: "c4!2 b3 g3", C: "a3!2 g3!2", D: "a3@6 a3@6 a3@6 a3@4 ~ a3", E: "a3@2 a3!2 g4@4",
  F: "c5@6 g4@4 ~ c5 b4@6 d4@6", G: "a4@6 e4@4 ~ f#4 g4@6 b3@6", H: "c4@6 c4@6 c4@6 c4@4 ~ c4",
  I: "c4@6 c4@4 ~ f#4 g4@12", J: "c5@4 b4 a4 g4 a4", K: "b4@3 d4!2 g4 a4 b4", L: "a4@4 g4 f#4 e4 f#4",
  M: "g4@3 b3!2 e4 f4 g4", N: "a4@6 f4@4 ~ g4 a4@6 f4@4 ~ g4", O: "a4@2 a4!2 c5@4", P: "c5@2 c5@2 b4@2 a4 b4",
  Q: "c5@3 g4 g4@4", R: "a4@2 a4@2 g4@2 f#4 g4", S: "a4@3 e4 e4@4", T: "a4@6 g4@4 ~ f4 c4@6 c4@4 ~ c4",
  U: "f#4@6 e4@4 ~ f#4 g4@6 b3@3 ~@3",
  V: "[~@16 c4@6 c4@6 b3@6 g3@6 a3@6 a3@6 g3@6 g3@6 a3@6 a3@6 a3@6 a3@4 ~ a3 a3@6 a3@2]/4",
  W: "[~ a3@3 g4@12 c4@24 ~@8]/2",
})).s("gm_trumpet").gain(0.4)

// other · trumpet · "B♭ Trumpet"
const trumpet_3 = note("<A B C D E F G H I J K L M N O P Q R S T U V@4 W@2>".pickRestart({
  A: "e4@3 ~", B: "g4 e4 g4 b3", C: "a3 b3 c4!2", D: "a3@6 a3@6 d4@6 d4@4 ~ e4", E: "f4@2 g4 a4 b4@4",
  F: "g4@6 d4@4 ~ a4 g4@6 b3@6", G: "e4@6 b3@4 ~ a3 b3@6 a3@6", H: "a3!2 g3!2",
  I: "f#4@6 e4@4 ~ c4 b3@3 b3@3 c4@3 d4@3", J: "g4@4 d4 c4 b3 c4", K: "g4@3 b3!3 c4 d4", L: "e4@4 b3 a3 g3 a3",
  M: "b3@3 g3!3 a3 b3", N: "c4!4", O: "c4@2 c4!2 f4@4", P: "f4@2 a4@2 g4@2 f4 g4", Q: "g4@3 g4 g4@4",
  R: "d4@2 d4@2 e4@2 d4 e4", S: "e4@3 c4 c4@4", T: "c4@2 b3!2", U: "c4@6 c4@4 ~ c4 d4@6 g3@3 ~@3",
  V: "[~@16 g4@6 e4@6 g4@6 b3@6 a3@6 b3@6 c4@6 c4@6 a3@6 a3@6 d4@6 d4@4 ~ e4 f4@6 g4@2]/4",
  W: "[~ a4@3 b4@12 e4@24 ~@8]/2",
})).s("gm_trumpet").gain(0.4)

// other · french horn · "Mellophone"
const french_horn = note("<A B C D E F G H I J K L M N O P Q R S T U V@4 W@2>".pickRestart({
  A: "e4@3 ~", B: "g4 e4 g4 b3", C: "a3 b3 c4!2", D: "a3@6 a3@6 d4@6 d4@4 ~ e4", E: "f4@2 g4 a4 b4@4",
  F: "c4@2 e4@2 g4@3 g4", G: "a3@2 d4@2 e4@3 e4", H: "f4 d4 e4!2", I: "d4@2 d4@2 g4 f4 e4 d4", J: "g4@4 d4 c4 b3 c4",
  K: "g4@3 b3!3 c4 d4", L: "e4@4 b3 a3 g3 a3", M: "b3@3 g3!3 a3 b3", N: "c4!4", O: "c4@2 c4!2 f4@4",
  P: "f4@2 a4@2 g4@2 f4 g4", Q: "g4@3 g4 g4@4", R: "d4@2 d4@2 e4@2 d4 e4", S: "e4@3 c4 c4@4", T: "c4@2 b3!2",
  U: "c4@6 c4@4 ~ c4 d4@6 g3@3 ~@3",
  V: "[~@16 g4@6 e4@6 g4@6 b3@6 a3@6 b3@6 c4@6 c4@6 a3@6 a3@6 d4@6 d4@4 ~ e4 f4@6 g4@2]/4",
  W: "[~ a4@3 b4@12 e4@24 ~@8]/2",
})).s("gm_french_horn").gain(0.4)

// other · trombone
const trombone = note("<A B C D@2 E F G H I J K L M N O P Q R G S T@4 U@2>".pickRestart({
  A: "e3@3 ~", B: "c3!2 b2 g2", C: "f2!2 g2!2", D: "[a2@2 a2@2 c3@5 c3 b2 a2 g2 f3 e3 d3]/2",
  E: "c3@2 e3@2 g3 d3 b2 g2", F: "a2@2 d3@2 e3 b2 g2 e2", G: "f3 d3 e3!2", H: "d3!2 g3@2", I: "c3 b2 c3 d3 e3@2 e3@2",
  J: "g3!2 b3 d4 g3@2 f3 e3", K: "a3@2 a3 b3 c4@2 c3@2", L: "e3!2 g3 b3 e3!2 d3 g2", M: "f2@3 c3 a3@3 g3",
  N: "f3@3 c3 a3 g3 f3 e3", O: "d3@9 e3 ~ f3 g3@6 g2@6", P: "c4 b3 c4 e4 d4 c4 b3 a3", Q: "b2@9 c3 ~ d3 e3@6 e3@6",
  R: "a2 b2 c3 e3 a3@2 g3@2", S: "d3@2 d3@2 g3@2 g2 ~",
  T: "[~@16 c3@6 c3@6 b2@6 g2@6 f2@6 f2@6 g2@6 g2@6 a2@6 a2@6 c3@12 c3@3 c3@3 b2@2]/4",
  U: "[~ a2@3 g2@3 f3@3 e3@3 d3@3 e3@24 ~@8]/2",
})).s("gm_trombone").gain(0.4)

// bass · tuba · "Euphonium"
const bass = note("<A B C D@2 E F G H I J K L M N O P Q R G S T@4 U@2>".pickRestart({
  A: "c3@3 ~", B: "c3!2 e3!2", C: "f3!2 e3!2", D: "[d3@2 d3@2 c3@5 c3 b2 a2 g2 f3 d3 f3]/2", E: "c3@2 e3@2 g3@3 g3",
  F: "a2@2 d3@2 e3@3 e3", G: "f3 d3 e3!2", H: "d3!2 g3@2", I: "c3 b2 c3 d3 e3@2 e3@2", J: "g2!2 b2 d3 g2@2 f3 e3",
  K: "a2@2 a2 b2 c3@2 c3@2", L: "e3!2 g2 b2 e3!2 d3 g2", M: "f2@3 c3 a3@3 g3", N: "f3@3 c3 a3 g3 f3 e3",
  O: "d3@9 e3 ~ f3 g3@6 g2@6", P: "c3 b2 c3 e3 d3 c3 b2 a2", Q: "b2@9 c3 ~ d3 e3@6 e3@6", R: "a2 b2 c3 e3 a3@2 g3@2",
  S: "d3@2 d3@2 g3@2 g2 ~", T: "[~@16 c3@6 c3@6 e3@6 e3@6 f3@6 f3@6 e3@6 e3@6 d3@6 d3@6 c3@12 c3@3 c3@3 b2@2]/4",
  U: "[~ a2@3 g2@3 f3@3 d3@3 f3@3 c3@24 ~@8]/2",
})).s("gm_tuba").gain(0.35)

// bass · tuba
const bass_2 = note("<A B C D@2 E F G H I J K L M N O P Q R G S T@4 U@2>".pickRestart({
  A: "c2@3 ~", B: "c2!2 e2!2", C: "f2!2 e2!2", D: "[d2@2 d2@2 c2@5 c2 b1 a1 g1 f2 e2 d2]/2", E: "c2@2 e2@2 g2@3 g2",
  F: "a1@2 d2@2 e2@3 e2", G: "f2 d2 e2!2", H: "d2@2 d2@2 g2 f2 e2 d2", I: "c2 b1 c2 d2 e2@2 e2@2",
  J: "g1!2 b1 d2 g1@2 f2 e2", K: "a1@2 a1 b1 c2@2 c2@2", L: "e2!2 g1!2 e2!2 d2 g1", M: "f1@3 c2 a2@3 g2",
  N: "f2@3 c2 a2 g2 f2 e2", O: "d2@9 e2 ~ f2 g2@6 g1@6", P: "c2 b1 c2 e2 d2 c2 b1 a1", Q: "b1@9 c2 ~ d2 e2@6 e2@6",
  R: "a1 b1 c2 e2 a2@2 g2@2", S: "d2@2 d2@2 g2@2 g1 ~",
  T: "[~@16 c2@6 c2@6 e2@6 e2@6 f2@6 f2@6 e2@6 e2@6 d2@6 d2@6 c2@12 c2@3 c2@3 b1@2]/4",
  U: "[~ a1@3 g1@3 f2@3 e2@3 d2@3 [c1,c2]@24 ~@8]/2", // C
})).s("gm_tuba").gain(0.4)

stack(trumpet, trumpet_2, trumpet_3, french_horn, trombone, bass, bass_2)