Strudelify

At the Gates of Constantinople

Andreas Waldetoft

KeyB♭ majorTempo132 bpm
0:00/0:00
// At the Gates of Constantinople — Andreas Waldetoft
// 132 bpm, 4/4, key Bb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Transcription provider: pdmx. https://musescore.com/score/5899701; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 127 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(132/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.

// other · cello · "Violoncello"
const cello = note(`<
  A@7 B@4 C@7 D E F G F G F G F H I J I J I J I J I J I J I J I J I K I J I J I J I J I J I J I L M N O P Q O@2 L M N O
  P R S@2 T@2 U@2 T@2 V W J I K I J I J I J I J I J I J I L M N O P Q O@2 L M N O P R S@2 X Y Z AA AB AC AD Z AE@4
>`.pickRestart({
  A: "[~@15 g3@21 f3@3 g3@3 ~ ab3@10 bb3@2 ab3@2 g3@7 f3@7 g3@55 g3@21 f3@3 ~ g3@3 ab3@10 ~@2 ab3@2, ~@165 b3@2 ~]/7",
  B: "[g3@7 f3@7 g3@28 g3@14 d3@7 eb3@6 f3@21 g3@6]/4",
  C: "[~ eb3@10 ~@2 eb3@2 d3@7 c3@7 b2@28 b2@21 c3@7 d3@27 d3@28 g2@28, ~@6 f3 ~@77]/7", D: "g2@9 [g2,d3]!3",
  E: "~ g3@11, g2, ~ d3@23", F: "g2 ab2", G: "g2!2", H: "[g2,d3]@3 g3!3 b3 ab3 g3 f3 g3 ab3",
  I: "g3@3 g3!3 ab3 ~ f3 ~ g3 ab3", J: "g3@3 g3!3 b3 ab3 g3 f3 g3 ab3", K: "ab3@3 ab3!3 b3 ab3 g3 f3 g3 ab3",
  L: "[g2,g3] [b2,b3]", M: "[c3,c4]@3 [d3,d4]", N: "[eb3,eb4]", O: "[d3,d4]", P: "[d3,d4] [c3,c4]",
  Q: "[b2,b3]@3 [c3,c4]", R: "[b2,b3]@3 [ab2,ab3]", S: "[g2,g3]", T: "f4@6 f4@6 f4 ~ f4 ~ f4 ~ f4@6",
  U: "d4@6 d4@6 d4 ~ d4 ~ d4 ~ d4@6", V: "g2 gb2 g2 ab2 g2 ab2 b2 ab2 b2 ab2 f2 ab2",
  W: "g3 gb3 g3 ab3 g3 ab3 b3 ab3 b3 ab3 f3 ab3", X: "g3", Y: "f3 eb3", Z: "d3", AA: "d3@2 c3 d3",
  AB: "eb3@21 f3 ~ eb3", AC: "d3 c3", AD: "b2 ~ c3 d3@21", AE: "g2",
})).s("gm_cello").gain(0.45)

