Strudelify

whiplash

Ira Matthews

KeyC minorTempo215 bpm
0:00/0:00
// whiplash — Ira Matthews
// 215 bpm, 2/2, key C minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (7/4 at bar 1, 5/4 at bar 43, 2/4 at bar 44, 5/4 at bar 45, ...) are rendered on a constant 2/2 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/772026; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 169 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(215/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 · soprano sax · "Soprano Saxophone"
const soprano_sax = note(`<
  A B C ~ D E ~ A B C ~ D F G@5 ~@8 H I J K@2 L M N I J K@2 L O P Q R@2 S T U@2 V W@2 X Y Z AA AB AC@4 AD@2 AE AF AG AH
  AI AJ@2 AK AL AM@2 AN AO AP AK AL AM@2 AN AO AQ AR R@2 AS AT ~@8 AU AV AU AW AU AV AU AW AX@2 AY AZ BA@2 BB BC BA@2 BD
  BE BF@2 BG ~ AX@2 AY AZ BA@2 BB BC BA@2 BD BE BF@2 BG ~ BH@4 BI@4 BJ@5 BK@7 BL@8 BM@5
>`.pickRestart({
  A: "~@8 g5@4 g5 ~ g5 ~", B: "g5@4 g5 ~ bb5 ~@3 g5 ~ g5@2 f5@2", C: "g5 ~@3", D: "g5@4 g5 ~ g5 ~ g5@4 g5@2 f5@2",
  E: "~@2 f5 ~ g5@8 ~@4", F: "~@2 f5 ~ g5@4 ~@8", G: "[~@4 f5@2 g5@2 g5@2 f5@2 g5 ~ bb5@4 g5 ~ bb5@4 g5@44 ~@12]/5",
  H: "~@12 c5@3 ~", I: "c5@4 g4 c5 bb4 a4", J: "g4 ~",
  K: "[c5@2 eb5@2 ~@2 c5@2 eb5@2 d5@2 c5@2 bb4@4 g4@2 c5@3 ~ c5@8]/2", L: "g4 c5 bb4 a4 g4 g4@3", M: "~@4 c5 eb5 ~ c5",
  N: "gb5@2 f5@2 eb5@2 f5@4 eb5@2 c5@3 ~", O: "c5 eb5 ~ c5 eb5 ~ c5 eb5", P: "~ c5 eb5 ~ c5 d5 c5 eb5",
  Q: "d5@2 c5@2 f5@2 eb5@2 c5@2 g5@3 ~ c5@2", R: "[f5 gb5 f5 eb5 f5 eb5 c5 c5@3 g5@2 bb5@2 c6 bb5]/2",
  S: "g5@2 f5@2 g5@3 ~ c5@2 gb5@3 ~ c5@2", T: "f5 gb5 f5 eb5 f5@2 eb5 c5",
  U: "[d5@2 eb5@2 f5@2 g5@2 ab5@2 g5@2 f5@2 g5@8 ~@2 bb5@2 g5@2 c5@3 ~]/2", V: "c5@2 bb4 a4 g4 a4@2 f4",
  W: "[g4@6 ~@4 c5@2 g4@2 bb4@4 g4@2 a4@2 g4 ~ g4@2 f4@2 g4@4]/2", X: "g4@2 bb4@2 c5@4 c5@2 eb5@3 ~ c5@2",
  Y: "bb4@3 ~ c4@2 a4@3 ~ c4@2 ab4@2 gb4@2", Z: "g4 f4 g4 c4 g4 a4 c5 d5, c6!2 ~@2", AA: "c5 bb4 c5@2 bb4!2 c5@2",
  AB: "c5@2 bb4 g4 bb4 c5@2 g4",
  AC: "[bb4 a4 g4 f4 g4@2 c4 f4@2 f4@2 e4 d4 c4 d4@4 c5@2 g4 [bb4,d5]@2 [bb4,d5]@2 a4 g4 f4 g4@2 c5@2, ~@18 e5@3 ~@4 e5@2 ~ f5@4]/4", // Bb
  AD: "[~ d5 c5!2 d5@3 [c5,e5]@2 e5 f5@2 f5@2 e5@2, e5!2 ~@6]/2", AE: "e5@2 bb4 g4 bb4 g4@2 ~",
  AF: "f4 e4 c4 d4 e5@2 e5@2, g5!2 ~@2", AG: "bb4 g4 bb4 g4@2 ~ f4 e4, ~@3 g5", AH: "c4 d4 e5@2 e5@2 bb4 g4, g5 ~@3",
  AI: "bb4 g4@2 ~ f4 e4 c4 d4, ~@2 g5!2", AJ: "[g5@4 g5@4 g5@4 ~@2 g5@4 ~@2 bb5@2 g5 ~ bb5@2 b5@2 c6@4]/2",
  AK: "c6@4 g5 c6 bb5 a5", AL: "g5 g5@3 ~@4", AM: "[c6 eb6 ~ c6 eb6 d6 c6 bb5@2 g5 c6@2 c6@4]/2",
  AN: "g5 c6 bb5 a5 g5 g5@3", AO: "~@4 c6 eb6 ~ c6", AP: "eb6 d6 c6 bb5@2 g5 c6@2", AQ: "gb6 f6 eb6 f6@3 c5 eb5",
  AR: "d5 c5 f5 eb5 c5 g5@2 c5", AS: "g5 f5 g5@2 c5 gb5@2 c5", AT: "f5 gb5 f5 eb5 c5@4", AU: "~@3 bb4@3 ~@2",
  AV: "~@3 b4@3 ~@2", AW: "~@3 ab4@3 ~@2", AX: "c5/2", AY: "~ db5 c5 g4", AZ: "bb4 c5 e5 f4", BA: "bb4/2",
  BB: "~ c5 db5 c5", BC: "db5 c5 b4 g4", BD: "~ c5 b4 bb4", BE: "a4 ab4 g4 gb4", BF: "f4", BG: "c5",
  BH: "[~@5 f5@8 d5@4 c5@3 g4@12]/4", BI: "[f4 eb4 ~ f4 ~ c5@8 g4@4 f4@3 c4@9 ~@3]/4",
  BJ: "[~ bb4 c5 db5 d5 eb5@8 c5@4 bb4@3 f4@13 g4 ~ eb4 ~ c5@3]/5",
  BK: "[ab4@9 bb4 ~ ab4 ~ g4@4 g4@3 g4@5 ~@4 c5@16 ~@2 db5@2 c5@2 g4@2 bb4@2 c5]/7",
  BL: "[~ e5@2 f4@2 bb4@16 ~@2 c5@2 db5@2 c5@2 db5@2 c5@2 b4@2 g4@2 bb4@16 ~@2 c5@2 db5@2 d5@2 eb5@2 e5]/8",
  BM: "[~ f5@2 gb5@2 f5@32 f5 f5@2]/5",
})).s("gm_soprano_sax").gain(0.4)

