Strudelify

The Hills of Manchuria

Ilya Shatrov

KeyF majorTempo160 bpm
0:00/0:00
// The Hills of Manchuria — Ilya Shatrov
// 160 bpm, 3/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5844233; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 100 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(160/3)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [...]/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 · trombone · "Trombone 1"
const trombone = note(`<
  ~@4 A B A ~ C D E ~ F G H I J D E ~ A B A ~ C D E ~ F G H I J D E ~ K L M N O M P Q R S T U V W X ~ Y@2 Z@2 AA D AB@2
  F G H I J D E AC AD@2 Q AE AF@2 AG@2 AH AI AJ AK AL AM X ~ A B AN@2 C D E ~ F G H I J D E ~
>`.pickRestart({
  A: "a3", B: "f3@11 g3@5", C: "ab3@5 a3@5 ~ db4@5", D: "f4@11 e4@5", E: "d4", F: "a3@5 d4@5 ~ f4@5", G: "db4@11 d4@5",
  H: "e4@5 d4@5 ~ bb3@5", I: "e4@11 d4@5", J: "a3@5 d4@5 ~ e4@5", K: "d4@11 eb4@5", L: "d4@11 c4@5", M: "c4@11 bb3@5",
  N: "bb3@5 a3@5 ~ bb3@5", O: "c4@11 d4@5", P: "bb3@5 a3@5 ~ ab3@5", Q: "a3@11 ~@5", R: "d3@5 f3@5 ~ a3@5",
  S: "d4@5 f4@5 ~ e4@5", T: "d4@5 bb3@5 ~ g3@5", U: "d4@11 bb3@5", V: "a3@5 bb3@5 ~ a3@5", W: "e3@11 f3@5",
  X: "d3@11 ~@5", Y: "[a3@21 f3@5 ~ g3@5]/2", Z: "[a3@27 bb3@5]/2", AA: "a3@5 db4@5 ~ e4@5", AB: "[d4@27 d4@5]/2",
  AC: "~@5 bb3 a3@2 ab3@3 a3@2 bb3@3", AD: "[a3@8 e3@3 e3@10 f3@5 ~ g3@5]/2", AE: "~@5 d4 c4@2 b3@3 c4@2 d4@3",
  AF: "[c4@8 g3@3 g3@10 a3@5 ~ bb3@5]/2", AG: "[c4@21 c4@5 ~ db4@5]/2", AH: "d4 a3", AI: "a3@5 ab3@5 ~ a3@5",
  AJ: "c4 bb3", AK: "~@5 a3@5 ~ g3@5", AL: "f3@11 a3@5", AM: "e3@11 a3@5", AN: "a3/2",
})).s("gm_trombone").gain(0.3)

// other · trombone · "Trombone 2"
const trombone_2 = note(`<
  ~@4 A B C D C E F G A H I J K L M G A B C D C E F G A H I J K L N K O P Q R S T U V W X Q Y B Z N AA A B C D C E F AB
  B F I AC K L AD AA AE AF AG AH S AI AJ AK M A AL AM AA AN AO AP A B C D C E F G A H I J AQ AR AS AT
>`.pickRestart({
  A: "d3", B: "a2", C: "db3", D: "e3@11 d3@5", E: "f3@5 e3@5 ~ db3@5", F: "d3@11 bb2@5", G: "a2@5 d3@5 ~ e3@5",
  H: "f3@11 a2@5", I: "g2@5 bb2@5 ~ d3@5", J: "g3", K: "d3@5 e3@5 ~ f3@5", L: "a3@11 g3@5", M: "f3", N: "d3@11 a2@5",
  O: "gb3@5 d3@5 ~ c3@5", P: "a2@11 gb3@5", Q: "g3@5 d3@5 ~ bb2@5", R: "g2@11 d3@5", S: "e3@5 c3@5 ~ bb2@5",
  T: "g2@11 e3@5", U: "f3@5 c3@5 ~ d3@5", V: "f3@11 e3@5", W: "a2@5 d3@5 ~ f3@5", X: "a3@11 f3@5", Y: "e3",
  Z: "a2@5 b2@5 ~ db3@5", AA: "d3@5 ~@11", AB: "a2@11 bb2@5", AC: "g3@11 f3@5", AD: "f3@5 d3@5 ~ a2@5",
  AE: "e3@3 ~@2 db3@3 ~@3 bb2@3 ~@2", AF: "a2@3 ~@2 b2@3 ~@3 db3@3 ~@2", AG: "d3@3 ~@2 f3@3 ~@3 d3@3 ~@2",
  AH: "a2@3 ~@13", AI: "g2@5 c3@5 ~ e3@5", AJ: "f3@5 c3@5 ~ a2@5", AK: "c3@5 f3@5 ~ e3@5", AL: "bb2", AM: "g2",
  AN: "db3@5 ~@11", AO: "a2@5 ~@6 a2@3 ~@2", AP: "d3@3 ~@13", AQ: "f3@5 d3@5 ~ bb2@5", AR: "a2@11 db3@5",
  AS: "d3@5 ~@6 a2@3 ~@2", AT: "d3 ~@3",
})).s("gm_trombone").gain(0.3)

// bass · tuba
const bass = note(`<
  A B A B A B C D@2 C A E A B F G B D A H A B C D@2 C A E A B F G B D A I J K L F M N O P A B G Q B D A I A B C D@2 C A
  E A B F G B D A I R S T U V W X Y A B G Q B D T U A B C D@2 C A E A B F Z AA AB AC AD
>`.pickRestart({
  A: "d2@5 f2@5 ~ f2@5", B: "a1@5 f2@5 ~ f2@5", C: "db2@5 e2@5 ~ e2@5", D: "a1@5 e2@5 ~ e2@5", E: "a1@5 f2@5 ~ e2@5",
  F: "bb1@5 g2@5 ~ g2@5", G: "g1@5 g2@5 ~ g2@5", H: "f2@5 d2@5 ~ db2@5", I: "f2@5 ~@11", J: "d2@5 gb2@5 ~ gb2@5",
  K: "a1@5 gb2@5 ~ gb2@5", L: "g1@5 d2@5 ~ g2@5", M: "c2@5 g2@5 ~ g2@5", N: "e2@5 g2@5 ~ g2@5", O: "f2@5 a2@5 ~ a2@5",
  P: "c2@5 f2@5 ~ db2@5", Q: "d2@5 g2@5 ~ g2@5", R: "a1@5 e2@3 ~@3 e2@3 ~@2", S: "db2@5 e2@3 ~@3 e2@3 ~@2",
  T: "d2@5 f2@3 ~@3 f2@3 ~@2", U: "f2@3 ~@13", V: "c2@5 e2@5 ~ e2@5", W: "g1@5 e2@5 ~ e2@5", X: "f2@5 f2@5 ~ f2@5",
  Y: "c2@5 f2@5 ~ e2@5", Z: "g1@5 d2@5 ~ d2@5", AA: "a1@5 a2@5 ~ f2@5", AB: "a1@5 g2@5 ~ e2@5",
  AC: "d2@3 ~@2 f2@3 ~@3 db2@3 ~@2", AD: "d2 ~@3",
})).s("gm_tuba").gain(0.25)

stack(trombone, trombone_2, bass)