Strudelify

Guard of Honour March

Tonni Wei Shi Ren

KeyE♭ majorTempo120 bpm
0:00/0:00
// Guard of Honour March — Tonni Wei Shi Ren
// 120 bpm, 4/4, key Eb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 3 "Oboe" oboe (copy of ch 2 "Flute" flute); ch 4 "B♭ Clarinet" clarinet (copy of ch 2 "Flute" flute); ch 5 "B♭ Clarinet" clarinet (copy of ch 8 "B♭ Trumpet" trumpet)
// note: Transcription provider: pdmx. https://musescore.com/score/2584371; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 44 bars on a 16-step grid, each part at one level. 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 · piccolo
const piccolo = note(`<
  ~@2 A B A C D E A F G H A C D E A F I J K@2 L M N@2 O P K@2 L M N@2 O Q A C D E A F I J
>`.pickRestart({
  A: "eb6@4 g6@4 bb6@2 bb6!2 bb6@2 bb6@2", B: "a6 bb6 c7 d7 eb7@2 bb6 g6", C: "c7 bb6 a6 bb6 c7 bb6 g6 eb6",
  D: "d6@4 f6@4 bb6@2 bb6!2 bb6@2 bb6@2", E: "d7 c7 bb6 ab6 g6@2 bb6 g6", F: "g6 gb6 g6 a6 bb6 c7 d7 eb7",
  G: "d7@2 d7!2 d7@2 bb6@2 eb7@4 d7@2 eb7@2", H: "f7 eb7 d7 c7 bb6@2 bb6 g6",
  I: "c7@4 f7 eb7 d7 c7 bb6@4 eb7 d7 c7 bb6", J: "a6 bb6 c7 d7 eb7@2 ~@2",
  K: "~@2 bb6!2 bb6@2 bb6@2 ~@2 bb6@2 ~@2 bb6@2", L: "~@2 c7!2 c7@2 c7@2 ~@2 c7@2 ~@2 c7@2",
  M: "~@2 bb6!2 eb7@2 bb6@2 ~@2 bb6@2 ~@2 bb6@2", N: "~@2 bb6!2 f7@2 bb6@2 ~@2 bb6@2 ~@2 bb6@2",
  O: "~@2 bb6!2 eb7@2 f7@2 ~@2 bb6@2 ~@2 bb6@2", P: "~@2 bb6!2 bb6@2 bb6@2 bb6 bb5 c6 d6 eb6 f6 g6 ab6",
  Q: "~@2 eb7!2 eb7@2 eb7@2 eb7@4 bb6@2 g6@2",
})).s("gm_piccolo").gain(0.48)

// other · alto sax · "Alto Saxophone"
const alto_sax = note(`<
  ~@2 A B C D E F C G H I C D E F C G J K L M N O P Q R S L M N O P Q R T C D E F C G J K
>`.pickRestart({
  A: "eb4@4 g4@4 bb4@2 bb4!2 bb4@2 bb4@2", B: "a4 bb4 c5 d5 eb5@2 bb4 g4", C: "g4", D: "g4@4 g4 eb4 g4 bb4", E: "ab4",
  F: "ab4@2 c5 bb4 g4@2 ~@2", G: "bb4@2 g4 bb4", H: "bb4 c5", I: "a4@2 bb4 ~", J: "ab4 g4", K: "f4@2 eb4 ~",
  L: "bb4@12 ab4 g4 f4 eb4", M: "f4@12 f4 g4 ab4 bb4", N: "c5@12 bb4 ab4 g4 gb4", O: "g4@12 eb4 f4 g4 ab4",
  P: "bb4@12 bb4 a4 bb4 c5", Q: "bb4@12 bb4 g4 eb4 g4", R: "ab4@12 ab4 f4 d4 f4",
  S: "eb4@8 eb4 bb3 c4 d4 eb4 f4 g4 ab4", T: "~@2 eb5!2 eb5@2 eb5@2 eb5@4 bb4@2 g4@2",
})).s("gm_alto_sax").gain(0.48)

