Strudelify

State Anthem of the Soviet Union

Alexander Alexandrov& Sergey Mikhalkov

KeyC majorTempo72 bpm
0:00/0:00
// State Anthem of the Soviet Union — Alexander Alexandrov& Sergey Mikhalkov
// 72 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 1 "Piano" named as a piano, played on piano (its french horn patch is not one)
// note: Transcription provider: pdmx. https://musescore.com/score/206456; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 42 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(72/4)

// 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.

// 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 B C D E F G H I J K L M N O P Q R S T V W>".pickRestart({
  A: "[c4,e4,g4,c5]@6 ~ g4, [c2,c3]", // C
  B: "[c2,c3,c4,e4,g4,c5]@4 [c4,e4,g4]@2 g4 a4 [e2,e3,b3,e4,g4,b4]@4 [g3,b3,e4]@2 e4@2, ~ [c2,c3] ~ [e2,e3]", // C Em C E
  C: "[f2,f3,g3,b3,a4]@4 [f2,f3,c4,e4,g4]@3 a4 [e2,e3,b3,e4,g4,b4]@4 [g3,b3,e4]@2 e4@2, ~@3 [e2,e3]", // G7 C Em E
  D: "[d2,d3,f3,a3,d4]@4 [d2,d3,f3,a3,d4]@3 e4 [a3,d4,f4]@4 [a3,d4,f4]@3 [a3,e4,g4], ~ [c2,c3]", // Dm A7 C
  E: "[c2,c3]!2 [b1,b2,b3,g4,b4] [a1,a2,c4,g4,a4,c5] [g1,g2] [f2,f3] [e2,e3] [d2,d3,g4], [a3,f4,a4]@2 ~@2 [d4,g4,b4,d5]@3 ~", // C Em Am7 G F E G5 Dm …
  F: "[c2,c3,e4,g4,c5,e5]@4 [e2,e3,d4,g4,d5]@3 [c4,a4,c5] [g2,g3]@2 d3@2 [b2,b3,d4,b4]@2 [a2,g4]@2, ~@2 [d4,g4,b4,d5] ~", // C Em7 F G Bm A7 G
  G: "[a1,a2,c4,e4,a4,c5]@4 [d2,d3,b3,e4,b4]@3 [a3,f#4,a4] [e2,e3]@2 b2@2 [g2,g3,b3,e4]@2 [e2,e4]@2, ~@2 [b3,e4,g4,b4] ~", // Am E7 D E Em E Em
  H: "[f2,f3,a3,c4,a4]@4 [d2,d3,a3,c4,g4]@3 f4 [e2,e3,g3,c4,g4]@4 [e2,e3,g3,c4]@3 c4", // F Dsus4 C
  I: "[d2,d3,c4,f#4,c5]@4 [d2,d3,c4,e4,b4]@3 f4 [g2,g3,b3,g4]@2 [f2,f3,b3,g4,b4]@2 [e2,e3,c4,a4,c5]@2 [d2,d3,d4,b4,d5]@2", // D7 Cmaj7 G G7 Am G
  J: "[c2,c3] [b1,b2] [c2,c3] [d2,d3] [b4,d5] [a4,c5] [g4,b4] [a4,c5], [e4,g4,c5,e5]@2 [e2,e3]!2", // C B C D Bm Am G Am …
  K: "[g2,g3] g2 b2 [d3,b3,d4,g4] [b3,d4,g4] [b3,g4,b4] [f2,f3,c4,a4,c5] [e2,e3,d4,b4,d5], [d4,g4,b4,d5]@3 ~ [f2,g3]@2 ~@2", // G Em F E7 G Fsus2
  L: "[a1,a2] e2 [a1,a2] [b1,b2] [b3,g4,b4] [a3,f#4,a4] [g3,e4,g4] [a3,f4,a4], [c4,e4,a4,c5]@2 [c2,c3]!2", // A B Em D C Dm Am C
  M: "[e2,e3] e2 g2 [b2,g3,b3,e4] [e2,e3,g3,b3,e4] [e2,e3,g3,e4,g4] [d2,d3,a3,c4,f4,a4] [g1,g2,b3,g4,b4], [b3,e4,g4,b4]@3 ~@5", // E Em Dm7 G Em
  N: "[c4,a4,c5]@4 [c4,f4,a4]@2 ~ [g4,b4] [a2,a3,c4,a4,c5]@4 [a2,a3,c4,f4,a4]@2 ~ [g4,b4], [g1,f2]@3 [c2,c3] ~@3 [g2,g3]", // F G Am F G G7 C G
  O: "[c4,a4,c5]@2 [c4,f4,a4] [c2,c3,c4,a4,c5] [a2,a3] [g2,g3] [f2,f3] [e2,e3], [f2,f3]@3 ~ [f4,a4,c5,f5]@4", // F A G F E F
  P: "[f4,a4,c5,f5]@4 ~@2 [e2,e3] [f2,f3] [g4,b4,e5]@2 d5@2 [f4,a4,c5]@2 [g4,b4,d5]@2, [d2,d3]@3 ~ [g2,g3]@2 [g1,g2]@2, ~ [f4,a4,c5] ~@2", // F E F Em F G D G …
  Q: "[c2,c3] [b1,b2] [c2,c3] [e2,e3,e4,g4,c5] [d2,d3] [c2,c3] [b1,b2] [a1,a2], [e4,g4,c5,e5]@3 ~ [e4,g4,c5]@4", // C B C D C B A C
  R: "[d4,f4,a4,d5]@4 ~@2 [c2,c3] [d2,d3] [e4,g#4,c5]@2 b4@2 [d4,f#4,a4]@2 [e4,g4,b4]@2, [b1,b2]@3 ~ [e2,e3]@2 [e2,e3]@2, ~ [d4,f4,a4] ~@2", // Dm C D Eaug D Em B E …
  S: "[a1,a2] [b1,b2] [c2,c3] [e2,e3,c4,e4,a4] [a2,a3]@2 [g2,g3]@2, [c4,e4,a4,c5]@3 ~ [c4,e4,a4]@4", // A B C Am A G Am
  T: "[f2,f3,c4,a4,c5]@4 [d2,d3,g4,b4]@3 [f4,a4] [e2,e3,g3,c4,g4]@4 [e2,e3,g3,c4]@3 c4", // F G F C
  U: "[d2,d3,c4,f#4,c5]@4 [d2,d3,c4,e4,b4]@3 [c4,f4,a4] [g2,g3,b3,g4]@4 [b3,f4,g4]@2 g4@2, ~@3 [g1,g2]", // D7 Cmaj7 F G G7 G
  V: "[g1,g2,g3,b3,f4,g4]@2 [g1,g2,a3,c4,g4,a4] [g1,g2,b3,f4,g4,b4]", W: "[c2,c3,c4,e4,g4,c5]",
})).s("gm_piano").gain(0.37)