// other · alto sax · "Alto Sax 1"
const alto_sax = note(`<
  A B C ~ D E ~ A B C ~ D F G@5 ~ H@6 I@2 ~@3 J K L M N O P@2 K Q R S T@2 U V W@2 X Y@2 Z AA AB AC AD AE@4 AF@2 AG AH AI
  AJ AK AL@2 N AM AN@2 K L AO N AM AN@2 K L AP AQ T@2 AR AS ~@8 AT AU AT AV AT AU AT AV AW@2 AX AY AZ@2 BA BB AZ@2 BC BD
  BE BF@2 ~ AW@2 AX AY AZ@2 BA BB AZ@2 BC BD BE BF@2 ~ BG@4 BH@4 BI@5 BJ@7 BK@8 BL@5
>`.pickRestart({
  A: "~@8 g4@4 g4 ~ g4 ~", B: "g4@4 g4 ~ bb4 ~@3 g4 ~ g4@2 f4@2", C: "g4 ~@3", D: "g4@4 g4 ~ g4 ~ g4@4 g4@2 f4@2",
  E: "~@2 f4 ~ g4@8 ~@4", F: "~@2 f4 ~ g4@4 ~@8", G: "[~@4 g4@2 a4@2 a4@2 g4@2 a4 ~ db5@4 bb4 ~ db5@4 bb4@44 ~@12]/5",
  H: "[~@6 c5@11 bb4@2 g4 bb4 c5@13 ~@4 c5@7 bb4@2 g4]/6", I: "[bb4 c5@13 ~@2]/2", J: "~@4 c5@3 ~ c5@8",
  K: "g4 c5 bb4 a4 g4 g4@3", L: "~@4 c5 eb5 ~ c5", M: "gb5@2 f5@2 eb5@2 f5@4 eb5@2 c5@3 ~", N: "c5@4 g4 c5 bb4 a4",
  O: "g4 ~", P: "[c5@2 eb5@2 ~@2 c5@2 eb5@2 d5@2 c5@2 bb4@4 g4@2 c5@3 ~ c5@8]/2", Q: "c5 eb5 ~ c5 eb5 ~ c5 eb5",
  R: "~ c5 eb5 ~ c5 d5 c4 eb4", S: "d4@2 c4@2 f4@2 eb4@2 c4@2 g4@3 ~ c4@2",
  T: "[f4 gb4 f4 eb4 f4 eb4 c4 c4@3 g4@2 bb4@2 c5 bb4]/2", U: "g4@2 f4@2 g4@3 ~ c4@2 gb4@3 ~ c4@2",
  V: "f4 gb4 f4 eb4 f4@2 eb4 c4", W: "[d4@2 eb4@2 f4@2 g4@2 ab4@2 g4@2 f4@2 g4@8 ~@2 bb4@2 g4@2 c5@3 ~]/2",
  X: "c5@2 bb4 a4 g4 a4@2 f4", Y: "[g4@6 ~@4 c5@2 g4@2 bb4@4 g4@2 a4@2 g4 ~ g4@2 f4@2 g4@4]/2",
  Z: "g4@2 bb4@2 c5@4 c5@2 eb5@3 ~ c5@2", AA: "bb4@3 ~ c4@2 a4@3 ~ c4@2 ab4@2 gb4@2",
  AB: "~ f4 ~ c4 g4 a4 c5 d5, g4!2 ~@2", AC: "c5 bb4 c5@2 c5 d5 c5@2", AD: "c5@2 bb4 g4 bb4 c5@2 g4",
  AE: "[bb4 a4 g4 f4 g4@2 c4 f4@2 f4@2 e4 d4 c4 d4@4 [c5,e5]@2 g4 [bb4,d5]@2 [bb4,d5]@2 a4 g4 f4 g4@2 c5@2, ~@25 e5@2 ~ f5@4]/4", // C Bb
  AF: "[e5@2 e5@2 d5@3 e5@3 f5@2 f5@2 [c5,e5]@2]/2", AG: "[c5,e5]@2 bb4 g4 bb4 g5@2 ~, ~ d5 ~@2",
  AH: "f4 e4 c4 d4 [c5,e5]@2 [c5,e5]@2, g5!2 ~@2", AI: "bb4 g4 bb4 g5@2 ~ f4 e4, d5 ~@2 g5",
  AJ: "c4 d4 [c5,e5]@2 [c5,e5]@2 bb4 g4, g5 ~@2 d5", AK: "bb4 g5@2 ~ f4 e4 c4 d4, ~@2 g5!2",
  AL: "[g4@4 g4@4 g4@4 ~@2 g4@4 ~@2 bb4@2 g4 ~ bb4@2 b4@2 c5@4]/2", AM: "g4 g4@3 ~@4",
  AN: "[c5 eb5 ~ c5 eb5 d5 c5 bb4@2 g4 c5@2 c5@4]/2", AO: "gb5 f5 eb5 f5@2 eb5 c5@2", AP: "gb5 f5 eb5 f5@3 c4 eb4",
  AQ: "d4 c4 f4 eb4 c4 g4@2 c4", AR: "g4 f4 g4@2 c4 gb4@2 c4", AS: "f4 gb4 f4 eb4 c4@4", AT: "~@3 g4@3 ~@2",
  AU: "~@3 ab4@3 ~@2", AV: "~@3 f4@3 ~@2", AW: "c5/2", AX: "~ db5 c5 g4", AY: "bb4 c5 e5 f4", AZ: "bb4/2",
  BA: "~ c5 db5 c5", BB: "db5 c5 b4 g4", BC: "~ c5 b4 bb4", BD: "a4 ab4 g4 gb4", BE: "f4", BF: "ab4/2",
  BG: "[~@5 c5@8 d5@4 c5@3 f4@12]/4", BH: "[f4 eb4 ~ f4 ~ f4@8 g4@4 f4@3 f4@9 ~@3]/4",
  BI: "[~@5 db5@8 c5@4 bb4@3 eb4@13 g4 ~ eb4 ~ c5@3]/5",
  BJ: "[ab4@9 bb4 ~ ab4 ~ eb4@4 eb4@3 eb4@5 ~@4 c5@16 ~@2 db5@2 c5@2 g4@2 bb4@2 c5]/7",
  BK: "[~ e5@2 f4@2 bb4@16 ~@2 c5@2 db5@2 c5@2 db5@2 c5@2 b4@2 g4@2 bb4@16 ~@2 c4@2 db4@2 d4@2 eb4@2 e4]/8",
  BL: "[~ f4@2 gb4@2 d5@32 d5 d5@2]/5",
})).s("gm_alto_sax").gain(0.4)

