Strudelify

Radetzky-Marsch Op.228

Johann Strauss I

KeyB♭ majorTempo120 bpm
0:00/0:00
// Radetzky-Marsch Op.228 — Johann Strauss I
// 120 bpm, 2/4, key Bb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5962167; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 270 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
const flute = note(`<
  A B C D E F E G H G I J E K E L M N O P Q@2 R@2 S T U V S W ~@2 X Y E F E G H G I J E K E L Z@2 O P Q@2 R@2 S T AA V S
  W ~@2 X Y E F E G H G I J E K E L Z@2 O AB AC@2 AD AE AF AG@3 AH@2 AI@2 AJ AK AL@2 AM@2 AN AO AJ AK AP@2 AH@2 AI@2 AJ
  AK AL@2 AM@2 AN AO AK AP@2 AJ AQ AR AS AT@2 AU AV AW AX AY@2 AZ@2 AU AV BA BB BC BD AH@2 AI@2 AJ AK BE BF BG@2 BH BI
  AJ AK BJ@2 AT@2 AU AV AW AX AY@2 AZ@2 AU AV BA BB BC BD AH@2 AI@2 AJ AK BE BF BG@2 BH BI AK BJ@2 AJ AQ BK BL A B C D E
  F E G H G I J E K E L M N O P Q@2 R@2 S T U V S W ~@2 X Y E F E G H G I J E K E L Z@2 O P Q@2 R@2 S T AA V S W ~@2 X Y
  E F E G H G I J E K E L Z@2 O AB
>`.pickRestart({
  A: "bb5!2 bb5@2 bb5!2 bb5@2", B: "d6@2 c6@2 bb5@3 a5", C: "g5 gb5 g5 a5 bb5@2 c6@2", D: "f5@4 ~@2 d5 db5",
  E: "d5@2 d5 db5 d5@2 d5 db5", F: "d5@2 c5@2 bb4 ~ d5 db5", G: "d5@2 g5@2 f5 ~ f5 d5", H: "eb5@2 g5@2 f5 ~ f5 c5",
  I: "c5 a5@2 g5", J: "~@2 f5 e5 f5 g5 f5 eb5", K: "d5@2 c5@2 bb4@2 d5 db5", L: "d5@2 g5@2 f5@2 f5 d5", M: "e5 d6 c6@2",
  N: "~ c6 bb5@2", O: "a5@3 g5 f5 eb5 d5 c5", P: "bb4 bb5 bb4 ~", Q: "[g5@15 ~]/2", R: "[f5@27 ~@5]/2",
  S: "c5@2 c5 d5 eb5@4", T: "d5@2 d5 eb5 f5@4", U: "eb5 ~@3", V: "d5@15 ~", W: "d5@2 d5 eb5 f5@2 ~@2",
  X: "d6 eb6 d6 eb6", Y: "d6@2 d5 db5 d5@2 d5 db5", Z: "[e5@4 d6@4 c6@11 ~ c6@4 bb5@8]/2", AA: "eb5@15 ~",
  AB: "bb4 a5 bb5 ~", AC: "[c5@23 ~ g4@4 ~@4]/2", AD: "e5 ~ c5 ~", AE: "g5 ~ e5 ~", AF: "c6@2 ~@2 c6 ~ c6 ~",
  AG: "c6 ~ c6 ~", AH: "[c4 a4 a4@4 c4@2]/2", AI: "[c4 a4 a4@4 bb4@2]/2", AJ: "c5@2 f5@2 a5 ~@3", AK: "a5 ~@3 a5 ~@3",
  AL: "[a4@23 ~ g4@4 a4@4]/2", AM: "[bb4@4 e5@4 g5@15 ~ f5@8]/2", AN: "e5@3 f5@2 e5@3 d5@4 ~@4", AO: "d5 ~ d5 ~",
  AP: "[a4@23 ~ c4@8]/2", AQ: "bb4@2 e5@2 g5 ~@3", AR: "f5@15 ~", AS: "~@2 e4 f4", AT: "[g4 bb4 e5@4 d5@2]/2",
  AU: "c5@3 d5@2 c5@3 bb4@2 ~@6", AV: "bb4 ~@3 bb4 ~@3", AW: "a4@2 c5@2 f5 ~@3", AX: "f5 ~@3 f5 ~@3",
  AY: "[f4@23 ~ e4@4 f4@4]/2", AZ: "[g4@4 bb4@4 e5@15 ~ d5@8]/2", BA: "a4 c5 f5 a5", BB: "c6@4 bb5@2 a5 ~",
  BC: "g5 ~ f5 ~ e5 ~ d5 ~", BD: "c5 ~ bb4 ~ a4 ~ g4 ~", BE: "a4 bb4 a4 bb4 a4 bb4 a4 bb4 a4 bb4 a4 bb4 a4 bb4 a4 bb4",
  BF: "a4 bb4 a4 bb4 a4 bb4 a4 bb4 g4@4 a4@4", BG: "[bb4@4 d5@4 g5@15 ~ f5@8]/2", BH: "e5@3 f5@2 e5@3 d5@2 ~@6",
  BI: "d5 ~@3 d5 ~@3", BJ: "[a4@23 ~ e4@4 f4@4]/2", BK: "f5 ~ f5 ~", BL: "f5 ~@3",
})).s("gm_flute").gain(0.4)