// chords · piano
const piano = note(`<
  ~@18 A B C D E B C D E B C D E B C D E B C D E B C D E F G H G I G D G I G H G F G D J@2 K L M N O@3 P K L M N O Q R S
  T U@2 T@2 U V W G H G I G D G I G H G F G D J@2 K L M N O@3 P K L M N O Q X Y@8 ~@4
>`.pickRestart({
  A: "~@9 [bb3,d4,g4]!2 [bb1,bb2,bb3,d4,g4], ~@3 [g2,g3], ~@5 [d2,d3]", // Gm G D
  B: "[bb3,d4]!3 [g3,bb3,d4]!2 g3 ~ [bb3,d4]!2 [g3,bb3,d4]!3, [g1,g4], g3@3 ~@2 [bb3,d4]@2 ~@5, ~ g2, ~@2 g3 ~", // Bb Gm Bb Gm G Bb
  C: "~ [bb3,d4]!2 [g3,bb3,d4]!2 ~ ab3 [ab3,c4,eb4]!2 ab3!2 [d2,ab3], g2@5 f2, g3@3 ~@2 [g3,bb3,d4]@7, ~ ab2, ~@3 [c4,eb4]", // Bb Gm Ab Ddim Gm Cm
  D: "~ [bb3,d4]!2 [g3,bb3,d4]!2 g3 ~ [bb3,d4]!2 [g3,bb3,d4]!3, g1, g3@3 ~@2 [bb3,d4]@2 ~@5, ~ g2, ~@2 g3 ~", // Bb Gm Bb Gm Bb
  E: "~ [bb3,d4]!2 [g3,bb3,d4]!2 ~ ab3!6, g2, g3@3 ~@2 [g3,bb3,d4]@7, ~@3 [ab1,ab2]@2 [ab1,ab2], ~@2 [f1,f2]", // Bb Gm Ab F
  F: "[bb3,d4]!3 [g3,bb3,d4]!2 g3 ~ [bb3,d4] ~ g3 [g3,bb3,d4]!2, [g1,g4], g3@3 ~@2 [bb3,d4]@2 ~ [bb3,d4]@2 ~@2, ~@2 [g2,g3] g2", // Bb Gm Bb Gm G Bb G
  G: "~ [bb3,d4]!2 [g3,bb3,d4]!2 ~ ab3!6, g2, g3@3 ~@2 [g3,bb3,d4]@7, ~@3 [ab1,ab2] [ab1,ab2]@2, ~@5 [f1,f2]", // Bb Gm Ab F
  H: "~ [c4,eb4]!2 [ab3,c4,eb4]!2 ~@2 [bb3,d4]!2 [g3,bb3,d4]!3, ab1, ab3@3 ~@2 [ab3,c4,eb4]@7, ~ g2, ~@2 g3 ~", // Cm Ab Bb Gm Ab
  I: "~ [bb3,d4]!2 [g3,bb3,d4]!2 g3 ~ [bb3,d4] ~ g3 [g3,bb3,d4]!2, g1, g3@3 ~@2 [bb3,d4]@2 ~ [bb3,d4]@2 ~@2, ~@2 [g2,g3] g2", // Bb Gm Bb Gm Bb G
  J: "[~@2 [bb3,d4]@2 [bb3,d4]@2 [g3,bb3,d4]@2 [g3,bb3,d4]@2 [g3,bb3]@2 ~@11 [f5,gb5] g4@2 [b3,d4,g4]@2 [b3,d4,g4]@2 [b3,d4,g4]@2 [b3,d4,g4]@2 ~@4 [b3,d4,g4]@2 ~@4 [b3,d4,g4]@2 [b3,d4,g4]@2, g2@15 [db4,d4] [ab1,ab2,eb4] [e4,f4,gb4]@7 g2@12 [g2,g3]@12, g3@6 ~@4 d4@3 a3@5 [g4,ab4] a4 [f1,f2,bb4,b4,c5] [db5,d5] eb5@2 [g1,bb4,d5,g5]@24, ~@12 [g3,ab3]@11 e5@2 ~@17 [d2,d3]@6, ~@12 [ab1,ab2]@2 [bb3,b3,c4]@11 ~@9 [b3,d4,g4]@4 ~@2 [b3,d4,g4]@4 ~@4]/2", // Bb Gm Gbmaj7 G Dmaj7 Ab5 G Abmaj7 …
  K: "~ [c4,eb4,g4]!4 ~@2 [c4,eb4,g4]!5, [g1,g2], ~@5 [c4,eb4,g4]@2 ~@5, ~@3 [ab1,ab2]!3", // Cm G Cm Ab
  L: "~ [c4,eb4,ab4]!4 ~@2 [c4,eb4,ab4] ~@2 [c4,eb4,ab4]!2, ab1, ab2 [ab2,ab3], ~@5 [c4,eb4,ab4]@2 ~ [c4,eb4,ab4]@2 ~@2, ~@3 [eb2,eb3]", // Ab Eb
  M: "~ [bb3,d4,g4]!4 ~@2 [c4,eb4,ab4]!5, [g1,g2], ~@5 [bb3,d4,g4]@7, ~@3 [f1,f2]@2 [f1,f2], ~@2 [ab1,ab2]", // Gm Ab G Gm F Ab
  N: "g4 [b3,d4,g4]!4 ~@2 [c4,eb4,ab4] ~@2 [c4,eb4,ab4]!2, [g1,g2,g5], ~@5 [b3,d4,g4]@7, ~ [ab2,ab3], ~@8 [c4,eb4,ab4] [eb2,eb3]@3", // G Ab G Ab Eb
  O: "~ [b3,d4,g4]!4 ~@2 [c4,eb4,ab4]!5, [g1,g2], ~@5 [b3,d4,g4]@7, ~@3 [f1,f2]@2 [f1,f2], ~@2 [ab1,ab2]", // G Ab G F Ab
  P: "g4 [b3,d4,g4]!4 ~@2 [b3,d4,g4] ~@2 [b3,d4,g4]!2, [g1,g5], g2 [g2,g3], ~@5 [b3,d4,g4]@2 ~ [b3,d4,g4]@2 ~@2, ~@3 [d2,d3]", // G D
  Q: "~ [bb3,d4,g4]!4 ~ [c4,eb4]!6, [g1,g2], ~@5 [bb3,d4,g4]@7, ~@3 [f1,f2]@2 [f1,f2], ~@2 [ab1,ab2]", // Gm Cm G Gm F Ab
  R: "~@2 [bb3,b3,d4,g4]@2 [bb3,b3,d4,g4]@2 [bb3,b3,d4,g4]@2 [bb3,b3,d4,g4]@2 g4@2 ~@6 db6 ~@4 [gb5,g5], [g1,g2]@14 [bb2,d3,c5,db5,d5,eb5] [e5,f5,gb5] [ab1,ab2,bb2,d3,g5,ab5,a5] [bb5,b5,c6] [bb2,d3,d6] [c6,db6] [f1,f2,bb2,d3,b5] [a5,bb5] [bb2,d3,ab5]@2, ~@5 [bb3,b3,d4]@7, ~ [g4,ab4], ~@12 [f1,f2] [a4,bb4,b4]@11", // G Gmaj7 G Gm Bb Dbmaj7 Bb Bbmaj7 …
  S: "~ [ab3,c4]!4 ~@2 [ab3,c4] ~@2 [ab3,c4]!2, [f1,f4,f5], f2!2, ~@5 [ab3,c4]@2 ~ [ab3,c4]@2 ~@2, ~@3 c2", // Ab F Ab
  T: "~ [ab3,c4]!4 ~@2 [ab3,c4] ~@2 [ab3,c4]!2, f1, f2!2, ~@5 [ab3,c4]@2 ~ [ab3,c4]@2 ~@2, ~@3 c2", // Ab
  U: "~ [b3,d4,g4]!4 ~@2 [b3,d4,g4]!5, [g1,g2]!2, ~@5 [b3,d4,g4]@2 ~@2 [d1,d2]@3", // G D
  V: "~@2 [b3,d4,g4]@2 [b3,d4,g4]@2 [b3,d4,g4]@2 [b3,d4,g4]@2 ~@13 [a3,bb3,b3,c4,db4], [g1,g2]@20 [f1,f2,c5,db5,d5,eb5,e5] [g4,ab4,a4,bb4,b4] [d4,eb4,e4,f4,gb4]@2, ~@10 [b3,d4]@8 ab4 [f5,gb5,g5,ab5,a5]@5, ~@10 g4@6 c5 [a4,bb4,b4] [bb5,b5,c6]@6, ~@12 [f1,f2,g5,ab5] gb5 [eb5,e5,f5] [db5,d5] [ab1,ab2]@8", // G Bm Fm Dmaj7 Ab
  W: "ab3 ~ [bb3,d4]@2 [bb3,d4]@2 [g3,bb3,d4]@2 [g3,bb3,d4]@2 g3@2 ~@2 [bb3,d4]@2 [bb3,d4]@2 [g3,bb3,d4]@2 [g3,bb3,d4]@2 [g3,bb3,d4]@2, g1, g3@3 ~@2 [bb3,d4]@2 ~@5, ~ g2, ~@2 g3 ~", // Bb Gm Bb Gm Bb
  X: "~ [b3,d4,g4]!4 ~@2 [b3,d4,g4]!5, [g1,g2], ~@5 [b3,d4,g4]@2 ~ [ab1,ab2]@4, ~@3 [f1,f2]@2 [f1,f2]", // G Ab F
  Y: "[g1,g2,g3,bb3,d4,g4]/8", // Gm
})).s("gm_piano").gain(0.4)

stack(cello, piano)