// other · tenor sax · "Tenor Sax 1"
const tenor_sax = note(`<
  A B C ~ D E ~ A B C ~ D F G@5 ~ H@6 I@2 ~@6 J K L M@2 N O P Q R@2 S T U@2 V W@2 X Y Z AA AB AC@4 AD@2 AE AF AG AH AI
  AJ@2 AK AL AM@2 AN AO AP AK AL AM@2 AN AO AQ AR R@2 AS AT ~@8 AU AV AU AW AU AV AU AW AX@2 AY AZ BA@2 BB BC BA@2 BD BE
  BF@3 ~ AX@2 AY AZ BA@2 BB BC BA@2 BD BE BF@3 ~ BG@4 BH@4 BI@5 BJ@7 BK@8 BL@5
>`.pickRestart({
  A: "~@8 c4@4 c4 ~ c4 ~", B: "c4@4 c4 ~ d4 ~@3 c4 ~ c4@2 bb3@2", C: "c4 ~@3", D: "c4@4 c4 ~ c4 ~ c4@4 c4@2 d4@2",
  E: "~@2 d4 ~ c4@8 ~@4", F: "~@2 d4 ~ c4@4 ~@8", G: "[~@4 bb3@2 c4@2 c4@2 bb3@2 c4 ~ db4@4 c4 ~ db4@4 eb4@44 ~@12]/5",
  H: "[~@6 c4@11 bb3@2 g3 bb3 c4@13 ~@4 c4@7 bb3@2 g3]/6", I: "[bb3 c4@13 ~@2]/2", J: "~@12 c4@3 ~",
  K: "c4@4 g3 c4 bb3 a3", L: "g3 ~", M: "[c4@2 eb4@2 ~@2 c4@2 eb4@2 d4@2 c4@2 bb3@4 g3@2 c4@3 ~ c4@8]/2",
  N: "g3 c4 bb3 a3 g3 g3@3", O: "c4 eb4 ~ c4 eb4 ~ c4 eb4", P: "~ c4 eb4 ~ c4 d4 c4 eb4",
  Q: "d4@2 c4@2 f4@2 eb4@2 c4@2 g4@3 ~ c4@2", R: "[f4 gb4 f4 eb4 f4 eb4 c4 c4@3 g4@2 bb4@2 c5 bb4]/2",
  S: "g4@2 f4@2 g4@3 ~ c4@2 gb4@3 ~ c4@2", T: "f4 gb4 f4 eb4 f4@2 eb4 c4",
  U: "[d4@2 eb4@2 f4@2 g4@2 ab4@2 g4@2 f4@2 g4@8 ~@2 bb4@2 g4@2 c4@3 ~]/2", V: "c4@2 bb3 a3 g3 a3@2 f3",
  W: "[g3@6 ~@4 c4@2 g3@2 bb3@4 g3@2 a3@2 g3 ~ g3@2 f3@2 g3@4]/2", X: "g3@2 bb3@2 c4@4 c4@2 eb4@3 ~ c4@2",
  Y: "bb3@3 ~ c3@2 a3@3 ~ c3@2 ab3@2 gb3@2", Z: "g3 f3 g3 c3 g3 a3 c4 d4", AA: "c4 bb3 c4@2 bb3!2 c4@2",
  AB: "c4@2 bb3 g3 bb3 c4@2 g3",
  AC: "[bb3 a3 g3 f3 g3@2 c3 f3@2 f3@2 e3 d3 c3 d3@4 [c4,e4]@2 g3 [bb3,d4]@2 [bb3,d4]@2 a3 g3 f3 g3@2 c4@2, ~@25 e4@2 ~ f4@4]/4", // C Bb
  AD: "[~ d4 c4!2 d4@3 [c4,e4]@2 e4 f4@2 f4@2 e4@2, e4!2 ~@6]/2", AE: "e4@2 bb3 g3 bb3 g3@2 ~",
  AF: "f3 e3 c3 d3 e4@2 e4@2, g4!2 ~@2", AG: "bb3 g3 bb3 g3@2 ~ f3 e3, ~@3 g4", AH: "c3 d3 e4@2 e4@2 bb3 g3, g4 ~@3",
  AI: "bb3 g3@2 ~ f3 e3 c3 d3, ~@2 g4!2", AJ: "[g4@4 g4@4 g4@4 ~@2 g4@4 ~@2 bb4@2 g4 ~ bb4@2 b4@2 c5@4]/2",
  AK: "c5@4 g4 c5 bb4 a4", AL: "g4 g4@3 ~@4", AM: "[c5 eb5 ~ c5 eb5 d5 c5 bb4@2 g4 c5@2 c5@4]/2",
  AN: "g4 c5 bb4 a4 g4 g4@3", AO: "~@4 c5 eb5 ~ c5", AP: "eb5 d5 c5 bb4@2 g4 c5@2", AQ: "gb5 f5 eb5 f5@3 c4 eb4",
  AR: "d4 c4 f4 eb4 c4 g4@2 c4", AS: "g4 f4 g4@2 c4 gb4@2 c4", AT: "f4 gb4 f4 eb4 c4@4", AU: "~@3 eb4@3 ~@2",
  AV: "~@3 e4@3 ~@2", AW: "~@3 db4@3 ~@2", AX: "c4/2", AY: "~ db4 c4 g3", AZ: "bb3 c4 e4 f3", BA: "bb3/2",
  BB: "~ c4 db4 c4", BC: "db4 c4 b3 g3", BD: "~ c4 b3 bb3", BE: "a3 ab3 g3 gb3", BF: "ab3/3",
  BG: "[~@5 a3@8 d4@4 c4@3 a4@12]/4", BH: "[f4 eb4 ~ f4 ~ d4@8 g4@4 f4@3 d4@9 ~@3]/4",
  BI: "[~@5 bb3@8 c4@4 bb3@3 ab3@13 g3 ~ eb3 ~ c4@3]/5",
  BJ: "[ab3@9 bb3 ~ ab3 ~ c4@4 c4@3 c4@5 ~@4 c4@16 ~@2 db4@2 c4@2 g3@2 bb3@2 c4]/7",
  BK: "[~ e4@2 f3@2 bb3@16 ~@2 c4@2 db4@2 c4@2 db4@2 c4@2 b3@2 g3@2 bb3@16 ~@2 c4@2 db4@2 d4@2 eb4@2 e4]/8",
  BL: "[~ f4@2 gb4@2 bb4@32 bb4 bb4@2]/5",
})).s("gm_tenor_sax").gain(0.4)

stack(soprano_sax, alto_sax, tenor_sax)