Strudelify

Comrades

F. L. BUCHTEL

KeyF majorTempo114 bpm
0:00/0:00
// Comrades — F. L. BUCHTEL
// 114 bpm, 3/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (1/4 at bar 1, 3/4 at bar 2) are rendered on a constant 3/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/5951100; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 165 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(114/3)

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

// other · trumpet · "2nd Trumpet"
const trumpet = note(`<
  A B@2 C@2 D@2 E@2 B@2 F G H ~@2 I J K L M N L O P J Q R S N L T H U V W X Y W Z AA AB AC AD AE Y AF AG AH ~@36 AI@2 AJ
  AK AL@2 AM AN AI@2 AJ AK AO AP AQ@2 AI@2 AJ AK AL@2 AM AN AI@2 AJ AK AO AP AI AR ~@7 I J K L M N L O P J Q R S N L T H
  U V W X Y W Z AA AB AC AD AE Y AF AG AH ~ AS AT AU AV@4
>`.pickRestart({
  A: "~@11 f4@2 f4@3", B: "f4@5 ab4@5 ~ g4@5", C: "[f4@21 ~@6 g4@2 g4@3]/2", D: "g4@5 bb4@5 ~ ab4@5",
  E: "[g4@21 ~@6 f4@2 f4@3]/2", F: "f4@5 f4@5 ~ f4@5", G: "d4@5 d4@5 ~ d4@5", H: "bb3@11 ~@5", I: "~@11 g4@2 g4@3",
  J: "g4@5 eb4@5 ~ g4@5", K: "ab4@11 ab4@5", L: "g4@5 eb4@5 ~ bb3@5", M: "bb3@8 ~@3 g4@2 g4@3",
  N: "ab4@5 c5@3 ~@5 ab4@3", O: "c4@5 d4@5 ~ eb4@5", P: "d4@8 ~@3 g4@2 g4@3", Q: "gb4@5 eb4@5 ~ gb4@5",
  R: "f4@5 d4@5 ~ f4@5", S: "eb4@8 ~@3 g4@2 g4@3", T: "c4@5 d4@5 ~ c4@5", U: "bb4@5 g4@5 ~ bb4@5",
  V: "c5@5 ab4@5 ~ c5@5", W: "bb4@5 g4@5 ~ f4@5", X: "eb4@8 ~@3 bb4@5", Y: "c5@5 eb5@3 ~@5 c5@3",
  Z: "eb4@5 f4@5 ~ g4@5", AA: "f4@8 ~@3 bb4@2 bb4@3", AB: "bb4@5 g4@5 ~ bb4@3 ~@2", AC: "a4@5 gb4@5 ~ a4@3 ~@2",
  AD: "ab4@5 f4@5 ~ ab4@3 ~@2", AE: "g4@8 ~@3 bb4@2 bb4@3", AF: "bb4@5 g4@5 ~ eb4@5", AG: "f4", AH: "eb4@11 ~@5",
  AI: "c5", AJ: "c5@5 bb4@5 ~ c5@5", AK: "eb5@11 db5@5", AL: "bb4", AM: "bb4@5 eb5@5 ~ db5@5", AN: "c5@5 ~@11",
  AO: "bb4@5 c5@5 ~ db5@5", AP: "f5@5 eb5@5 ~ db5@5", AQ: "[c5@21 ~@11]/2", AR: "c5@11 ~@5", AS: "~@11 bb4@5",
  AT: "eb5@5 ~@11", AU: "~@11 ab4@2 ab4@3", AV: "[bb4@53 ~@11]/4",
})).s("gm_trumpet").gain(0.3)

