Strudelify

Hopes and Dreams / Save the world Soprano Sax + Flute duet - Undertale OST

Toby Fox

KeyB♭ majorTempo170 bpm
0:00/0:00
// Hopes and Dreams / Save the world Soprano Sax + Flute duet - Undertale OST — Toby Fox
// 170 bpm, 4/4, key Bb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: Transcription provider: pdmx. https://musescore.com/score/5132784; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 202 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(170/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · "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 A B C D E F A B A B C D G H I J I K L M N O I J I K L M N O ~@8 P@2 Q@2 R@2 S ~ T U V W X Y Z AA X Y Z AB X Y Z AB
  T U V W X Y Z AB T U V W X Y Z AB AC AD X Y AE AF AG AH AC AD X Y AE AF AG AH AI@2 AJ@2 AI@2 AK@2 X Y AE AF X Y AL@2 X
  Y AE AF X Y AL@2 ~@3 AM AF@2 ~ AN@2 AO@2 AP AQ@3 AR AS@2 AT@3 AU AV@2 AW@2 AX@2 AY AZ@3 BA BB@2 BC@3 ~@8 BD@8 BE BF
  BG@2 BH@2 BI@2 BJ BK@3 AR BL ~@10 BM BN ~@2
>`.pickRestart({
  A: "bb4 ~ bb4 ~@3 bb4 ~ bb4 ~ bb4 ~@3 bb4 ~", B: "bb4 ~ bb4 ~@3 bb4 ~ bb4 ~ bb4 ~ bb4 ~ c5 ~",
  C: "a4 ~ a4 ~@3 a4 ~ a4 ~ a4 ~@3 a4 ~", D: "a4 ~ a4 ~@3 a4 ~ a4 ~ a4 ~ a4 ~@3",
  E: "d5 ~ d5 ~@3 d5 ~ f5 ~ f5 ~@3 f5 ~", F: "f5 ~ f5 ~ d5 ~ c5 ~ bb4 ~ f4 ~ d4 ~ c4 ~", G: "d5 ~ f5 ~",
  H: "f5@2 a5 f5 d5 c5 bb4 f4", I: "f6@2 bb5 f6@2 bb5 f6@2", J: "bb5 f6@2 bb5 f6@2 f6 g6",
  K: "bb5 f6@2 bb5 f6@2 bb5 g6", L: "d6@2 f5 d6@2 f5 d6@2", M: "f5 d6@2 f5 d6@2 d6!2", N: "g5!4 a5!4",
  O: "bb5!4 c6 bb5 c6 d6", P: "c6@2 c6@2 ~ c6 c6@2", Q: "d6@2 d6@2 ~ d6 d6@2", R: "eb6@2 eb6@2 ~ eb6 eb6@2",
  S: "f6@2 f6@2 ~ f6 f6@2", T: "c5!2 c5@2 c5 c5@2 c5", U: "c5 c5@2 c5!2 c5@2 c5", V: "d5!2 d5@2 d5 d5@2 d5",
  W: "d5 d5@2 d5!2 d5@2 d5", X: "eb5!2 eb5@2 eb5 eb5@2 eb5", Y: "eb5 eb5@2 eb5!2 eb5@2 eb5", Z: "f5!2 f5@2 f5 f5@2 f5",
  AA: "f5 f5@2 f5!2 f5@2 f5", AB: "g5 g5@2 g5@2 g5@2 g5", AC: "db5!2 db5@2 db5 db5@2 db5",
  AD: "db5 db5@2 db5!2 db5@2 db5", AE: "e5!2 e5@2 e5 e5@2 e5", AF: "e5 e5@2 e5!2 e5@2 e5",
  AG: "gb5!2 gb5@2 gb5 gb5@2 gb5", AH: "ab5 ab5@2 ab5@2 ab5@2 ab5", AI: "eb6/2", AJ: "[e6@6 db6 eb6]/2",
  AK: "[gb5@3 ab5@4 ~]/2", AL: "[gb5!6 ab5@3 ab5 ab5@2 ab5 ab5@2 ab5]/2", AM: "~@3 eb5!2 eb5@2 eb5",
  AN: "[gb5@2 gb5@2 gb5@4 gb5 gb5@4 gb5@2 ab5@2 ab5@4 ab5@2 ab5@2 ab5@3 ab5@2 gb5@2]/2",
  AO: "[gb5@2 gb5@4 gb5@2 gb5@3 gb5@2 gb5@2 gb5@4 gb5@2 gb5@2 gb5@4 ~ e5@2 e5@2, ~@27 gb5@2 ~@3]/2",
  AP: "e5@4 e5@2 e5@4 e5@2 eb5 eb5@3",
  AQ: "[~ eb5@2 eb5@2 eb5@4 eb5@2 e5@2 e5 e5@4 e5@2 e5@4 e5@2 b4@2 b4@3 b4@2 gb5@2 gb5@4 gb5@2 gb5@2 gb5@2 gb5@3]/3",
  AR: "gb5 gb5@2 gb5 ab5 ab5@2 ab5",
  AS: "[ab5 ab5@4 ab5@2 gb5@2 gb5@2 gb5@4 gb5@2 gb5@3 gb5@2 gb5@2 gb5@4 gb5@2 gb5@2]/2",
  AT: "[gb5@3 gb5@2 e5@2 e5@2 e5@4 e5@2 e5@4 ~ eb5@2 eb5@4 eb5@2 eb5@2 eb5@4 eb5@2 e5 e5@2 e5@4 e5@2 e5@3, ~@19 e5@2 ~@27]/3",
  AU: "~ e5@2 b4@2 b4@3 b4@2 gb5@2 gb5@4",
  AV: "[gb5@2 gb5@2 gb5@2 gb5@3 gb5@2 gb5@4 gb5@2 ab5@2 ab5@4 ab5 ab5@2 ab5@4 ab5@2]/2",
  AW: "[gb5@2 gb5@2 gb5@4 gb5 gb5@4 gb5@2 gb5@2 gb5@4 gb5@2 gb5@2 gb5@3 gb5@2 e5@2]/2",
  AX: "[e5@2 e5@4 e5@2 e5@3 e5@2 eb5@2 eb5@4 eb5@2 eb5@2 eb5@4 ~ e5@2 e5@2, ~@27 eb5@2 ~@3]/2",
  AY: "e5@4 e5@2 e5@4 e5@2 b4 b4@3",
  AZ: "[~ b4@2 gb5@2 gb5@4 gb5@2 gb5@2 gb5 gb5@4 gb5@2 gb5@4 gb5@2 ab5@2 ab5@3 ab5@2 ab5@2 ab5@4 ab5@2 gb5@2 gb5@2 gb5@3]/3",
  BA: "gb5 gb5@2 gb5!2 gb5@2 gb5", BB: "[gb5 gb5@4 gb5@2 e5@2 e5@2 e5@4 e5@2 e5@3 e5@2 eb5@2 eb5@4 eb5@2 eb5@2]/2",
  BC: "[eb5@3 eb5@2 e5@2 e5@2 e5@4 e5@2 e5@4 ~ b4@2 b4@4 b4@2 gb5@2 gb5@4 gb5@2 ~@12, ~@19 e5@2 ~@27]/3",
  BD: "[~@3 eb5@4 e5@4 gb5@7 b5@8 bb5@7 db6@8 eb6@26 e6@4 gb6@30 db5@2 db5@2 db5@4 db5@2 db5@4 db5 db5@2 db5@4 db5@2 db5@2 db5@2]/8",
  BE: "~@2 db5@2 eb5 eb5@2 eb5@4 eb5@2 eb5@3", BF: "~ eb5@2 eb5@2 eb5@3 eb5@2 eb5@2 eb5@4",
  BG: "[eb5@2 e5@2 e5@2 e5@3 e5@2 e5@4 e5@2 e5@2 e5@4 e5 e5@2 e5@4 e5@2]/2",
  BH: "[gb5@2 gb5@2 gb5@4 gb5 gb5@4 gb5@2 ab5@2 ab5@4 ab5@4 ab5@3 ab5@2 db5@2]/2",
  BI: "[db5@2 db5@4 db5@2 db5@3 db5@2 db5@2 db5@4 db5@2 db5@2 db5@4 ~ eb5@2 eb5@2, ~@27 db5@2 ~@3]/2",
  BJ: "eb5@4 eb5@2 eb5@4 eb5@2 eb5 eb5@3",
  BK: "[~ eb5@2 eb5@2 eb5@4 eb5@2 e5@2 e5 e5@4 e5@2 e5@4 e5@2 e5@2 e5@3 e5@2 e5@2 e5@4 e5@2 gb5@2 gb5@2 gb5@3]/3",
  BL: "~ ab5@4 ab5@2 ~@9", BM: "~ b4@3", BN: "~ gb4@12 ~@3",
})).s("gm_soprano_sax").gain(0.3)

// other · soprano sax · "Soprano Saxophone" · soft notes
const soprano_sax_soft = note(`<
  ~@32 A@2 B@2 C@2 D@2 ~@80 E@2 F@2 ~@33 G@3 H I@6 ~@20 J@2 K@3 L@2 M@3 N@2 ~ O@2
>`.pickRestart({
  A: "c5@2 c5@2 ~ c5 c5@2", B: "d5@2 d5@2 ~ d5 d5@2", C: "eb5@2 eb5@2 ~ eb5 eb5@2", D: "f5@2 f5@2 ~ f5 f5@2",
  E: "db5/2", F: "[eb5@5 ~@3]/2", G: "[~@4 ab5@15 gb5@15 gb5@14]/3", H: "~ gb5@15",
  I: "[ab5@15 gb5@15 gb5@15 gb5@15 ab5@15 ~ gb5@8 ~@12]/6", J: "[~@7 gb5@25]/2",
  K: "[gb5@18 bb4@6 ~ eb4@6 bb4@6 eb5@6 bb4@5]/3", L: "[~ e4@6 b4@6 ~ e5@6 b4@6 e4@6]/2",
  M: "[b4@6 e5@6 ~ b5@6 eb4@6 b4@6 eb5@6 b5@6 d5@5]/3", N: "[~ db5@3 a4@3 db5@3 ~@6]/2", O: "[~@9 b4@12 ~@11]/2",
})).s("gm_soprano_sax").gain(0.2)

stack(soprano_sax, soprano_sax_soft)

More by Toby Fox