// other · tenor sax · "Tenor Saxophone"
const tenor_sax = note(`<
  ~@2 A B C D E F C G H I C D E F C G J K L M N O P Q R S L M N O P Q R T C D E F C G J K
>`.pickRestart({
  A: "eb3@4 g3@4 bb3@2 bb3!2 bb3@2 bb3@2", B: "a3 bb3 c4 d4 eb4@2 bb3 g3", C: "g3", D: "g3@4 g3 eb3 g3 bb3", E: "ab3",
  F: "ab3@2 c4 bb3 g3@2 ~@2", G: "bb3@2 g3 bb3", H: "bb3 c4", I: "a3@2 bb3 ~", J: "ab3 g3", K: "f3@2 eb3 ~",
  L: "bb3@12 ab3 g3 f3 eb3", M: "f3@12 f3 g3 ab3 bb3", N: "c4@12 bb3 ab3 g3 gb3", O: "g3@12 eb3 f3 g3 ab3",
  P: "bb3@12 bb3 a3 bb3 c4", Q: "bb3@12 bb3 g3 eb3 g3", R: "ab3@12 ab3 f3 d3 f3",
  S: "eb3@8 eb3 bb2 c3 d3 eb3 f3 g3 ab3", T: "~@2 eb4!2 eb4@2 eb4@2 eb4@4 bb3@2 g3@2",
})).s("gm_tenor_sax").gain(0.3)

// other · trumpet · "B♭ Trumpet"
const trumpet = note("<~@2 A B A C D E A F G H A C D E A F I J K@2 L K@4 M K@2 L K@4 N A C D E A F I J>".pickRestart({
  A: "eb4@4 g4@4 bb4@2 bb4!2 bb4@2 bb4@2", B: "a4 bb4 c5 d5 eb5@2 bb4 g4", C: "c5 bb4 a4 bb4 c5 bb4 g4 eb4",
  D: "d4@4 f4@4 bb4@2 bb4!2 bb4@2 bb4@2", E: "d5 c5 bb4 ab4 g4@2 bb4 g4", F: "g4 gb4 g4 ab4 bb4 c5 d5 eb5",
  G: "d5@2 d5!2 d5@2 bb4@2 eb5@4 d5@2 eb5@2", H: "f5 eb5 d5 c5 bb4@2 bb4 g4",
  I: "c5@4 f5 eb5 d5 c5 bb4@4 eb5 d5 c5 bb4", J: "a4 bb4 c5 d5 eb5@2 ~@2",
  K: "~@2 bb4!2 bb4@2 bb4@2 ~@2 bb4@2 ~@2 bb4@2", L: "~@2 c5!2 c5@2 c5@2 ~@2 c5@2 ~@2 c5@2",
  M: "~@2 bb4!2 bb4@2 bb4@2 bb4@4 ~@4", N: "~@2 eb5!2 eb5@2 eb5@2 eb5@4 bb4@2 g4@2",
})).s("gm_trumpet").gain(0.48)

// chords · french horn · "Horn in F"
const french_horn = note(`<
  ~@2 A B A@2 C D A@2 D B A@2 C D A@2 D E F@2 G@2 F@3 H F@2 G@2 F@3 H A@2 C D A@2 D E
>`.pickRestart({
  A: "~ [bb3,eb4] ~ [bb3,eb4] ~ [bb3,eb4] ~ [bb3,eb4]", B: "~ [d4,f4] ~ [d4,f4] eb4@2 ~@2",
  C: "~ [c4,f4] ~ [c4,f4] ~ [c4,f4] ~ [c4,f4]", D: "~ [c4,f4] ~ [c4,f4] ~ [bb3,eb4] ~ [bb3,eb4]",
  E: "~ c4 ~ c4 bb3@2 ~@2", F: "~@2 [d4,f4]!2 [d4,f4]@2 [d4,f4]@2 ~@2 [d4,f4]@2 ~@2 [d4,f4]@2",
  G: "~@2 [eb4,g4]!2 [eb4,g4]@2 [eb4,g4]@2 ~@2 [eb4,g4]@2 ~@2 [eb4,g4]@2", H: "~@2 eb4!2 eb4@2 eb4@2 eb4@4 ~@4",
})).s("gm_french_horn").gain(0.48)

