Strudelify

the legend of zelda main theme

Dominic Francis

KeyB♭ majorTempo140 bpm
0:00/0:00
// the legend of zelda main theme — Dominic Francis
// 140 bpm, 3/4, key A# 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, 3/4 at bar 37, 4/4 at bar 79, 3/4 at bar 127) are rendered on a constant 3/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/1365501; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 150 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(140/3)

// 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 · trumpet · "Bb Cornet"
const trumpet = note(`<
  A@4 B C D@7 E@2 F@3 ~@3 G H I@6 J@3 K L M@2 N O P Q@2 R O P S@2 T U V W@2 X Y Z AA@2 R O P Q@2 R O AB AC@2 AD AE AF
  AG@2 AH Y Z AI@2 AJ AK ~@31 AL AM AN@2 AO AP AQ AR@2 AS@4 AT@2 AU ~@7 AV AW AX AY AZ BA AV ~ AV AW AX BB AZ BB AZ BC
  BD AV
>`.pickRestart({
  A: "[~@7 bb4@6 bb4@6 ~@2 bb4@3 bb4@2 bb4@2 bb4@2 bb4@4 ab4@2 bb4@6 ~@2 bb4@3 bb4@2 bb4@2 bb4@2 bb4@4 ab4@2 bb4@5]/4",
  B: "~@3 bb4@3 bb4@2 bb4@2 bb4@2 bb4@3 f4", C: "f4 ~ f4@3 f4!2 f4@3 f4 ~ f4 f4@3",
  D: "[f4!2 ~ bb4@6 f4@8 bb3@3 bb3 ~ c4 d4 eb4 ~ f4@14 f4@3 f4@2 gb4@2 ab4@2 bb4@11 ~@3 bb4@3 bb4@2 ab4@2 gb4@2 ab4@4 gb4@2 f4@11 f4@6 eb4@3 eb4 f4 ~ gb4@11]/7",
  E: "[f4@3 eb4@3 db4@3 db4 eb4 f4@11 ~ eb4@3 db4@3 c4@3]/2",
  F: "[c4 d4 e4@11 ~ g4@6 f4@3 f4!2 f4@3 f4 ~ f4 f4@3 f4!2 ~ f4@3 f4!2 ~@6]/3", G: "~@5 db5@3", H: "c5@5 a4@11",
  I: "[~ f4@6 gb4@23 f4@23 gb4@22 f4@21]/6", J: "[~@2 eb4@23 db4@23]/3", K: "c4", L: "~@2 e4@5 f4@3 f4 ~ f4 f4@3",
  M: "[f4!2 ~ f4@3 f4!2 ~ f4@2 f4 ~ f4 f4@11 ~@7]/2", N: "~@5 g4@7 d4@4", O: "g4@2 ~ f4@4 c4@4 ~ f4@4",
  P: "g4@7 d4@4 g4@2 f4@3", Q: "[~@2 c4@4 f4@4 ~ g4@6 d4@4 ~ g4@2 f4@4 c4@4]/2", R: "~ f4@4 g4@7 d4@4",
  S: "[~@2 c4@4 f4@4 ~ bb3@6 f4@4 ~ bb4@2 bb3@4 f4@4]/2", T: "~ bb4@4 ab4@7 eb4@4", U: "ab4@2 ~ ab4@4 eb4@4 ~ ab4@4",
  V: "g4@7 d4@4 g4@2 g4@3", W: "[~@2 d4@4 g4@4 ~ f4@6 c4@4 ~ f4@2 f4@4 c4@4]/2", X: "~ f4@4 eb4@7 bb3@4",
  Y: "eb4@2 ~ eb4@4 bb3@4 ~ eb4@4", Z: "eb4@7 bb3@4 eb4@2 eb4@3",
  AA: "[~@2 bb3@4 eb4@4 ~ g4@6 d4@4 ~ g4@2 f4@4 c4@4]/2", AB: "bb4@7 f4@4 bb4@2 bb4@3",
  AC: "[~@2 f4@4 bb4@4 ~ ab4@6 eb4@4 ~ ab4@2 ab4@4 eb4@4]/2", AD: "~ ab4@4 g4@7 d4@4", AE: "g4@2 ~ g4@4 d4@4 ~ g4@4",
  AF: "f4@7 c4@4 f4@2 f4@3", AG: "[~@2 c4@4 f4@4 ~ eb4@6 bb3@4 ~ eb4@2 eb4@4 bb3@4]/2", AH: "~ eb4@4 eb4@7 bb3@4",
  AI: "[~@2 bb3@4 eb4@4 ~ eb4@13 ~@8]/2", AJ: "~@3 f4@2 g4@7 g4@4", AK: "g4@2 ~ g4@13", AL: "~@13 c4@3",
  AM: "g4@13 c4@3", AN: "[g4@3 c5@2 a4 ~ bb4 a4@13 ~@3 f4@3 g4@5]/2", AO: "c4@13 f4@3", AP: "f4 eb4 ~ d4@13",
  AQ: "~@3 c4@2 c4@11", AR: "[~@8 c5 g5 ~ d5@10 bb4@11]/2", AS: "[c5@11 g5@10 f5@16 ~@3 eb5 d5 ~ eb5@21]/4",
  AT: "[d5@21 c5@5 ~ g4@5]/2", AU: "c4@11 ~@5", AV: "d4", AW: "e4@3 f4@2 g4@11", AX: "c5@5 d5@11",
  AY: "b4@3 a4@2 g4@11", AZ: "d4@3 c4@2 d4@11", BA: "g4@5 e4@5 ~ f4@2 e4@3", BB: "g4@5 e4@11", BC: "g4@5 a4@5 ~ e4@5",
  BD: "d4@3 d4@5 d4@3 d4@2 c4@3",
})).s("gm_trumpet").gain(0.3)

