Strudelify

The Fire of Eternal Glory

Dmitri Shostakovich

KeyF majorTempo120 bpm
0:00/0:00
// The Fire of Eternal Glory — Dmitri Shostakovich
// 120 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/308366; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 42 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(120/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// other · trumpet · "Bb Trumpet"
const trumpet = note("<~@29 A B C D E F G F H I J K L>".pickRestart({
  A: "~@2 db5 d5", B: "eb5@3 d5 c5 bb4 c5 d5", C: "eb5@2 c5 d5 eb5@2 f5@2", D: "g5@4 f5 eb5 f5 g5",
  E: "f5@2 d5 eb5 f5 d5 eb5 f5", F: "g5@2 f5 eb5", G: "d5 eb5 f5 g5 f5@2 bb4@2", H: "d5 c5 d5 eb5 f5@2 g5@2",
  I: "ab5@3 g5 f5 eb5 f5 g5", J: "ab5@2 f5 g5 ab5@2 eb5 f5", K: "g5@2 f5 eb5 f5@3 eb5", L: "eb5",
})).s("gm_trumpet").gain(0.4)

// other · trumpet · "Bb Trumpet" · soft notes
const trumpet_soft = note("<~@26 [eb5@2 db5 b4] [bb4 b4 db5 eb5 db5@2 gb4@2] [eb5@2 db5 b4] [bb4 ab4 bb4 b4 ~@4] ~@12>")
  .s("gm_trumpet").gain(0.2)

// other · trumpet · "Bb Trumpet"
const trumpet_2 = note("<~@29 A B C D E F G F H I J K L>".pickRestart({
  A: "~@2 bb4!2", B: "bb4@3 bb4", C: "bb4!4", D: "eb5@4 d5 c5 d5 eb5", E: "d5@2 bb4 c5 d5 bb4 c5 d5", F: "eb5@2 d5 c5",
  G: "bb4 c5 d5 eb5 d5@2 bb4@2", H: "bb4 f4 bb4 c5 d5@2 eb5@2", I: "eb5@3 eb5", J: "eb5!4", K: "eb5@2 d5 c5 d5@3 bb4",
  L: "bb4",
})).s("gm_trumpet").gain(0.4)

// other · trumpet · "Bb Trumpet" · soft notes
const trumpet_soft_2 = note(`<
  ~@26
  [b4@2 bb4 gb4]
  [gb4 ab4 bb4 b4 bb4@2 bb4@2]
  [b4@2 bb4 ab4]
  [gb4 db4 gb4 ab4 ~@4]
  ~@12
>`).s("gm_trumpet").gain(0.2)

// other · french horn · "Horn"
const french_horn = note("<~@17 A B C D E F G H I ~@3 J K L M N O P O Q R S H T>".pickRestart({
  A: "~@3 eb3", B: "bb3@3 c4 bb3 ab3 g3 ab3", C: "bb3@3 ab3 g3@2 eb3@2", D: "c4@2 db4 c4", E: "c4@2 bb3 ab3 bb3@4",
  F: "b3@2 a3 b3", G: "c4 d4 eb4 f4", H: "g4@2 f4 eb4 f4@3 eb4", I: "eb4", J: "~@3 b3 db4@2 d4@2",
  K: "eb4@3 d4 c4 bb3 c4 d4", L: "eb4@2 c4 d4 eb4@2 f4@2", M: "g4@4 f4 eb4 f4 g4", N: "f4@2 d4 eb4 f4 d4 eb4 f4",
  O: "g4@2 f4 eb4", P: "d4 eb4 f4 g4 f4@2 bb3@2", Q: "d4 c4 d4 eb4 f4@2 g4@2", R: "ab4@3 g4 f4 eb4 f4 g4",
  S: "ab4@2 f4 g4 ab4@2 eb4 f4", T: "g4",
})).s("gm_french_horn").gain(0.4)

// other · french horn · "Horn" · soft notes
const french_horn_soft = note(`<
  ~@26
  [eb4@2 db4 b3]
  [bb3 b3 db4 eb4 db4@2 gb3@2]
  [eb4@2 db4 b3]
  [bb3 ab3 bb3 ~@5]
  ~@12
>`).s("gm_french_horn").gain(0.2)