// other · trumpet · "3rd Trumpet"
const trumpet_2 = note(`<
  A B@2 C@2 D@2 E@2 B@2 F G H ~@2 I J K L M N O P Q K@2 R S N T U H V W X Y Z X AA AB AC AD AE AF Z AG U H ~@36 AH@2 AI
  AJ AK@2 AL AM AH@2 AI AJ AN AO AP@2 AH@2 AI AJ AK@2 AL AM AH@2 AI AJ AN AO AH AQ ~@7 I J K L M N O P Q K@2 R S N T U H
  V W X Y Z X AA AB AC AD AE AF Z AG U H ~ AR AS AT AU@4
>`.pickRestart({
  A: "~@11 d4@2 d4@3", B: "d4@5 f4@5 ~ eb4@5", C: "[d4@21 ~@6 eb4@2 eb4@3]/2", D: "eb4@5 g4@5 ~ eb4@5",
  E: "[eb4@21 ~@6 d4@2 d4@3]/2", F: "d4@5 d4@5 ~ d4@5", G: "c4@5 bb3@5 ~ ab3@5", H: "g3@11 ~@5", I: "~@11 eb4@2 eb4@3",
  J: "eb4@5 bb3@5 ~ eb4@5", K: "eb4@11 eb4@5", L: "eb4@5 bb3@5 ~ ab3@5", M: "g3@8 ~@3 eb4@2 eb4@3",
  N: "eb4@5 ab4@3 ~@5 eb4@3", O: "eb4@11 bb3@5", P: "a3@11 a3@5", Q: "ab3@8 ~@3 eb4@2 eb4@3", R: "d4@11 d4@5",
  S: "bb3@8 ~@3 eb4@2 eb4@3", T: "eb4@5 bb3@5 ~ g3@5", U: "ab3@5 bb3@5 ~ ab3@5", V: "g4@5 eb4@5 ~ g4@5",
  W: "ab4@5 eb4@5 ~ ab4@5", X: "g4@5 eb4@5 ~ bb3@5", Y: "g3@8 ~@3 g4@5", Z: "ab4@5 c5@3 ~@5 ab4@3",
  AA: "a3@5 d4@5 ~ eb4@5", AB: "d4@8 ~@3 g4@2 g4@3", AC: "g4@5 eb4@5 ~ g4@3 ~@2", AD: "gb4@5 eb4@5 ~ gb4@3 ~@2",
  AE: "f4@5 d4@5 ~ f4@3 ~@2", AF: "eb4@8 ~@3 g4@2 g4@3", AG: "g4@5 eb4@5 ~ bb3@2 g3@3", AH: "ab4",
  AI: "ab4@5 g4@5 ~ ab4@5", AJ: "c5@11 bb4@5", AK: "g4", AL: "g4@5 c5@5 ~ bb4@5", AM: "ab4@5 ~@11",
  AN: "g4@5 ab4@5 ~ bb4@5", AO: "db5@5 c5@5 ~ bb4@5", AP: "[ab4@21 ~@11]/2", AQ: "ab4@11 ~@5", AR: "~@11 bb3@5",
  AS: "eb4@5 ~@11", AT: "~@11 f4@2 f4@3", AU: "[g4@53 ~@11]/4",
})).s("gm_trumpet").gain(0.3)

