Strudelify

RAF March Past

W. Davies

KeyB♭ majorTempo120 bpm
0:00/0:00
// RAF March Past — W. Davies
// 120 bpm, 2/4, key Bb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 6 "Flute B" named as a pipe, played on flute (its slap bass 1 patch is not one); ch 2 "Flute C" named as a pipe, played on flute (its electric bass finger patch is not one); ch 7 "B♭ Clarinet A" named as a reed, played on clarinet (its slap bass 2 patch is not one); ch 5 "B♭ Clarinet B" named as a reed, played on clarinet (its electric bass finger patch is not one); ch 3 "Alto Sax A" named as a reed, played on alto sax (its slap bass 1 patch is not one); ch 4 "Alto Sax C" named as a reed, played on alto sax (its slap bass 2 patch is not one)
// note: duplicate parts dropped: ch 4 "Alto Sax C" alto sax (copy of ch 2 "Flute C" flute); ch 3 "Alto Sax A" alto sax (copy of ch 7 "B♭ Clarinet A" clarinet); ch 9 "Alto Sax B" alto sax (copy of ch 5 "B♭ Clarinet B" clarinet)
// note: Transcription provider: pdmx. https://musescore.com/score/5943799; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 110 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/2)

// 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 · flute · "Flute A"
const flute = note(`<
  A B C D E F G H I J G H K L G H I J G H M N O P Q R S Q T U V H W X Y Z AA AB AC@2 AD AE AF@2 AG@2 AH@2 AI AJ AK@2
  AL@2 AM@2 AN AO AP AQ AR AS AT AU AV AW AX@2 AY@2 G H I J G H K L G H I J G H M N O P Q R S Q T U V H W X Y Z AA AB AZ
  B C D BA AU BB@2
>`.pickRestart({
  A: "bb5@4 bb4@3 d5", B: "f5 g5 f5@2", C: "bb5@4 ~@4 d5@3 d5@2 f5@3", D: "bb5@4 f5@3 f5", E: "c6", F: "f5",
  G: "bb4@6 c5@2 bb4@4 d5 ~ eb5 ~", H: "f5@3 g5 f5@4", I: "g5@2 c6@2 g5 ~ f5 ~", J: "d5@2 c5 bb4 d5@2 g5@2",
  K: "g5@2 g5 a5 bb5@2 a5@2", L: "g5 f5", M: "g5@2 g5 a5 bb5@2 a5 bb5", N: "c6 f5",
  O: "bb5@6 c6@2 bb5@2 a5@2 g5 ~ eb5 ~", P: "bb5 f5 f5@2", Q: "g5@2 f5@2 bb4@3 c5", R: "d5 f5",
  S: "bb5@6 c6@2 bb5@2 a5@2 g5 ~ f5 ~", T: "d5@2 f5@2 d6@3 c6", U: "bb5 f5", V: "bb4@6 c5@2 bb4@2 c5@2 d5 ~ eb5 ~",
  W: "bb5@3 c6 bb5 ~ g5 ~", X: "f5 d5 c5!2", Y: "bb4 d5 eb5@2", Z: "d5 f5 g5@2", AA: "f5 a5 bb5 c6", AB: "d6 ~ c6 ~",
  AC: "[d5@19 ~ d5@4 eb5@4 c5@4]/2", AD: "bb4 a4", AE: "g4 f4", AF: "[f5@19 ~ f5@4 g5@4 eb5@4]/2",
  AG: "[eb5@19 ~ eb5@4 f5@4 d5@4]/2", AH: "[d5@8 c5@11 ~ c5@4 d5@4 eb5@4]/2", AI: "f5 g5", AJ: "a5 bb5",
  AK: "[c6 d5@2 g5]/2", AL: "[f5@15 ~]/2", AM: "[g5@19 ~ f5@4 g5@4 eb5@4]/2", AN: "d5 c5", AO: "d5 eb5",
  AP: "f5@11 ~ g5@4", AQ: "f5 d5", AR: "c5 bb4", AS: "c5 d5", AT: "eb5@2 d5 eb5", AU: "f5@15 ~", AV: "g5 gb5",
  AW: "bb5@15 ~", AX: "[bb5@8 c5@15 ~ d5@8]/2", AY: "[bb4@15 ~]/2", AZ: "bb5@2 ~@2 bb4@3 d5", BA: "c6@15 ~",
  BB: "[bb5@23 ~@9]/2",
})).s("gm_flute").gain(0.27)

