Strudelify
KeyG majorTempo215 bpm
0:00/0:00
// whiplash — Alec Mierzejewski
// 215 bpm, 2/2, key G major. 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/3110106; license: https://creativecommons.org/publicdomain/mark/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 · 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 J K L@2 M N O J K L@2 M P Q R S@2 T U V@2 W X@2 Y Z AA AB AC AD@4 AE@2 AF AG
  AH AI AJ AK@2 J AL AM@2 M N AN J AL AM@2 M N AO AP S@2 AQ AR ~@8 AS AT AS AU AS AT AS AU AV@2 AW AX AY@2 AZ BA AY@2 BB
  BC BD BE@2 ~ AV@2 AW AX AY@2 AZ BA AY@2 BB BC BD BE@2 ~ BF@4 BG@4 BH@5 BI@7 BJ@8 BK@5
>`.pickRestart({
  A: "~@8 g4@4 g4 ~ g4 ~", B: "g4@4 g4 ~ a#4 ~@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 ~ c#5@4 a#4 ~ c#5@4 a#4@44 ~@12]/5",
  H: "[~@6 c5@11 a#4@2 g4 a#4 c5@13 ~@4 c5@7 a#4@2 g4]/6", I: "[a#4@2 c5@26 c5@3 ~]/2", J: "c5@4 g4 c5 a#4 a4",
  K: "g4 ~", L: "[c5@2 d#5@2 ~@2 c5@2 d#5@2 d5@2 c5@2 a#4@4 g4@2 c5@3 ~ c5@8]/2", M: "g4 c5 a#4 a4 g4 g4@3",
  N: "~@4 c5 d#5 ~ c5", O: "f#5@2 f5@2 d#5@2 f5@4 d#5@2 c5@3 ~", P: "c5 d#5 ~ c5 d#5 ~ c5 d#5",
  Q: "~ c5 d#5 ~ c5 d5 c4 d#4", R: "d4@2 c4@2 f4@2 d#4@2 c4@2 g4@3 ~ c4@2",
  S: "[f4 f#4 f4 d#4 f4 d#4 c4 c4@3 g4@2 a#4@2 c5 a#4]/2", T: "g4@2 f4@2 g4@3 ~ c4@2 f#4@3 ~ c4@2",
  U: "f4 f#4 f4 d#4 f4@2 d#4 c4", V: "[d4@2 d#4@2 f4@2 g4@2 g#4@2 g4@2 f4@2 g4@8 ~@2 a#4@2 g4@2 c5@3 ~]/2",
  W: "c5@2 a#4 a4 g4 a4@2 f4", X: "[g4@6 ~@4 c5@2 g4@2 a#4@4 g4@2 a4@2 g4 ~ g4@2 f4@2 g4@4]/2",
  Y: "g4@2 a#4@2 c5@4 c5@2 d#5@3 ~ c5@2", Z: "a#4@3 ~ c4@2 a4@3 ~ c4@2 g#4@2 f#4@2",
  AA: "~ f4 ~ c4 g4 a4 c5 d5, g4!2 ~@2", AB: "c5 a#4 c5@2 c5 d5 c5@2", AC: "c5@2 a#4 g4 a#4 c5@2 g4",
  AD: "[a#4 a4 g4 f4 g4@2 c4 f4@2 f4@2 e4 d4 c4 d4@4 [c5,e5]@2 g4 [a#4,d5]@2 [a#4,d5]@2 a4 g4 f4 g4@2 c5@2, ~@25 e5@2 ~ f5@4]/4", // C A#
  AE: "[e5@2 e5@2 d5@3 e5@3 f5@2 f5@2 [c5,e5]@2]/2", AF: "[c5,e5]@2 a#4 g4 a#4 g5@2 ~, ~ d5 ~@2",
  AG: "f4 e4 c4 d4 [c5,e5]@2 [c5,e5]@2, g5!2 ~@2", AH: "a#4 g4 a#4 g5@2 ~ f4 e4, d5 ~@2 g5",
  AI: "c4 d4 [c5,e5]@2 [c5,e5]@2 a#4 g4, g5 ~@2 d5", AJ: "a#4 g5@2 ~ f4 e4 c4 d4, ~@2 g5!2",
  AK: "[g4@4 g4@4 g4@4 ~@2 g4@4 ~@2 a#4@2 g4 ~ a#4@2 b4@2 c5@4]/2", AL: "g4 g4@3 ~@4",
  AM: "[c5 d#5 ~ c5 d#5 d5 c5 a#4@2 g4 c5@2 c5@4]/2", AN: "f#5 f5 d#5 f5@2 d#5 c5@2", AO: "f#5 f5 d#5 f5@3 c4 d#4",
  AP: "d4 c4 f4 d#4 c4 g4@2 c4", AQ: "g4 f4 g4@2 c4 f#4@2 c4", AR: "f4 f#4 f4 d#4 c4@4", AS: "~@3 g4@3 ~@2",
  AT: "~@3 g#4@3 ~@2", AU: "~@3 f4@3 ~@2", AV: "c5/2", AW: "~ c#5 c5 g4", AX: "a#4 c5 e5 f4", AY: "a#4/2",
  AZ: "~ c5 c#5 c5", BA: "c#5 c5 b4 g4", BB: "~ c5 b4 a#4", BC: "a4 g#4 g4 f#4", BD: "f4", BE: "g#4/2",
  BF: "[~@5 c5@8 d5@4 c5@3 f4@12]/4", BG: "[f4 d#4 ~ f4 ~ f4@8 g4@4 f4@3 f4@9 ~@3]/4",
  BH: "[~@5 c#5@8 c5@4 a#4@3 d#4@13 g4 ~ d#4 ~ c5@3]/5",
  BI: "[g#4@9 a#4 ~ g#4 ~ d#4@4 d#4@3 d#4@5 ~@4 c5@16 ~@2 c#5@2 c5@2 g4@2 a#4@2 c5]/7",
  BJ: "[~ e5@2 f4@2 a#4@16 ~@2 c5@2 c#5@2 c5@2 c#5@2 c5@2 b4@2 g4@2 a#4@16 ~@2 c4@2 c#4@2 d4@2 d#4@2 e4]/8",
  BK: "[~ f4@2 f#4@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 a#3@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 a#3@2 c4@2 c4@2 a#3@2 c4 ~ c#4@4 c4 ~ c#4@4 d#4@44 ~@12]/5",
  H: "[~@6 c4@11 a#3@2 g3 a#3 c4@13 ~@4 c4@7 a#3@2 g3]/6", I: "[a#3 c4@13 ~@2]/2", J: "~@12 c4@3 ~",
  K: "c4@4 g3 c4 a#3 a3", L: "g3 ~", M: "[c4@2 d#4@2 ~@2 c4@2 d#4@2 d4@2 c4@2 a#3@4 g3@2 c4@3 ~ c4@8]/2",
  N: "g3 c4 a#3 a3 g3 g3@3", O: "c4 d#4 ~ c4 d#4 ~ c4 d#4", P: "~ c4 d#4 ~ c4 d4 c4 d#4",
  Q: "d4@2 c4@2 f4@2 d#4@2 c4@2 g4@3 ~ c4@2", R: "[f4 f#4 f4 d#4 f4 d#4 c4 c4@3 g4@2 a#4@2 c5 a#4]/2",
  S: "g4@2 f4@2 g4@3 ~ c4@2 f#4@3 ~ c4@2", T: "f4 f#4 f4 d#4 f4@2 d#4 c4",
  U: "[d4@2 d#4@2 f4@2 g4@2 g#4@2 g4@2 f4@2 g4@8 ~@2 a#4@2 g4@2 c4@3 ~]/2", V: "c4@2 a#3 a3 g3 a3@2 f3",
  W: "[g3@6 ~@4 c4@2 g3@2 a#3@4 g3@2 a3@2 g3 ~ g3@2 f3@2 g3@4]/2", X: "g3@2 a#3@2 c4@4 c4@2 d#4@3 ~ c4@2",
  Y: "a#3@3 ~ c3@2 a3@3 ~ c3@2 g#3@2 f#3@2", Z: "g3 f3 g3 c3 g3 a3 c4 d4", AA: "c4 a#3 c4@2 a#3!2 c4@2",
  AB: "c4@2 a#3 g3 a#3 c4@2 g3",
  AC: "[a#3 a3 g3 f3 g3@2 c3 f3@2 f3@2 e3 d3 c3 d3@4 [c4,e4]@2 g3 [a#3,d4]@2 [a#3,d4]@2 a3 g3 f3 g3@2 c4@2, ~@25 e4@2 ~ f4@4]/4", // C A#
  AD: "[~ d4 c4!2 d4@3 [c4,e4]@2 e4 f4@2 f4@2 e4@2, e4!2 ~@6]/2", AE: "e4@2 a#3 g3 a#3 g3@2 ~",
  AF: "f3 e3 c3 d3 e4@2 e4@2, g4!2 ~@2", AG: "a#3 g3 a#3 g3@2 ~ f3 e3, ~@3 g4", AH: "c3 d3 e4@2 e4@2 a#3 g3, g4 ~@3",
  AI: "a#3 g3@2 ~ f3 e3 c3 d3, ~@2 g4!2", AJ: "[g4@4 g4@4 g4@4 ~@2 g4@4 ~@2 a#4@2 g4 ~ a#4@2 b4@2 c5@4]/2",
  AK: "c5@4 g4 c5 a#4 a4", AL: "g4 g4@3 ~@4", AM: "[c5 d#5 ~ c5 d#5 d5 c5 a#4@2 g4 c5@2 c5@4]/2",
  AN: "g4 c5 a#4 a4 g4 g4@3", AO: "~@4 c5 d#5 ~ c5", AP: "d#5 d5 c5 a#4@2 g4 c5@2", AQ: "f#5 f5 d#5 f5@3 c4 d#4",
  AR: "d4 c4 f4 d#4 c4 g4@2 c4", AS: "g4 f4 g4@2 c4 f#4@2 c4", AT: "f4 f#4 f4 d#4 c4@4", AU: "~@3 d#4@3 ~@2",
  AV: "~@3 e4@3 ~@2", AW: "~@3 c#4@3 ~@2", AX: "c4/2", AY: "~ c#4 c4 g3", AZ: "a#3 c4 e4 f3", BA: "a#3/2",
  BB: "~ c4 c#4 c4", BC: "c#4 c4 b3 g3", BD: "~ c4 b3 a#3", BE: "a3 g#3 g3 f#3", BF: "g#3/3",
  BG: "[~@5 a3@8 d4@4 c4@3 a4@12]/4", BH: "[f4 d#4 ~ f4 ~ d4@8 g4@4 f4@3 d4@9 ~@3]/4",
  BI: "[~@5 a#3@8 c4@4 a#3@3 g#3@13 g3 ~ d#3 ~ c4@3]/5",
  BJ: "[g#3@9 a#3 ~ g#3 ~ c4@4 c4@3 c4@5 ~@4 c4@16 ~@2 c#4@2 c4@2 g3@2 a#3@2 c4]/7",
  BK: "[~ e4@2 f3@2 a#3@16 ~@2 c4@2 c#4@2 c4@2 c#4@2 c4@2 b3@2 g3@2 a#3@16 ~@2 c4@2 c#4@2 d4@2 d#4@2 e4]/8",
  BL: "[~ f4@2 f#4@2 a#4@32 a#4 a#4@2]/5",
})).s("gm_tenor_sax").gain(0.4)

stack(alto_sax, tenor_sax)