// chords · overdriven guitar · "Electric Guitar"
const overdriven_guitar = note(`<
  A B C D E F G H I J K L M N O P Q R S T U B C D E F G H I J K L M N O P Q R S T V W
>`.pickRestart({
  A: "[c3,e3,g3,c4]@6 ~ g3", B: "[c3,e3,g3,c4]@4 [c3,e3,g3]@2 g3 a3 [b2,e3,g3,b3]@4 [g2,b2,e3]@2 e3@2",
  C: "[g2,b2,a3]@4 [c3,e3,g3]@3 a3 [b2,e3,g3,b3]@4 [g2,b2,e3]@2 e3@2", // G C Em
  D: "[f2,a2,d3]@4 [f2,a2,d3]@3 e3 [a2,d3,f3]@4 [a2,d3,f3]@3 [a2,e3,g3]", // Dm A7
  E: "[a2,f3,a3]@2 [b2,g3,b3] [c3,g3,a3,c4] [d3,g3,b3,d4]@3 g3", // Dm Em Am7 G
  F: "[e3,g3,c4,e4]@4 [d3,g3,d4]@3 [c3,a3,c4] [d3,g3,b3,d4]@4 [b2,d3,b3]@2 g3@2", // C G5 F G Bm
  G: "[c3,e3,a3,c4]@4 [b2,e3,b3]@3 [a2,f#3,a3] [b2,e3,g3,b3]@4 [g2,b2,e3]@2 e3@2", // Am E5 D Em
  H: "[a2,c3,a3]@4 [a2,c3,g3]@3 f3 [g2,c3,g3]@4 [g2,c3]@3 c3", // Am Am7 C5
  I: "[c3,f#3,c4]@4 [c3,e3,b3]@3 f3 [b2,g3]@2 [b2,g3,b3]@2 [c3,a3,c4]@2 [d3,b3,d4]@2", // Cdim Cmaj7 Em F G
  J: "[e3,g3,c4,e4]@4 [b3,d4] [a3,c4] [g3,b3] [a3,c4]", // C Bm Am G Am
  K: "[d3,g3,b3,d4]@3 [b2,d3,g3]!2 [b2,g3,b3] [c3,a3,c4] [d3,b3,d4]", // G Em F G
  L: "[c3,e3,a3,c4]@4 [b2,g3,b3] [a2,f#3,a3] [g2,e3,g3] [a2,f3,a3]", // Am Em D C Dm
  M: "[b2,e3,g3,b3]@3 [g2,b2,e3]!2 [g2,e3,g3] [a2,c3,f3,a3] [b2,g3,b3]", // Em C F Em
  N: "[c3,a3,c4]@4 [c3,f3,a3]@3 [g3,b3] [c3,a3,c4]@4 [c3,f3,a3]@3 [g3,b3]", // F G F G
  O: "[c3,a3,c4]@2 [c3,f3,a3] [c3,a3,c4] [f3,a3,c4,f4]@4", // F
  P: "[f3,a3,c4,f4]@2 [f3,a3,c4]@2 [g3,b3,e4] d4 [f3,a3,c4] [g3,b3,d4]", Q: "[e3,g3,c4,e4]@3 [e3,g3,c4] [e3,g3,c4]@4",
  R: "[d3,f3,a3,d4]@2 [d3,f3,a3]@2 [e3,g#3,c4] b3 [d3,f#3,a3] [e3,g3,b3]", S: "[c3,e3,a3,c4]@3 [c3,e3,a3] [c3,e3,a3]@4",
  T: "[c3,a3,c4]@4 [g3,b3]@3 [f3,a3] [g2,c3,g3]@4 [g2,c3]@3 c3", // F G F C5
  U: "[c3,f#3,c4]@4 [c3,e3,b3]@3 [c3,f3,a3] [b2,g3]@4 [b2,f3,g3]@2 g3@2", // Cdim Cmaj7 F Em G7
  V: "[g2,b2,f3,g3]@2 [a2,c3,g3,a3] [b2,f3,g3,b3]", W: "[c3,e3,g3,c4]",
})).s("gm_overdriven_guitar").gain(0.48).pan(1)