// other · trombone
const trombone = note("<~@14 A B C D E F G E H I J K ~@3 L M N O P Q R Q S T U V W>".pickRestart({
  A: "~ c3", B: "bb2 g2", C: "f3@4 eb3@3 d3", D: "d3@5 ~ bb2@2", E: "eb3", F: "d3@2 eb3 bb2 bb2@2 ab2 bb2",
  G: "c3 eb3@3", H: "d3@2 c3 d3", I: "g3@2 eb3!2", J: "eb3@2 bb3@2 ab3@3 g3", K: "g3", L: "~@3 ab3", M: "g3@3 g3",
  N: "g3 eb4 g3 bb3", O: "c4 g3 c4 bb3 a3@4", P: "bb3!4", Q: "eb4 f4", R: "d4@2 c4 d4", S: "d4@4 c4 bb3 bb3@2",
  T: "c4@3 c4", U: "c4 bb3 c4!2", V: "bb3@4 bb3@3 bb3", W: "eb4",
})).s("gm_trombone").gain(0.3)

// other · trombone · soft notes
const trombone_soft = note("<~@10 A B C D E ~@11 F G F H ~@12>".pickRestart({
  A: "g3@3 ab3 g3 f3 g3 f3", B: "f3@2 bb2@2 bb2@2 ab2 bb2", C: "c3 eb3@3", D: "eb3", E: "c3 ~", F: "gb3 eb4",
  G: "db4@3 gb3", H: "db4@3 ~",
})).s("gm_trombone").gain(0.2)

// bass · tuba · "Euphonium"
const bass = note("<~@14 A B C D E F G H I J K L ~@3 M N O P Q R S R T U V W X>".pickRestart({
  A: "~ eb3", B: "eb3!2", C: "bb3@4 a3@3 f3", D: "f3@5 ~ bb2@2", E: "bb2@3 c3", F: "bb2@2 c3 d3 eb3@2 eb3@2", G: "eb3",
  H: "eb3@2 g3 f3", I: "g3 b3 a3 g3", J: "a3 b3 g3 ab3", K: "g3@2 f3 eb3 f3@3 eb3", L: "[eb3,eb4]", M: "~@3 d3",
  N: "eb3@3 bb2", O: "bb2!2 eb3 d3", P: "c4 g3 c4 bb3 f3@4", Q: "bb2!3 f3", R: "g3 bb3", S: "f3@3 bb3", T: "f3@3 g3",
  U: "ab3@3 eb3", V: "ab3 eb3 ab3 eb3", W: "eb3@4 f3@3 g3", X: "g3",
})).s("gm_tuba").gain(0.3)

// bass · tuba · "Euphonium" · soft notes
const bass_soft = note("<~@9 A B C D E F ~@11 G H G I ~@12>".pickRestart({
  A: "~@3 eb3", B: "eb3", C: "d3@2 g3 f3 eb3@2 eb3@2", D: "eb3@2 bb3 ab3", E: "ab3@2 g3 f3 g3@4", F: "eb3 ~",
  G: "eb3 gb3", H: "gb3@3 db3", I: "db3@3 ~",
})).s("gm_tuba").gain(0.2)

// bass · tuba · "Euphonium"
const bass_2 = note("<~@14 A B C D E F G H I J K L ~@3 M N O P Q R S R T U V W X>".pickRestart({
  A: "~ c3", B: "bb2 g2", C: "f3@2 d4@2 c4@3 bb3", D: "bb3@5 ~ g3@2", E: "bb2@3 c3", F: "bb2@2 c3 d3 eb3@2 eb3@2",
  G: "eb3!2", H: "eb3@5 d3 eb3 f3", I: "g3@3 d3 g3@2 f3@2", J: "c3@3 d3 eb3@2 b2@2", K: "bb2@4 bb2@3 eb3",
  L: "eb3 bb2 eb3 db3", M: "~@3 d3", N: "eb3@3 bb2", O: "bb2!2 eb3 d3", P: "c4 g3 c4 bb3 f3@4", Q: "bb2!3 f3",
  R: "g3 bb3", S: "f3@3 bb3", T: "f3@3 g3", U: "ab3@3 eb3", V: "ab3 eb3 ab3 eb3", W: "eb3@4 f3@3 g3", X: "g3",
})).s("gm_tuba").gain(0.3)

// bass · tuba · "Euphonium" · soft notes
const bass_soft_2 = note("<~@10 A B C D E ~@11 F G F H ~@12>".pickRestart({
  A: "bb2@3 c3", B: "bb2@2 c3 d3 eb3@2 eb3@2", C: "eb3!2", D: "ab2@2 g2 f2 g2@4", E: "c3 ~", F: "eb3 gb3",
  G: "gb3@3 db3", H: "db3@3 ~",
})).s("gm_tuba").gain(0.2)