// other · flute · "Flute B"
const flute_2 = note(`<
  A ~ A B C D E F G H E I J K E F G H E I J K L@2 M N L@2 O P Q R H S@2 Q T U V W V K X P Y Z AA AB U AC Z AD AE@2 AF AG
  AH P S AI AJ AK AL AM AN AO AP AQ AR AS E F G H E I J K E F G H E I J K L@2 M N L@2 O P Q R H S@2 Q T U A ~ A B C D AT
  A
>`.pickRestart({
  A: "d5 ~", B: "~@4 f5@3 f5", C: "f5@15 ~", D: "eb5@15 ~", E: "d5 g5", F: "f5@2 eb5 d5", G: "c5 eb5", H: "d5 bb4",
  I: "f5 eb5", J: "d5 g5!2 gb5", K: "g5 f5", L: "bb4!2 f5@2", M: "bb4@4 bb4@3 c5", N: "bb4 a4", O: "f5@4 d5@3 c5",
  P: "d5 c5", Q: "bb4!2", R: "f5@3 d5 c5@4", S: "bb4 c5", T: "d5!2", U: "bb4 f5", V: "bb5@8 a5@3 a5@2 a5@3", W: "g5!2",
  X: "c5@8 bb4@3 bb4@2 bb4@3", Y: "bb4@8 a4@3 a4@2 a4@3", Z: "c5 bb4", AA: "bb4@8 bb4@3 bb4@2 bb4@3", AB: "a4!2",
  AC: "eb5 d5", AD: "bb4 e5", AE: "a4@15 ~", AF: "eb5 b4", AG: "c5 d5 eb5@2", AH: "f5@2 f5 eb5", AI: "d5 f5",
  AJ: "eb5@11 ~ eb5@4", AK: "c5 g5", AL: "g5@2 f5 g5", AM: "ab5@11 ~ ab5@4", AN: "g5 eb5", AO: "c5@15 ~",
  AP: "c6@11 ~ bb5@4", AQ: "a5 f5", AR: "bb5@4 a5@3 a5", AS: "f5 g5", AT: "d5@15 ~",
})).s("gm_flute").gain(0.3)

// other · flute · "Flute C"
const flute_3 = note(`<
  A ~ A B C@2 D C E F D C D G D C E F D C D H@3 D H@2 I H@2 D C D F J F K G L G M N O P Q R S N T U R F C@2 L V M H@2 F
  W X E Y Z E H U Y@2 D C E F D C D G D C E F D C D H@3 D H@2 I H@2 D C D F J F K G A ~ A B C@2 D@2
>`.pickRestart({
  A: "bb4 ~@3", B: "~@4 bb4@3 bb4", C: "a4@15 ~", D: "bb4@15 ~", E: "c5@15 ~", F: "bb4!2", G: "bb4 c5", H: "bb4 a4",
  I: "bb4 d5", J: "d5 c5", K: "d5!2", L: "bb4@8 d5@3 d5@2 d5@3", M: "d5@8 a4@3 a4@2 a4@3", N: "c5!2",
  O: "d5@8 d5@3 d5@2 d5@3", P: "d5 eb5", Q: "c5@8 c5@3 c5@2 c5@3", R: "a4 bb4", S: "bb4@8 c5@3 c5@2 c5@3",
  T: "bb4@8 bb4@3 bb4@2 bb4@3", U: "c5 d5", V: "eb5!2", W: "c5@8 bb4@3 bb4@2 bb4@3", X: "a4 b4", Y: "d5@15 ~",
  Z: "eb5@15 ~",
})).s("gm_flute").gain(0.3)