// bass · electric bass finger · "Bass Guitar"
const bass = note("<A B C D E F G H I J K L M N O P Q R S H T B C D E F G H I J K L M N O P Q R S U@2 A>".pickRestart({
  A: "[c1,c2]", B: "[c1,c2]!2 [e1,e2]!2", C: "[f1,f2]!2 [e1,e2]!2", D: "[d1,d2]!2 [c1,c2]@2",
  E: "[c1,c2]!2 [b0,b1] [a0,a1] [b0,g1] [f1,f2] [e1,e2] [d1,d2]", F: "[c1,a1]@2 [e1,e2]@2 [g1,g2] d2 b1 a1",
  G: "[a0,a1]@2 [d1,d2]@2 [e1,e2] b1 g1 e1", H: "[f1,f2] [d1,d2] [e1,e2]!2",
  I: "[d1,d2]@2 [d1,d2]@2 [g1,g2] [f1,f2] [e1,e2] [d1,d2]", J: "[c1,c2] [b0,b1] [c1,c2] [d1,d2] [e1,e2]@2 [e1,f2]@2",
  K: "[a1,g2] g1 b1 d2 [f1,g2]@2 [f1,f2] [e1,e2]", L: "[a0,a1] e1 [a0,a1] [b0,b1] [c1,c2]@2 [c1,c2]@2",
  M: "[e1,e2] e1 g1 b1 [e1,e2]!2 [d1,d2] g1", N: "f1@3 [c1,c2] [a1,a2]@2 [a1,a2] [g1,g2]",
  O: "[f1,f2]@3 [c1,c2] [a1,a2] [g1,g2] [f1,f2] [e1,e2]", P: "[d1,d2]@6 [e1,e2] [f1,f2] [g1,g2]@4 [a0,g1]@4",
  Q: "[c1,c2] [b0,b1] [c1,c2] [e1,e2] [d1,d2] [c1,c2] [b0,b1] [a0,a1]", // C B C E D C B A
  R: "[b0,b1]@6 [c1,c2] [d1,d2] [e1,e2]@4 [e1,e2]@4", S: "[a0,a1] [b0,b1] [c1,c2] [e1,e2] [a1,a2]@2 [g1,g2]@2",
  T: "[d1,d2]!2 [g1,g2] [a0,g1]", U: "[[f1,f2] [d1,d2] [e1,e2]!2 [a0,g1]@2 [a0,g1]!2, a1]/2",
})).s("gm_electric_bass_finger").gain(0.55).pan(0)