// other · french horn · "Eb Alto Horn"
const french_horn = note(`<
  A@4 B C D@7 E@2 F@3 G H I@2 ~ J@5 K@4 L M N@2 O P Q R S T P Q U V W X Y Z AA AB AC AD AE ~@2 AF AG@3 AH AI AJ AK@4
  AL@5 AM@3 AN AO ~ AP AQ AR AS AT AU AV AW AX AY AZ BA BB BC AR BD BE BF BG BH BI BJ BK ~@2 BL BM BN BO BP BQ BR BS@2
  BT BU BV BP BW BX BY@2 BZ CA CB@2 ~@7 CC CD CE CF CG CH CI ~ CC CD CJ CK CL CM CL CM CN CO
>`.pickRestart({
  A: "[~@7 f4@6 f4@6 ~@2 f4@3 f4@2 f4@2 f4@2 f4@4 f4@2 f4@6 ~@2 f4@3 f4@2 f4@2 f4@2 f4@4 f4@2 f4@5]/4",
  B: "~@3 f4@3 f4@2 f4@2 f4@2 f4@3 f4", C: "f4 ~ f4@3 f4!2 f4@3 f4 ~ f4 f4@3",
  D: "[f4!2 ~ d4@6 bb3@8 d3@3 d3 ~ eb3 f3 g3 ~ ab3@14 ab3@3 ab3@2 bb3@2 c4@2 db4@11 ~@3 db4@3 db4@2 c4@2 bb3@2 c4@4 bb3@2 ab3@11 ab3@6 gb3@3 gb3 ab3 ~ bb3@11]/7",
  E: "[ab3@3 gb3@3 f3@3 f3 gb3 ab3@11 ~ gb3@3 f3@3 e3@3]/2",
  F: "[e3 f3 g3@11 ~ bb3@6 a3@3 a3!2 a3@3 a3 ~ a3 a3@3 a3!2 ~ a3@3 a3!2 ~ bb3@5]/3", G: "f3@9 bb3@3 bb3 c4 ~ d4",
  H: "eb4 ~ f4@14", I: "[f4@3 f4@2 gb4@2 ab4@2 bb4@17 ~@6]/2",
  J: "[~ f4@6 gb4@17 bb4@6 a4@5 f4@11 ~ f4@6 gb4@17 bb4@5 a4@5]/5",
  K: "[~ f4@11 ~ d4@5 eb4@17 ~ gb4@5 f4@6 db4@11 ~ bb3@5]/4", L: "c4@3 c4 ~ d4 e4@10", M: "~@2 g3@5 a3@3 a3 ~ a3 a3@3",
  N: "[a3!2 ~ a3@3 a3!2 ~ a3@2 a3 ~ a3 a3@11 ~@7]/2", O: "~@5 g3@7 g3@4", P: "g3@2 ~ f3@4 f3@4 ~ f3@4",
  Q: "g3@7 g3@4 g3@2 f3@3", R: "~@2 f3@4 f3@4 ~ g3@5", S: "~ g3@4 ~ g3@2 f3@4 f3@4", T: "~ f3@4 g3@7 g3@4",
  U: "~@2 f3@4 f3@4 ~ bb3@5", V: "~ bb3@4 ~ bb3@2 bb3@4 bb3@4", W: "~ bb3@4 ab3@7 ab3@4",
  X: "ab3@2 ~ ab3@4 ab3@4 ~ ab3@4", Y: "g3@7 g3@4 g3@2 g3@3", Z: "~@2 g3@4 g3@4 ~ f3@5", AA: "~ f3@4 ~ f3@2 f3@4 f3@4",
  AB: "~ f3@4 eb3@7 eb3@4", AC: "eb3@2 ~ eb3@4 eb3@4 ~ eb3@4", AD: "eb3@7 eb3@4 eb3@2 eb3@3", AE: "~ eb3@2 eb3@2 ~@3",
  AF: "~@7 a3", AG: "[g3@7 f3@2 g3@2 f3@2 a3@7 f3@7 d3@13 a3@8]/3", AH: "~@3 a3@2 g3@7 f3@2 g3@2",
  AI: "f3@2 ~ a3@6 d4@7", AJ: "bb3@13 ~@3", AK: "[~@8 g3@2 ~ ab3@3 bb3 ab3@18 ~@2 ab3@2 g3@7 d3@16 ~@2 g3@2]/4",
  AL: "[a3@3 bb3 a3@18 ~@2 g3@2 ~ g3@26 g3@22 ~@3 f3@2]/5", AM: "[g3@27 g3@13 ~@8]/3", AN: "~@3 f3@2 c4@7 c4@4",
  AO: "c4@2 ~ b3@13", AP: "~@5 d3@4 e3@3 g3@4", AQ: "bb3@4 d4@3 e4@4 a4@2 d4@3", AR: "bb3@3 g3@2 g4@3 d4@3 bb3@2 g3@3",
  AS: "gb4@3 d4@2 bb3@3 g3@3 g4@2 d4@3", AT: "bb3@3 g3@2 g4@3 c4@3 a3@2 f3@3", AU: "f4@3 c4@2 a3@3 f3@3 e4@2 c4@3",
  AV: "a3@3 f3@2 f4@3 c4@3 a3@2 f3@3", AW: "f4@3 bb3@2 g3@3 e3@3 e4@2 bb3@3", AX: "g3@3 e3@2 eb4@3 bb3@3 g3@2 e3@3",
  AY: "e4@3 bb3@2 g3@3 e3@3 e4@2 a3@3", AZ: "f3@3 d3@2 d4@3 a3@3 f3@2 d3@3", BA: "db4@3 a3@2 f3@3 d3@3 d4@2 a3@3",
  BB: "f3@3 d3@2 a4@3 d4@3 bb3@2 g3@3", BC: "g4@3 d4@2 bb3@3 g3@3 gb4@2 d4@3", BD: "bb4@3 eb4@2 c4@3 gb3@3 a4@2 eb4@3",
  BE: "c4@3 gb3@2 ab4@3 eb4@3 c4@2 gb3@3", BF: "a4@3 eb4@2 c4@3 gb3@3 c5@2 d4@3",
  BG: "bb3@3 g3@2 bb4@3 d4@3 bb3@2 g3@3", BH: "a4@3 d4@2 bb3@3 g3@3 bb4@2 d4@3", BI: "bb3@3 g3@2 a4@3 bb3@3 g3@2 e3@3",
  BJ: "g4@3 bb3@2 g3@3 e3@3 f4@2 bb3@3", BK: "g3@3 e3@2 e4@3 bb3@3 g3@2 e3@3", BL: "~@13 eb3@3",
  BM: "eb3@3 eb3!2 eb3@3 f3@3 ~@5", BN: "~@3 g3@2 g3@3 g3!2 ~ g3@2 a3@3", BO: "~@8 eb3@3 eb3@2 eb3 ~ eb3",
  BP: "eb3@3 f3@3 ~@7 g3@3", BQ: "g3@3 g3!2 g3@3 a3@3 ~@2 c4@3", BR: "eb4@13 c4@3",
  BS: "[eb4@3 g4@2 f4 ~ g4 f4@13 ~@3 d4@3 eb4@5]/2", BT: "ab3@13 d4@3", BU: "d4 c4 ~ bb3@13",
  BV: "~@3 g3@2 g3@3 eb3@3 eb3@2 eb3 ~ eb3", BW: "g3@3 g3!2 g3@3 a3@3 ~@2 c3@3", BX: "g3@13 c3@3",
  BY: "[g3@3 c4@2 a3 ~ bb3 a3@13 ~@3 f3@3 g3@5]/2", BZ: "c3@11 ~@2 f3@3", CA: "f3 eb3 ~ d3@13",
  CB: "[~@3 c3@2 c3@21 ~@6]/2", CC: "~@5 a3@5 ~ f4@5", CD: "g4@3 f4@2 e4@11", CE: "c4@5 d4@5 ~ a3@5",
  CF: "b3@3 a3@2 g3@11", CG: "f4", CH: "e4", CI: "a3", CJ: "~@11 a3@5", CK: "b3@5 g3@11", CL: "bb3", CM: "c4",
  CN: "f3@3 f3@5 f3@3 f3@2 e3@3", CO: "d3",
})).s("gm_french_horn").gain(0.4)

