Strudelify

Battle Against a True Hero

Toby Fox

KeyF majorTempo150 bpm
0:00/0:00
// Battle Against a True Hero — Toby Fox
// 150 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 3/4 at bar 61) are rendered on a constant 4/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/5901591; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 96 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(150/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 · tenor sax · "Tenor Saxophone"
const tenor_sax = note(`<
  ~@4 A B A@3 B A C D E D F D E D F D E D F D E D F ~@14 G@2 ~@14 H@2 I J@2 I K L I J@2 I K L M@3 N@3 M@3 O@3 M@3 N@3
  M@3 O@3
>`.pickRestart({
  A: "c4", B: "c4@3 bb3", C: "c4@3 ~@5", D: "eb4@3 f4@3 bb3@3 c4@3 ab3@2 f3@2", E: "db4@3 ab3@3 eb4@3 ab3@3 g3@2 eb3@2",
  F: "db4@3 ab3@3 eb4@3 ab4@3 g4@4", G: "a3/2", H: "[~@25 ab3@3 g3@4, a3]/2", I: "f3 c4 bb3 c4 ab3 c4 g3@2",
  J: "[g3 ab3 g3 ab3 g3@3 bb3@3 f3@3 eb3@3]/2", K: "g3 ab3 g3 ab3 g3@2 bb3@2", L: "eb4@2 eb4 [db4,d4] c4@12",
  M: "[db4 eb4 eb4 c4]/3", N: "[db4 eb4 eb4 a4]/3", O: "[db4@3 eb4@2 bb3 bb3@3 a3@3]/3",
})).s("gm_tenor_sax").gain(0.3)

// other · baritone sax · "Baritone Saxophone"
const baritone_sax = note(`<
  ~@4 A B A@3 B A C D E D F D E D F G@2 H@2 G@2 H@2 I@2 J@2 K@2 L M@3 J@2 N@2 O@2 I@2 J@2 K@2 L M@3 J@2 N@2 O@2 P@3 Q@3
  P@3 Q@3 R S@2 R T U R S@2 V W@2 R S@2 R T U R S@2 V W@2
>`.pickRestart({
  A: "f3", B: "f3@3 eb3", C: "f3@3 ~@5", D: "eb3@3 f3@3 bb2@3 c3@3 ab2@2 f2@2", E: "db3@3 ab2@3 eb3@3 ab2@3 g2@2 eb2@2",
  F: "db3@3 ab2@3 eb3@3 ab3@3 g3@4", G: "eb3/2", H: "bb2/2", I: "[c3@3 f3@3 ab3@2 f3@20 g3@2 ab3@2]/2",
  J: "[bb3@12 g3 ab3 bb3 c4]/2", K: "[g3@13 ~@3]/2", L: "g3@3 f3", M: "[c3@19 f3@3 ab3@2 f3@20 g3@2 ab3@2]/3",
  N: "[eb4@13 ~ f4@2]/2", O: "c4/2", P: "[ab3 bb3 bb3 ab3]/3", Q: "[ab3 bb3 c4 bb3]/3", R: "f3 c4 bb3 c4 ab3 c4 g3@2",
  S: "[g3 ab3 g3 ab3 g3@3 bb3@3 f3@3 eb3@3]/2", T: "g3 ab3 g3 ab3 g3@2 bb3@2", U: "eb4 f4@3", V: "f3@3 c3 eb3 f3 ab3@2",
  W: "[g3 eb3 c4@3 c4@3]/2",
})).s("gm_baritone_sax").gain(0.4)

// bass · baritone sax · "Bass Saxophone"
const bass = note(`<
  ~@4 A B A C D B A E F G F H F G F H F G F H F G F H F G F H F G F H F G F H F G F H F G F H F G F H F G F H F G F I
  J@12 K L M K L M K L M K N O K L M K L M K L M K N O
>`.pickRestart({
  A: "f2", B: "f2@3 eb2", C: "f2@13 [bb1,b1] [c2,db2] [d2,eb2]", D: "f2, e2 ~@15", E: "db2@3 eb2@3 bb2@4 ~@6",
  F: "f2!2 c2!2 f2!2 c2!2 ~ c2 eb2 f2 ab2 g2 f2 db2", G: "db2!2 ab1!2 db2!2 ab1 eb2 ~ bb1 eb2 f2 ab2 g2 f2 bb1",
  H: "db2 ~ db2 ab1 ~ ab1 db2 eb2 ~ bb1 eb2 f2 ab2 g2 f2 bb1", I: "db2 ~ db2 ab1 ~ ab1 db2 eb2@2 f2@3 g2@4",
  J: "[db3 eb3 f3 f3]/3", K: "db2@2 db2!2 db2@2 db2!2 db2@2 db2!2 eb2@2 eb2!2",
  L: "eb2@2 eb2!2 eb2@2 eb2!2 c2@2 c2!2 c2@2 c2!2", M: "c2@2 c2!2 f2@2 f2!2 f2@2 f2!2 eb2@2 eb2!2",
  N: "eb2@2 eb2!2 eb2@2 eb2!2 eb2@2 eb2!2 eb2@2 eb2!2", O: "eb2@2 eb2!2 f2@2 f2!2 f2@2 f2!2 eb2@2 eb2!2",
})).s("gm_baritone_sax").gain(0.3)

stack(tenor_sax, baritone_sax, bass)

More by Toby Fox