// chords · piano
const piano = note(`<
  ~@3 A B ~@2 C D ~@2 E F G H I H I J K I L M N O I P Q I R S T U I J K I L M N O I P Q I R S T V W X Y Z AA AB Y AC W X
  Y Z AD AE AF@2 W X Y Z AA AB Y AC W X Y Z AD AE AG@2 AH AI AJ@2 ~@40 I J K I L M N O I P Q I R S T U I J K I L M N O I
  P Q I R S ~@10
>`.pickRestart({
  A: "~@5 [f3,ab3,d4]@5 ~ [f3,ab3,c4]@5", B: "[f3,ab3,bb3]@11 ~@5", C: "~@5 [eb3,g3,bb3,eb4]@5 ~ [eb3,ab3,c4]@5",
  D: "[eb3,g3,bb3]@11 ~@5", E: "[bb2,f3,ab3,bb3]@5 [bb2,f3,ab3,c4]@5 ~ [bb2,f3,ab3,bb3]@5", F: "[bb2,f3,ab3,d4]",
  G: "[eb2,eb3,g3,bb3,eb4]@5 [bb3,eb4,g4]@5 ~ [bb3,eb4,g4]@5", H: "[bb1,bb2]@5 [bb3,eb4,g4]@5 ~ [bb3,eb4,g4]@5",
  I: "[eb2,eb3]@5 [bb3,eb4,g4]@5 ~ [bb3,eb4,g4]@5", J: "[ab2,ab3]@5 [c4,eb4,ab4]@5 ~ [c4,eb4,ab4]@5",
  K: "[g2,g3]@5 [bb3,eb4,g4]@5 ~ [bb3,d4,f4]@5", L: "[ab2,ab3]@5 [c4,eb4]@5 ~ [c4,eb4]@5, ab4@15 ~",
  M: "[g2,g3]@5 [eb4,g4]@5 ~ [eb4,g4]@5, bb4@15 ~", N: "[f2,f3]@5 [c4,eb4]@5 ~ [c4,eb4]@5, a4@15 ~",
  O: "[bb1,bb2,bb3,d4,ab4] ~", P: "[eb2,eb3]@5 [c4,eb4,gb4]@5 ~ [c4,eb4,gb4]@5",
  Q: "[d2,d3]@5 [bb3,f4,ab4]@5 ~ [bb1,bb2,bb3,f4,ab4]@5", R: "[c2,c3]@5 [c4,eb4]@5 ~ [c4,eb4]@5, ab4@15 ~",
  S: "[eb2,eb3]@5 [bb3,eb4]@5 ~ [bb3,eb4]@5, g4@15 ~", T: "[bb1,bb2]@5 [bb3,d4]@5 ~ [ab3,c4]@5, f4@15 ~",
  U: "[g3,bb3,eb4]@5 [bb3,bb4]@5 ~ [bb3,bb4]@5, eb3@5 ~@3", // Eb Bb
  V: "[eb2,eb3,g3,bb3,eb4]@5 [eb4,g4]@3 [f4,ab4]@3 [gb4,a4]@2 [g4,bb4]@3", // Eb Fm Gbm Gm
  W: "[ab3,ab4,c5]@5 [c4,eb4]@5 ~@3 [bb4,d5]@3, ~@5 [c5,eb5]@8 ~@3, ~@11 [c4,eb4]@5", // Ab Cm Bb Cm
  X: "[ab3,d5,f5]@5 [c4,eb4,c5,eb5]@5 ~ [c4,eb4,ab4,c5]@5", // Ddim Cm Ab
  Y: "[eb3,g4,bb4]@5 [g3,bb3]@5 ~@3 [f4,ab4]@3, ~@5 [eb4,g4]@8 ~@3, ~@11 [g3,bb3]@5", // Eb Gm Fm Eb Gm
  Z: "eb3@5 [g3,bb3]@5 ~ [g3,bb3]@5, [g4,bb4]@15 ~", // Gm
  AA: "[bb2,d4,bb4]@5 [f3,ab3,bb3]@5 ~@3 [eb4,g4]@3, ~@5 [d4,f4]@8 ~@3, ~@11 [f3,ab3,bb3]@5", // Bb Bb7 Eb Dm Bb7
  AB: "eb3@5 [f3,ab3,bb3]@5 ~ [f3,ab3,bb3]@5, [f4,ab4]@15 ~", // Bb7 Fm
  AC: "[eb3,g4,bb4]@5 [g3,bb3,db4,g4,eb5]@5 ~ [g3,bb3,db4,g4,eb5]@5", // Eb Eb7
  AD: "[bb2,d4,bb4]@5 [f3,ab3,bb3]@5 ~@3 [d4,g4]@3, ~@5 [d4,f4]@8 ~@3, ~@11 [f3,ab3,bb3]@5", // Bb Bb7 G5 Dm Bb7
  AE: "[c4,d4,ab4]@5 [bb3,d4,g4]@5 ~ [ab3,d4,f4]@5, bb2@15 ~", // Dm7b5 Gm Ddim
  AF: "[eb2@5 g2@5 ~ bb2@5 [eb2,eb3]@5 [eb4,g4]@3 [f4,ab4]@3 [gb4,a4]@2 [g4,bb4]@3, [g3,bb3,eb4]@5 ~@3]/2", // Eb Fm Gbm Gm Eb
  AG: "[eb2@5 g2@5 ~ bb2@5 [eb2,eb3]@5 eb4@3 d4@3 eb4@2 f4@3, [g3,bb3,eb4]@5 ~@3]/2", // Eb
  AH: "g4@5 g4@3 gb4@3 g4@2 ab4@3, [eb3,g3,bb3,db4]@11 ~@5", AI: "bb4@5 bb4@3 a4@3 bb4@2 c5@3, [eb3,g3,bb3,db4]@11 ~@5",
  AJ: "[eb3@5 eb3@3 f3@3 g3@2 f3@3 eb3@5 db3@5 ~ bb2@5, [eb4,g4,bb4,db5]@25 ~@7]/2", // Eb7
})).s("gm_piano").gain(0.3)

stack(trumpet, trumpet_2, piano)