// other · trombone
const trombone = note(`<
  ~@2 A B A@2 C D A@2 E F A@2 C D A@2 G H I J K L M N O P I J K L M N O P A@2 C D A@2 G H
>`.pickRestart({
  A: "eb3 bb3 eb3 bb3", B: "f3 bb3 eb3 ~", C: "f3 bb3 f3 bb3", D: "f3 bb3 eb3 bb3", E: "f3!2 c4!2",
  F: "f3@2 f3@2 bb2!2 c3 d3", G: "c4!2 bb3!2", H: "a3!2 [eb3,bb3] ~", I: "bb3@12 ab3 g3 f3 eb3",
  J: "f3@12 f3 g3 ab3 bb3", K: "c4@12 bb3 ab3 g3 gb3", L: "g3@12 eb3 f3 g3 ab3", M: "bb3@12 bb3 a3 bb3 c4",
  N: "bb3@12 bb3 g3 eb3 g3", O: "ab3@12 ab3 f3 d3 f3", P: "eb3@3 ~",
})).s("gm_trombone").gain(0.48)

// other · tuba · "Euphonium"
const tuba = note("<~@4 A B C D A E F G A B C D A E H I J K L M N O P Q J K L M N O P Q A B C D A E H I>".pickRestart({
  A: "g3", B: "g3@4 g3 eb3 g3 bb3", C: "ab3", D: "ab3@2 c4 bb3 g3@2 ~@2", E: "bb3@2 g3 bb3", F: "bb3 c4",
  G: "a3@2 bb3 ~", H: "ab3 g3", I: "f3@2 eb3 ~", J: "bb3@12 ab3 g3 f3 eb3", K: "f3@12 f3 g3 ab3 bb3",
  L: "c4@12 bb3 ab3 g3 gb3", M: "g3@12 eb3 f3 g3 ab3", N: "bb3@12 bb3 a3 bb3 c4", O: "bb3@12 bb3 g3 eb3 g3",
  P: "ab3@12 ab3 f3 d3 f3", Q: "eb3@3 ~",
})).s("gm_tuba").gain(0.48)

// bass · tuba
const bass = note(`<
  ~@2 A B A@2 C D A@2 E F A@2 C D A@2 G H I J K L M N O P I J K L M N O P A@2 C D A@2 G H
>`.pickRestart({
  A: "eb2 bb2 eb2 bb2", B: "f2 bb2 eb2 ~", C: "f2 bb2 f2 bb2", D: "f2 bb2 eb2 bb2", E: "f2!2 c3!2",
  F: "f2@2 f2@2 bb2 bb1 c2 d2", G: "ab2!2 g2!2", H: "f2!2 eb2 ~", I: "bb2@12 ab2 g2 f2 eb2", J: "f2@12 f2 g2 ab2 bb2",
  K: "c3@12 bb2 ab2 g2 gb2", L: "g2@12 eb2 f2 g2 ab2", M: "bb2@12 bb2 a2 bb2 c3", N: "bb2@12 bb2 g2 eb2 g2",
  O: "ab2@12 ab2 f2 d2 f2", P: "eb2@3 ~",
})).s("gm_tuba").gain(0.48)

// drums · kick
const kick = s("bd").struct("<A@2 B@9 C B@7 C B@7 C B@7 C B@7 C>".pickRestart({
  A: "x!2 ~@2", B: "x!4", C: "x!3 ~",
})).gain(0.08)

// drums · snare
const snare = s("sd").struct("<A@2 B@9 C B@7 C B@7 C B@7 C B@7 C>".pickRestart({
  A: "x!9 ~@7", B: "~ x ~ x ~ x ~ x", C: "~ x ~ x!2 ~@3",
})).gain(0.08)

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

stack(piccolo, alto_sax, tenor_sax, trumpet, french_horn, trombone, tuba, bass, kick, snare, crash)