Strudelify

Earthbound OSTs

Bryce Stambaugh

KeyG majorTempo80 bpm
0:00/0:00
// Earthbound OSTs — Bryce Stambaugh
// 80 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: metre changes (4/4 at bar 1, 6/8 at bar 47, 4/4 at bar 56) are rendered on a constant 4/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/1171286; license: https://creativecommons.org/publicdomain/mark/1.0/
// note: Full arrangement: all 65 bars on a 48-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(80/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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.

// chords · vibraphone
const vibraphone = note("<A B C D E F G H I J K J E F G H I J K J L A B M N O P Q R S R T C D U@3 ~@28>".pickRestart({
  A: "[c4,e4]!2 [b3,d#4] [b3,e4]", B: "[g4,b4]@2 [g4,b4]@2 [g4,g5] [f#4,f#5] [e4,e5] [b3,b4]",
  C: "a3 [e4,a4] [e4,a4]@2 [e4,a4] [d4,g4] [e4,a4] [b4,d5]", D: "[a4,d5] [a4,c#5] [d4,a4]@2",
  E: "[d5,g5]@4 [d5,f#5]@4 [g4,d5]@4 g4 a4 b4 d5", F: "[d4,g4]@4 [d4,g4]@4 e5 d5 b4 a4 b4 c5 d5 e5",
  G: "[g4,d5]!2 [e4,g4]!2", H: "[d4,g4]@4 [d4,g4]@4 [d4,a4]@2 b4 c5 d5 e5 g5 a5", I: "[d5,g5] [d5,f#5] [g4,d5]@2",
  J: "[d4,g4]!2 [d4,a4]!2", K: "[g4,d5] [g4,b4] [e4,g4]!2",
  L: "[a3,c4]@2 [a3,c4] [a3,d4] [b3,d#4]@2 [b3,d#4,d#5] [e4,e5]", // Am D5 B E
  M: "a3 [e4,a4] [e4,a4]@2 [e4,a4] [d4,g4] [e4,c5] [g4,e5]", N: "[c5,f5]!4", O: "[b4,e5]!4", P: "[e5,g5]!2 [d5,f#5]!2",
  Q: "[d5,g5]!2 [e5,g5]!2", R: "[g5,a#5]!2 [f#5,a5]!2", S: "[g5,b5]!2 [f#5,a5]!2", T: "[g5,b5]!4",
  U: "[~@5 [d4,b4,g5]@13 ~@6]/3", // G
})).s("gm_vibraphone").gain(0.17)

// other · vibraphone
const vibraphone_2 = note("<~@36 A@4 B@8 C@8 D@2 E@7>".pickRestart({
  A: "[~@11 b4@12 c5@12 g5@12 f#5@12 d5@24 b4@28 b5@4 c5@4 g5@4 b5@4 d5@4 g5@4 c5@4 d5@4 b4@4 c5@4 a4@4 b4@4 g4@4 a4@4 d4@4 g4@4 c4@4 d4@4 b4@4 d4@4 c4]/4",
  B: "[~@3 d4@4 b4@4 d4@4 e4@4 d4@4 g4@4 e4@4 a4@4 g4@4 d4@4 a4@4 [d4,g4]@48 c5@12 d5@12 g5@12 f#5@12 d5@12 a4@12 b4@12 c4@3 d4@3 g4@3 a4@3 [d4,g4]@48 c5@12 d5@12 g5@12 f#5@12 d5@12 a4@12 b4@12 c4@3 d4@3 g4@3 a4@3 d#5@3 g5@3 a#5@3 d6@3 a#5@3 g5@3 d#5@3 g5@3 a#5@3 d6@3 a#5@3 g5@3 d#5@3 g5@3 a#5@3 d6@3 a#5]/8", // G5
  C: "[~@2 g5@3 d#5@3 g5@3 a#5@3 d6@3 a#5@3 g5@3 d#5@3 g5@3 a#5@3 d6@3 a#5@3 g5@3 d#5@3 g5@3 a#5@3 d6@3 a#5@3 g5@3 d#5@3 g5@3 a#5@3 d6@3 a#5@3 g5@3 d#5@3 g5@3 a#5@3 d6@3 a#5@3 g5@3 d5@3 a5@3 d6@3 d#6@3 d6@3 a5@3 d5@3 a5@3 d6@3 d#6@3 d6@3 a5@3 d5@3 a5@3 d6@3 d#6@3 d6@3 a5@3 d5@3 a5@3 d6@3 d#6@3 d6@3 a5@3 d5@3 a5@3 d6@3 d#6@3 d6@3 a5@3 d5@3 a5@3 d6@3 d#6@3 d6@3 a5@3 g5@18 c#5@3 d5@3 d#5@3 e5@3 f5@3 f#5@3 d#5@3 g5@3 a#5@3 d6@3 a#5@3 g5@3 d#5@3 g5@3 a#5@3 d6@3 a#5@3 g5@3 d#5@3 g5@3 a#5@3 d6@3 a#5@3 g5@3 d#5@3 g5@3 a#5@3 d6@3 a#5@3 g5@3 d#5@3 g5@3 a#5@3 d6@3 a#5@3 g5@3 d#5@3 g5@3 a#5@3 d6@3 a#5@3 g5@3 d#5@3 d5@3 d#5@3 f5@3 g5@3 f5@3 g5@3 a5@3 a#5@3 c6@3 d6@3 d#6@3 ~]/8",
  D: "[~@23 d5@6 c5@3 d5@3 b5@3 c5@3 a5@3 b5@3 b4@12 c5@6 g5@12 f#5@6 e5@12 e5]/2",
  E: "[~ f#5 e5 ~ d5 e5@18 b4@12 c5@6 g5@12 f#5@6 d5@12 d5 ~ e5 f#5 ~ d5 e5@6 f#5@6 g5@6 b4@12 c5@6 g5@12 [d5,f#5]@6 e5@6 f#5@6 b4@12 c5@6 g5@12 f#5@6 e5@12 [g4,d5,g5,c6]@52 [g4,d5,g5,b5]@64 ~@29]/7", // D Gsus4 G
})).s("gm_vibraphone").gain(0.36)