// bass · tuba · "Euphonium"
const bass = note(`<
  A@4 B C D@2 E@5 F G@2 H@2 I J K@2 L M@5 N@4 O P Q@2 ~@3 R@4 S@3 T@2 U@5 ~ V@2 W X Y Z@2 W X AA AB@2 AC AD AE AF@2 AG
  AH AI AJ@2 AK AL ~@2 AM@2 AN@2 AO@2 AP@2 AQ@2 AR@3 AS AT@2 AU AV AW AX@2 AY ~@2 AZ BA BB BC BD BA BE BF BG BH BI@2 BD
  BA BE BF BG BH BJ@3 ~ BK BL BM BN BK ~ BO BP BQ BR BS BT BU BV BO BP BQ BR BS BT BW BX BY BK
>`.pickRestart({
  A: "[~@7 d4@6 d4@6 ~@2 d4@3 d4@2 d4@2 d4@2 c4@4 c4@2 c4@6 ~@2 c4@3 c4@2 c4@2 c4@2 bb3@4 bb3@2 bb3@5]/4",
  B: "~@3 bb3@3 bb3@2 bb3@2 bb3@2 bb3@3 bb3", C: "bb3 ~ bb3@3 bb3!2 bb3@3 bb3 ~ bb3 bb3@3",
  D: "[bb3!2 ~ bb3@6 f3@8 bb2@3 bb2 ~ c3 d3 eb3 ~ ab3@6]/2",
  E: "[ab3@2 ab3 ~ ab3 ab3@3 ab3@3 ab3@2 bb3@2 c4@2 gb3@6 gb3@2 gb3 ~ gb3 gb3@3 gb3@3 gb3@2 ab3@2 bb3@2 f3@4 f3@2 f3@17 eb3@6 eb3@2 eb3 ~ eb3 eb3@3 eb3@3]/5",
  F: "eb3!2 ~ eb3@3 db3@5 db3@3 db3 ~", G: "[db3 db3@3 db3@3 db3!2 ~ db3@3 c3@5 c3@3 c3 ~ c3 c3@3 c3@3 c3!2]/2",
  H: "[~ c3@3 f3@3 f3!2 f3@3 f3 ~ f3 f3@3 f3!2 ~ f3@3 f3!2 ~ bb3@5]/2", I: "f3@9 bb2@3 bb2 c3 ~ d3", J: "eb3 ~ f3@14",
  K: "[f3@3 f3@2 gb3@2 ab3@2 bb3@17 db4@6]/2", L: "c4@5 a3@11",
  M: "[~ f3@6 gb3@17 bb3@6 a3@5 f3@11 ~ f3@6 gb3@17 bb3@5 a3@5]/5",
  N: "[~ f3@11 ~ d3@5 eb3@17 ~ gb3@5 f3@6 db3@11 ~ bb2@5]/4", O: "c3@3 c3 ~ d3 e3@10", P: "~@2 g3@5 f3@3 f3 ~ f3 f3@3",
  Q: "[f3!2 ~ f3@3 f3!2 ~ f3@2 f3 ~ f3 f3@11 ~@7]/2",
  R: "[~@8 d3@2 ~ bb3@6 a3@2 ~ bb3@2 a3@2 c4@7 a3@6 g3@13 ~ d3@9 ~@2 d3@2]/4",
  S: "[bb3@7 a3@2 bb3@2 a3@2 c4@7 f4@7 d4@13 ~@8]/3", T: "[~@3 bb3@2 c4@3 ~ d4 c4@18 ~@2 c4@2]/2",
  U: "[bb3@7 g3@16 ~ bb3@2 ~ c4@3 d4 c4@18 ~@2 bb3@2 g3@27]/5", V: "[~@11 g2@6 d3@4 ~ g3@2 f2@4 c3@4]/2",
  W: "~ f3@4 g2@7 d3@4", X: "g3@2 ~ f2@4 c3@4 ~ f3@4", Y: "g2@7 d3@4 g3@2 f2@3",
  Z: "[~@2 c3@4 f3@4 ~ g2@6 d3@4 ~ g3@2 f2@4 c3@4]/2", AA: "bb2@7 f3@4 bb3@2 bb2@3",
  AB: "[~@2 f3@4 bb3@4 ~ ab2@6 eb3@4 ~ ab3@2 ab2@4 eb3@4]/2", AC: "~ ab3@4 g2@7 d3@4", AD: "g3@2 ~ g2@4 d3@4 ~ g3@4",
  AE: "f2@7 c3@4 f3@2 f2@3", AF: "[~@2 c3@4 f3@4 ~ eb3@6 bb2@4 ~ eb3@2 eb3@4 bb2@4]/2", AG: "~ eb3@4 eb3@7 bb2@4",
  AH: "eb3@2 ~ eb3@4 bb2@4 ~ eb3@4", AI: "eb3@7 bb2@4 eb3@2 eb3@3", AJ: "[~@2 bb2@4 eb3@4 ~ eb3@13 ~@8]/2",
  AK: "~@3 f3@2 g3@7 g3@4", AL: "g3@2 ~ g3@13", AM: "[~@11 a3@10 g3@11]/2", AN: "[gb3@11 g3@10 g3@11]/2",
  AO: "[f3@11 e3@10 f3@11]/2", AP: "[f3@11 e3@10 eb3@11]/2", AQ: "[e3@11 e3@10 d3@11]/2",
  AR: "[db3@11 d3@10 bb2@3 bb2@3 d3@2 a3@13 ~ bb2@2 d3@3]/3", AS: "a3@3 g3@2 d4@3 a3@3 g3@2 d3@3",
  AT: "[a2@3 a2@2 c3@3 c4@13 d3@3 d3@3 c4@2 a3@3]/2", AU: "eb4@3 d4@2 c4@3 a3@3 g2@2 g2@3", AV: "d3@3 bb3@13",
  AW: "g3@3 g3@2 bb3@3 a3@3 c4@2 bb3@3", AX: "[g3@3 d3@2 c3@3 c3@3 g3@2 bb3@13 ~ c3@2 c3@3]/2",
  AY: "bb3@3 g3@2 e4@3 d4@3 g4@2 e4@3", AZ: "~@11 c3@3 ~@2", BA: "c3@3 ~@2 c3@3 ~@5 c3@3",
  BB: "c3@3 ~@2 c3@3 ~@3 c3@3 ~@2", BC: "~@3 c3@2 c3@3 ~@3 c3@3 ~@2", BD: "c3@3 ~@5 c3@3 c3@3 ~@2",
  BE: "c3@3 g3@2 c3@3 g3!2 ~ c3@2 g3@3", BF: "~@3 c3@2 f3@3 a3@3 f3@2 a3 ~ a3", BG: "f3@3 a3@3 ~@2 f3@3 ab3@2 g3@3",
  BH: "ab3@3 g3!2 ab3@3 g3@3 ~@2 ab3@3", BI: "[bb3@3 f3@2 bb3@3 f3!2 ~ bb3@2 f3@5 ~ bb3@2 c3@3 ~@3 c3@3 ~@2]/2",
  BJ: "[bb3@3 f3@2 bb3@3 f3!2 ~ bb3@2 f3@5 ~ bb3@2 c3@21 ~@6]/3", BK: "d3", BL: "e3@3 f3@2 g3@11", BM: "c4@5 d4@11",
  BN: "g3@5 e3@11", BO: "d3@8 d3@5 d3@3", BP: "c3@8 c3@5 e3@3", BQ: "f3@8 f3@5 f3@3", BR: "g3@8 g3@3 g3@2 a3@3",
  BS: "bb3@8 f3@5 bb3@3", BT: "c4@5 g3@5 ~ c3@5", BU: "d3@3 d3@5 d3@3 d3@2 c3@3", BV: "d3@3 ~@13",
  BW: "bb2@8 f3@5 bb2@3", BX: "c3@8 g3@5 c3@3", BY: "d3@5 d3@3 d3@3 d3@2 c3@3",
})).s("gm_tuba").gain(0.3)

stack(trumpet, french_horn, bass)