Strudelify

é¾è²

??:ANDY WU

KeyB♭ majorTempo120 bpm
0:00/0:00
// é¾è² — ??:ANDY WU
// 120 bpm, 4/4, key Bb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/3922541; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 54 bars on a 32-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, 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 · flute · "長笛"
const flute = note(`<
  ~@4 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z G H I J K L M N O P Q R S T U V W X Y Z W X AA AB
>`.pickRestart({
  A: "c5 ~ d5 ~ eb5 ~ e5 ~ f5 ~ g5 ~ a5 ~ bb5 ~", B: "c6@4 ~@4 f6 ~@2 f6 ~ f6 ~@2 f6@4 ~@12",
  C: "g5@8 f5@3 eb5@2 d5@3 c5@8 g5@8", D: "f5@8 eb5@3 d5@2 c5@3 bb4@8 f5@8",
  E: "eb5@8 eb5@3 d5@2 c5@3 bb4@4 a4@4 g4@4 a4@4", F: "bb4@4 ~@4 bb4 ~@2 d5 ~ f5 ~@2 bb5@4 ~@12", G: "d5@15 ~",
  H: "eb5@15 ~", I: "d5@15 ~ g5@15 ~", J: "eb5@15 ~ f5@15 ~", K: "g5@3 g5 g5@3 g5 g5@3 bb5 a5@3 g5", L: "f5@15 ~",
  M: "g5@3 f5 g5@3 f5 c5@4 d5@4", N: "bb4@23 ~@9", O: "eb5@11 ~@5 bb5@11 ~ ab5@2 gb5@2", P: "f5@15 ~@7 d5@2 eb5@6 f5@2",
  Q: "c5@15 ~ eb5@15 ~", R: "bb5@4 a5 bb5 ~ a5 g5@8 eb5@4 d5 eb5 ~ d5 c5@8", S: "bb4@15 ~ d5@15 ~",
  T: "c5@15 ~ g5@15 ~", U: "c5@15 ~ e5@15 ~", V: "f5@6 g5 f5 eb5@6 f5 eb5 d5@6 eb5 d5 c5@4 ~@4",
  W: "bb5@3 a5 bb5@3 f5 d5@4 bb5@4", X: "a5@23 ~ f5@6 f5@2", Y: "g5 ~ a5 ~", Z: "bb5@5 ~@3",
  AA: "g5@8 g5@3 eb5@2 g5@3 a5@8 a5@3 f5@2 a5@3", AB: "bb5@4 ~@10 [f5,gb5] [g5,ab5] bb5@4 ~@12, ~@16 a5 ~@15",
})).s("gm_flute").gain(0.4)

// other · alto sax · "中音薩克斯風"
const alto_sax = note(`<
  A B A B C D E F G H I J I K J F J L M N O P Q R S T U V W X I J I K J F J L M N O P Q R S T U V W X U V Y Z
>`.pickRestart({
  A: "eb4 f4@15 eb4 f4@15", B: "eb4 f4@7 eb4 f4@7 eb4 f4@15", C: "c4 ~ d4 ~ eb4 ~ e4 ~ f4 ~ g4 ~ a4 ~ bb4 ~",
  D: "c5@4 ~@4 a4 ~@2 a4 ~ a4 ~@2 a4@4 ~@12", E: "~ g4 ~ g4 ~ f4 ~ f4", F: "~ f4 ~ f4 ~ f4 ~ f4",
  G: "~ eb4 ~ eb4 g4 ~ g4 ~", H: "f4@4 ~@4 bb4 ~@2 bb4 ~ bb4 ~@2 bb4@4 ~@12", I: "~ d4 ~ d4 ~ d4 ~ d4",
  J: "~ eb4 ~ eb4 ~ eb4 ~ eb4", K: "~@4 eb4@4 ~@4 eb4@4 f4@3 f4@2 f4@3 f4@4 ~@4", L: "d4@3 d4 d4@3 d4 d4@2 ~@6",
  M: "gb4@3 gb4 gb4@3 gb4@9", N: "f4@3 f4 f4@3 f4@9", O: "eb4!3 c4", P: "d4@3 ~", Q: "g4!2 d4!2",
  R: "eb4@8 bb3@8 eb4@8 eb4@3 ~@3 d4 ~", S: "c4 ~ e4 ~ g4 ~ c4 ~", T: "f4 eb4 d4 c4", U: "f4@3 f4",
  V: "f4@10 ~@2 a4@3 a4", W: "bb4 ~ c5 ~", X: "bb4@5 ~@3", Y: "ab4 ~ a4 ~", Z: "d5 ~@3 bb3 ~@3",
})).s("gm_alto_sax").gain(0.19)

// other · tenor sax · "次中音薩克斯風"
const tenor_sax = note(`<
  A B A B C D E F G H I J K L M N O P Q R S T U@2 V W X Y Z P I J K L M N O P Q R S T U@2 V W X Y Z P AA Y Z AB
>`.pickRestart({
  A: "eb3 f3@15 eb3 f3@15", B: "eb3 f3@7 eb3 f3@7 eb3 f3@15", C: "c3 ~ d3 ~ eb3 ~ e3 ~ f3 ~ g3 ~ a3 ~ bb3 ~",
  D: "c4@4 ~@4 f3 ~@2 f3 ~ f3 ~@2 f3@4 ~@12", E: "eb3 ~ bb3 ~ eb3 ~ eb3 ~", F: "d3 ~ d3 ~ g3 ~ bb2 ~",
  G: "c3 ~ c3 ~ f3 ~ f3 ~", H: "bb2 ~ f3 ~ bb2 ~@3", I: "bb3 ~ f3 ~ bb3 ~ f3 ~", J: "c4 ~ f3 ~ c4 ~ f3 ~",
  K: "bb3 a3 g3 f3", L: "c4 ~ c4 ~ f3 ~ f3 ~", M: "eb3 ~ eb3 ~ bb3 ~ eb3 ~", N: "d3 ~ a3 ~ d3 ~ d3 ~",
  O: "c3 ~ c3 ~ f3 ~@3", P: "bb3 ~ f3 ~ bb3 ~@3", Q: "eb4 bb3", R: "d4 bb3", S: "gb3 bb3",
  T: "~@4 d4@4 ~@4 d4@4 ~@4 d4@4 d4@3 d4@2 d4@3", U: "[bb2@4 bb3@4 a3@4 f3@3 g3@9 ~@3 g3 a3@3 bb3]/2",
  V: "c4 bb3 a3 g3", W: "f3", X: "bb3@4 ~@4 f3@4 ~@4 bb3@4 ~@4 bb3@3 ~@3 c4 ~", Y: "d4 ~ a3 ~ d4 ~@3", Z: "eb4 ~ eb4 ~",
  AA: "bb3 ~ f3 ~ bb3 ~ c4 ~", AB: "bb3 ~@3 bb2 ~@3",
})).s("gm_tenor_sax").gain(0.17).pan(0.4)

stack(flute, alto_sax, tenor_sax)