// other · soprano sax · "Soprano Saxophone"
const soprano_sax = note(`<
  A B C D E F G F E F G F E F G F E F G F H I J K L M N O P Q R S C T U@6 V@2 W@3 X@6 Y@6 ~@3 Z@2 AA@3
>`.pickRestart({
  A: "~ g5!3 f#5@2 g5 a5", B: "b5", C: "~ c#5!3 d5@2 e5@2", D: "f#5@4 e5@4 d5@4 ~@2 g4 a4",
  E: "b4@4 a4@4 g4@4 ~@2 b4 d5", F: "d5@6 c5 b4 a4@6 g4 a4", G: "b4@6 g4@2 e4@6 b4 d5", H: "b4 a4",
  I: "~ e5!3 d#5@2 e5 f#5", J: "g5", K: "~@5 d5!2 c5", L: "c5@2 b4 a4 ~ a4 b4 c5", M: "b4@2 g4 e4@3 e4 f#4",
  N: "g4 e4 g4 b4 a4@2 b4 c5", O: "d5 b4 d5 f5 e5@2 c5@2", P: "~ g4!2 a4 a#4 g4 a4@2", Q: "g4",
  R: "~ g4!2 a4 b4 g4 a4@2", S: "g4@2 d5 c5 b4@2 a4@2 g4@2 a4@2 b4@2 g4@2", T: "a5@4 g5@4 f#5@6 g5 a5",
  U: "[b5@15 a5@15 g5@77 b4@12 c5@12 g5@12 f#5@12 d5@24 e5@12 g5@16 b4@48 ~@33]/6",
  V: "[~@47 b4@12 c5@6 g5@12 f#5@6 e5@12 e5]/2",
  W: "[~ f#5 e5 ~ d5 e5@18 b4@12 c5@6 g5@12 f#5@6 d5@12 d5 ~ e5 f#5 ~ d5 e5@6 f#5@12 b4@12 c5@6 g5@12 f#5@6 e5@12 e5]/3",
  X: "[~ f#5 e5 ~ d5 e5@18 b4@12 c5@6 g5@12 f#5@6 d5@12 d5 ~ e5 f#5 ~ d5 e5@6 f#5@12 g4@18 d5@18 c5@18 f5@12 e5@3 d#5@3 d5@18 g5@18 d#5@3 d5@3 d#5@3 f5@3 g5@3 f5@3 g5@3 a5@3 a#5@3 c6@3 d6@3 d#6@3 d6@18 c6@18 a5@13]/6",
  Y: "[~@5 f#5@12 d#5@6 d5@18 c5@18 g4@18 c#5@3 d5@3 d#5@3 e5@3 f5@3 f#5@3 g5@18 d5@18 c5@18 f5@12 e5@3 d#5@3 d5@18 g5@18 d#5@3 d5@3 d#5@3 f5@3 g5@3 f5@3 g5@3 a5@3 a#5@3 c6@3 d6@3 d#6@3 d6@24 ~@25]/6",
  Z: "[~@29 d5@6 e5@6 f#5@6 b4@12 c5@6 g5@12 f#5@6 e5@12 e5]/2",
  AA: "[~ f#5 e5 ~ d5 e5@18 b4@12 c5@8 g5@8 b5@64 ~@29]/3",
})).s("gm_soprano_sax").gain(0.3)

// other · soprano sax · "Soprano Saxophone" · soft notes
const soprano_sax_soft = note("<~@39 A@2 ~@15 B@4 ~@5>".pickRestart({
  A: "[~@15 b4@16 c5@16 g4@16 b4@16 d5@16 ~]/2",
  B: "[~@47 d4@12 d4@6 d4@18 d4@6 d4@6 g4@12 g4@6 g4@18 g4@6 g4@6 e4@24 d4@24 ~]/4",
})).s("gm_soprano_sax").gain(0.15)

stack(vibraphone, vibraphone_2, soprano_sax, soprano_sax_soft)