// other · clarinet · "B♭ Clarinet"
const clarinet = note(`<
  A B C D E F@3 G H I J K@4 L M N O P Q P R S T U V W X Y@2 Z AA F@4 G H I AB K@4 L M N O P Q P R S T U V W X Y@2 Z AA
  F@4 G H AC AD K@4 AE M AF AG AH@2 AI AJ AK AL@3 AM@2 AN@2 AO AP AQ@2 AR@2 AS AT AU AP AV@2 AM@2 AN@2 AO AP AQ@2 AR@2
  AS AT AP AV@2 AO AW AX ~ AY@4 AZ@4 BA@2 AY@2 BB ~ BC@2 BD@2 AN@2 BE AP BF ~ BG@2 BH BI AU AP BJ@2 AY@4 AZ@4 BA@2 AY@2
  BB ~ BC@2 BD@2 AN@2 BE AP BF ~ BG@2 BH BI AP BJ@2 AZ BA BK BL A B C D E F@3 G H I J K@4 L M N O P Q P R S T U V W X
  Y@2 Z AA F@4 G H I AB K@4 L M N O P Q P R S T U V W X Y@2 Z AA F@4 G H AC AD K@4 AE M AF AG
>`.pickRestart({
  A: "d5!2 d5@2 d5!2 d5@2", B: "bb4@2 a4@2 g4@3 f4", C: "e4 ~@2 e4", D: "f4@2 a4 ~", E: "bb4 f4 f3 f4",
  F: "d4 f4 f3 f4", G: "eb4 f4 f3 f4", H: "d4 f4 f3 d4", I: "f4 ~ e4@2", J: "f4 ~ eb4@2", K: "d4 ~ f4 ~ d4 ~ f4 ~",
  L: "e4 e5 ~ eb5", M: "d5!2 ~ d5", N: "g5 eb5", O: "d5@2 d5@2 d5@2 bb4 a4", P: "bb4@2 bb4 a4 bb4@2 bb4 a4",
  Q: "bb4@2 eb5@2 g4@2 bb4 a4", R: "bb4 d5 f4 f5", S: "f5@2 eb5 g5", T: "g5@2 f5 bb5", U: "a5@2 a5 g5 f5@2 eb5@2",
  V: "g5@2 g5 f5 eb5@2 ~@2", W: "f4 ~", X: "f4@2 ~ bb5", Y: "a5 gb5 g5 bb5", Z: "d5 eb5 d5 eb5", AA: "d5 ~@3",
  AB: "f4 ~ eb5@2", AC: "c5 ~ e5@2", AD: "f5 ~ eb5@2", AE: "e5!2 ~ eb5", AF: "g4 eb4", AG: "d4 eb5 d5 ~",
  AH: "[c5@6 g4 ~]/2", AI: "e4 ~ c5 ~", AJ: "g4 ~ e5 ~", AK: "c5@2 ~@2 c5 ~ c5 ~", AL: "c5 ~ c5 ~",
  AM: "[c4 f4 f4@4 f3@2]/2", AN: "[c4 f4 f4@4 g4@2]/2", AO: "c5@2 f5@2 a5 ~@3", AP: "f5 ~@3 f5 ~@3",
  AQ: "[f4@6 g4 a4]/2", AR: "[bb4 e5 e5@4 d5@2]/2", AS: "c5@3 f5@2 e5@3 d5@4 ~@4", AT: "bb4 ~ bb4 ~",
  AU: "c5@2 f5@2 f5 ~@3", AV: "[f4@3 c4]/2", AW: "g4@2 c5@2 e5 ~@3", AX: "a4", AY: "~ e4", AZ: "~ a4", BA: "~ bb4",
  BB: "f4", BC: "e4/2", BD: "[c4 f4 f4@4 c4@2]/2", BE: "a4@2 f5@2 a5 ~@3", BF: "~ f4", BG: "[bb4 d5 e5@4 d5@2]/2",
  BH: "bb4@3 f5@2 e5@3 e5@2 ~@6", BI: "bb4 ~@3 bb4 ~@3", BJ: "[f4@3 ~]/2", BK: "a4 ~ a4 ~", BL: "a4 ~@3",
})).s("gm_clarinet").gain(0.4)

stack(flute, clarinet)