// bass · tuba · "Bb Tuba"
const bass_3 = note("<~@14 A B C D E F G H I J K L M N M O P Q R S T U T V W X Y Z>".pickRestart({
  A: "~@2 f2 ab2", B: "g2 eb2", C: "f2@4 f2@3 bb1", D: "bb1@5 ~ eb2@2", E: "eb2@3 c2", F: "bb1@2 c2 d2 eb2@2 f2 g2",
  G: "ab2 eb2 g2 ab2", H: "eb2@5 d2 eb2 f2", I: "g2@3 d2 g2@2 f2@2", J: "c2@3 d2 c2@2 b1@2", K: "bb1@7 eb2",
  L: "eb2 bb1 eb2 db2", M: "b1 eb2", N: "gb2@3 gb2", O: "gb2@3 bb1", P: "eb2@3 bb2", Q: "eb2 bb1 eb2 d2", R: "c3 f2",
  S: "bb2!4", T: "eb2 g2", U: "bb2@3 bb2", V: "bb2@3 eb2", W: "ab2@3 eb2", X: "ab1 eb2 ab1 c2", Y: "bb1@4 bb1@3 eb2",
  Z: "eb2",
})).s("gm_tuba").gain(0.3)

// bass · tuba · "Bb Tuba" · soft notes
const bass_soft_3 = note("<~@10 [eb2@3 c2] [bb1@2 c2 d2 eb2@2 f2 g2] [ab2 eb2 g2 ab2] [eb2@6 f2 g2] [ab2 ~] ~@27>")
  .s("gm_tuba").gain(0.2)

// chords · glockenspiel
const glockenspiel = note("<A B C A B C A B C ~@33>".pickRestart({
  A: "~@3 eb6", B: "[g6,bb6]@3 [ab6,c7] [g6,bb6] [f6,ab6] [eb6,g6] [f6,ab6]", C: "[g6,bb6]@3 [f6,ab6] [eb6,g6]@4",
})).s("gm_glockenspiel").gain(0.3)

// chords · glockenspiel
const glockenspiel_2 = note("<~ A B ~ A B ~ A B ~@33>".pickRestart({
  A: "[eb6,g6]@2 [eb6,g6] [c6,eb6]", B: "[bb5,d6] eb6",
})).s("gm_glockenspiel").gain(0.3)

// other · timpani
const timpani = note("<~@18 A B C D ~ E F G H ~@2 I J K L M N O N P Q R S T>".pickRestart({
  A: "eb3 ~@2 c3", B: "bb2 ~ eb3 ~", C: "ab2 ~ g3 ~", D: "eb3 ~@3", E: "~@2 c3 ~", F: "bb2@2 ~@2 bb2@2 ~ eb2",
  G: "eb2!24", H: "b2 ~@3", I: "~@3 bb2", J: "eb3 ~@2 bb2", K: "eb3 bb2 eb3 d3", L: "c3 ~ f2 ~", M: "bb2!24",
  N: "eb3 ~ g3 ~", O: "bb2 ~@2 bb2", P: "bb2 ~@2 eb3", Q: "ab2 ~@2 eb3", R: "ab2 eb3 ab2 c3",
  S: "bb2@2 ~@2 bb2@2 ~ eb3", T: "eb3!24",
})).s("gm_timpani").gain(0.5)

// drums · mid tom
const mid_tom = s("mt").struct("<~@33 [~@12 x!12] ~ [~@12 x!12] ~@4 [~@12 x!12] [x!24]>").gain(0.3)

// drums · mid tom · soft notes
const mid_tom_soft = s("mt").struct("<~@40 [x!12 ~@12] ~>").gain(0.2)

// drums · crash
const crash = s("cr").struct("<~@33 A B A B ~ B@2 C B>".pickRestart({
  A: "~@12 x!12", B: "x", C: "x!24",
})).gain(0.25)

// drums · triangle
const triangle = s("triangles:35").struct("<~@34 [x!24] ~ [x!24] ~ [x!24]!4>").gain(4.32)

stack(
  trumpet, trumpet_soft, trumpet_2, trumpet_soft_2, french_horn, french_horn_soft, trombone, trombone_soft, bass,
  bass_soft, bass_2, bass_soft_2, bass_3, bass_soft_3, glockenspiel, glockenspiel_2, timpani, mid_tom, mid_tom_soft,
  crash, triangle
)

More by Dmitri Shostakovich