// other · clarinet · "B♭ Clarinet B"
const clarinet = note(`<
  A ~ A B C D E F G H E I J K E F G H E I J K L@2 M N L@2 O P Q R H S@2 Q T U V W V K X P Y Z AA AB U AC Z AD AE@2 AF AG
  AH P S AI AJ AK AL AM AN AO AP AQ AR AS E F G H E I J K E F G H E I J K L@2 M N L@2 O P Q R H S@2 Q T U A ~ A B C D AT
  A
>`.pickRestart({
  A: "d4 ~", B: "~@4 f4@3 f4", C: "f4", D: "eb4", E: "d4 g4", F: "f4@2 eb4 d4", G: "c4 eb4", H: "d4 bb3", I: "f4 eb4",
  J: "d4 g4!2 gb4", K: "g4 f4", L: "bb3!2 f4@2", M: "bb3@4 bb3@3 c4", N: "bb3 a3", O: "f4@4 d4@3 c4", P: "d4 c4",
  Q: "bb3!2", R: "f4@3 d4 c4@4", S: "bb3 c4", T: "d4!2", U: "bb3 f4", V: "bb4@8 a4@3 a4@2 a4@3", W: "g4!2",
  X: "c4@8 bb3@3 bb3@2 bb3@3", Y: "bb3@8 a3@3 a3@2 a3@3", Z: "c4 bb3", AA: "bb3@8 bb3@3 bb3@2 bb3@3", AB: "a3!2",
  AC: "eb4 d4", AD: "bb3 e4", AE: "a3", AF: "eb4 b3", AG: "c4 d4 eb4@2", AH: "f4@2 f4 eb4", AI: "d4 f4",
  AJ: "eb4@3 eb4", AK: "c4 g4", AL: "g4@2 f4 g4", AM: "ab4@3 ab4", AN: "g4 eb4", AO: "c4", AP: "c5@3 bb4", AQ: "a4 f4",
  AR: "bb4@4 a4@3 a4", AS: "f4 g4", AT: "d4",
})).s("gm_clarinet").gain(0.3)

// other · clarinet · "B♭ Clarinet C"
const clarinet_2 = note(`<
  A ~ A B C@2 D C E F D C D G D C E F D C D H@3 D H@2 I H@2 D C D F J F K G L G M N O P Q R S N T U R F C@2 L V M H@2 F
  W X E Y Z E H U Y@2 D C E F D C D G D C E F D C D H@3 D H@2 I H@2 D C D F J F K G A ~ A B C@2 D@2
>`.pickRestart({
  A: "bb3 ~@3", B: "~@4 bb3@3 bb3", C: "a3", D: "bb3", E: "c4", F: "bb3!2", G: "bb3 c4", H: "bb3 a3", I: "bb3 d4",
  J: "d4 c4", K: "d4!2", L: "bb3@8 d4@3 d4@2 d4@3", M: "d4@8 a3@3 a3@2 a3@3", N: "c4!2", O: "d4@8 d4@3 d4@2 d4@3",
  P: "d4 eb4", Q: "c4@8 c4@3 c4@2 c4@3", R: "a3 bb3", S: "bb3@8 c4@3 c4@2 c4@3", T: "bb3@8 bb3@3 bb3@2 bb3@3",
  U: "c4 d4", V: "eb4!2", W: "c4@8 bb3@3 bb3@2 bb3@3", X: "a3 b3", Y: "d4", Z: "eb4",
})).s("gm_clarinet").gain(0.14)

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

// drums · snare
const snare = s("sd").struct(`<
  A ~ A B C@2 D E@2 D@2 E D F D E@2 D@2 E D F G H I F G H I F D E@2 D J@2 K L M L M L M L M L M L M L N F M L M L M L M
  L M L K H K H M L M L D E@2 D@2 E D F D E@2 D@2 E D F G H I F G H I F D E@2 D J@2 K L A ~ A B C@2 D A
>`.pickRestart({
  A: "x", B: "~@4 x ~@2 x", C: "x!16", D: "x ~ x!3 ~ x ~", E: "x!4", F: "x!9 ~@7", G: "x ~@3 x!5 ~ x ~ x ~ x ~",
  H: "x ~@3 x ~@3 x!8", I: "x ~ x ~ x ~@2 x", J: "x ~@3 x ~ x ~ x!8", K: "x ~ x ~ x!4", L: "x!2",
  M: "x ~@7 x ~@2 x ~ x ~@2", N: "x ~@7 x!8",
})).gain(0.16)

stack(flute, flute_2, flute_3, clarinet, clarinet_2, kick, snare)