// drums · kick
const kick = s("bd").struct(`<
  A B@3 C B D B E B F B C B@2 G C G F B@5 C B D B E B F B C B@2 G C G F B H ~
>`.pickRestart({
  A: "~@7 x", B: "x!2", C: "x", D: "x ~@5 x!2", E: "x ~@3 x!2 ~@2", F: "x ~@2 x!2 ~@3", G: "x ~@3 x!4", H: "x ~ x!2",
})).gain(0.64)

// drums · snare
const snare = s("sd").struct("<~ A@3 ~ B ~ C D E@3 F A G D H A H A@5 ~ B ~ C D E@3 F A G D H A H A I ~>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2", C: "~@4 x ~@7 x ~@2 x", D: "~@2 x ~@3 x!2", E: "x ~@2 x", F: "x", G: "~@2 x!2 ~@4",
  H: "~ x", I: "x ~ x!2",
})).gain(0.64)

// drums · low tom
const low_tom = s("lt").struct("<~@5 A B ~@5 B C ~@11 A B ~@5 B C ~@8>".pickRestart({
  A: "~@7 x", B: "~ x", C: "x",
})).gain(0.64)

// drums · mid tom
const mid_tom = s("mt").struct("<~@4 A B C ~@5 D ~@11 A B C ~@5 D ~@9>".pickRestart({
  A: "~@2 x!3 ~@3", B: "~@3 x", C: "~ x ~@2", D: "~@5 x!2 ~",
})).gain(0.64)

// drums · open hat
const open_hat = s("oh").struct("<~ A B C D ~@4 E@4 ~@8 A B C D ~@4 E@4 ~@9>".pickRestart({
  A: "~@4 x ~ x!3 ~@3 x ~ x ~", B: "~@4 x ~@2 x!2 ~@3 x ~ x ~", C: "~@4 x ~@2 x!2 ~@3 x ~@2 x", D: "~@2 x!3 ~@2 x",
  E: "x",
})).gain(0.64)

// drums · high tom
const high_tom = s("ht").struct("<~@4 A B C ~@5 A ~@11 A B C ~@5 A ~@9>".pickRestart({
  A: "~@7 x", B: "x", C: "~@7 x ~@8",
})).gain(0.64)

// drums · crash
const crash = s("cr").struct("<~ A@7 ~ A@5 B ~@6 A@7 ~ A@5 B ~@5 C ~>".pickRestart({
  A: "x", B: "~ x", C: "x ~ x!2",
})).gain(0.64)

// drums · ride
const ride = s("rd").struct("<~@5 A@2 B C D E D E B F G H G H I J ~@4 A@2 B C D E D E B F G H G H I K L>".pickRestart({
  A: "~@4 x ~@2 x!2 ~@3 x ~ x ~", B: "~@4 x ~@2 x!2 ~@3 x ~@2 x", C: "x ~@3 x ~@2 x!2 ~ x ~ x ~ x ~", D: "~@4 x!4",
  E: "~@3 x!5", F: "x ~ x!3 ~@3", G: "x ~ x ~ x!4", H: "x ~@2 x!2 ~@3", I: "x ~@3 x ~@2 x!2 ~@3 x ~@2 x",
  J: "x ~@3 x ~@2 x!2 ~@3 x ~ x ~", K: "x ~ x!2", L: "x!16",
})).gain(0.64)

stack(piano, overdriven_guitar, bass, kick, snare, low_tom, mid_tom, open_hat, high_tom, crash, ride)