Strudelify

majoras mask title theme

Drake Thomsen

KeyD majorTempo100 bpm
0:00/0:00
// majoras mask title theme — Drake Thomsen
// 100 bpm, 4/4, key D 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 31, 4/4 at bar 48) are rendered on a constant 4/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/1333156; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 82 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(100/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.

// other · tuba · "Euphonium"
const tuba = note("<~@3 A@4 B@10 C@5 D@5 E@4 ~@20 F G F G H I H I H I H I H I ~@4 H I H I H I H I ~@5>".pickRestart({
  A: "[~@8 e3@10 f3@5 d3@5 e3@10 f3@5 d3@5]/4", B: "[e3@2 f3 d3 e3@2 f3 d3 e3@2 f3 d3]/5",
  C: "[e3@2 f3 d3 e3@2 f3 d3 c3@4]/5", D: "[b2@2 c3@2 b2 c3]/5", E: "[d#3@5 c#3@5 c3@10 ~@4]/4", F: "e3", G: "f3 d3",
  H: "e3@3 e4@3 a3 ~@2 e4 ~@2 a3@3 e4@3 f4@6", I: "f3@3 e4@3 a3 ~@2 e4 ~@2 d3@3 e4@3 d4@6",
})).s("gm_tuba").gain(0.25)

// bass · tuba
const bass = note(`<
  A B C D E F G C H I J B C D E F G C H I K L M N O P Q R S T U ~@20 V W V X Y Z Y Z Y Z Y Z Y Z ~@4 Y Z Y Z Y Z Y Z ~@5
>`.pickRestart({
  A: "~@8 a2@5 ~@5 a2@5 ~", B: "~@4 a2@5 ~@5 a#2@2 ~ g2@2 d2@2 ~ e2@2", C: "a2@5 ~@5 a2@5 ~@5 a2@4",
  D: "~@6 g2@2 ~@3 a#2@2 ~@3 a2@5 ~@3", E: "~@2 a2@5 ~@5 a2@5 ~@5 a#2@2", F: "~ g2@2 d2@2 ~ e2@2 a2@5 ~@5 a2@5 ~",
  G: "~@4 a2@5 ~@5 g2@2 ~@3 a#2@2 ~@3", H: "~@6 a#2@2 ~ g2@2 d2@2 ~ e2@2 a2@5 ~@3", I: "~@2 a2@5 ~@5 a2@5 ~@5 g2@2",
  J: "~@3 a#2@2 ~@3 a2@5 ~@5 a2@5 ~", K: "~@3 a#2@2 ~@3 f2@5 ~@5 f2@5 ~", L: "~@4 f2@5 ~@5 a#2@2 ~ g2@2 d2@2 ~ e2@2",
  M: "e2@5 ~@5 e2@5 ~@5 e2@4", N: "~@6 e2@5 ~@5 f2@5 ~@3", O: "~@2 f2@5 ~@5 f2@5 ~@5 a#2@2",
  P: "~ g2@2 d2@2 ~ e2@2 e2@5 ~@5 e2@5 ~", Q: "~@4 f2@5 ~@5 f2@5 ~@5", R: "g#2@5 ~@5 g#2@5 ~@5 f#2@4",
  S: "~@6 f#2@5 ~@5 f2@5 ~@3", T: "~@2 f2@5 ~@5 f2@5 ~@5 f2@2", U: "~@3 g#2@2 ~@19", V: "a2", W: "a#2 g2", X: "a#2 a2",
  Y: "a2@3 e3@3 a2 ~@2 e3 ~@2 a2@3 e3@3 f3@6", Z: "a2@3 e3@3 a2 ~@2 e3 ~@2 a2@3 e3@3 d3@6",
})).s("gm_tuba").gain(0.25)

// other · timpani
const timpani = note(`<
  ~ A B C D E F G H I J K G L D E F G H I M N O P Q R S T U V W ~@24 X Y X Y X Y X Y X Y ~@4 X Y X Y X Y ~@7
>`.pickRestart({
  A: "~@14 a#2@2 ~ g2@2 d2@2 ~ e2@2", B: "a2@5 ~@19", C: "~@16 a2@5 ~@3", D: "~@2 a2@5 ~@5 a2@5 ~@5 a#2@2",
  E: "~ g2@2 d2@2 ~ e2@2 a2@5 ~@5 a2@5 ~", F: "~@4 a2@5 ~@5 g2@2 ~@3 a#2@2 ~@3", G: "a2@5 ~@5 a2@5 ~@5 a2@4",
  H: "~@6 a#2@2 ~ g2@2 d2@2 ~ e2@2 a2@5 ~@3", I: "~@2 a2@5 ~@5 a2@5 ~@5 g2@2", J: "~@3 a#2@2 ~@3 a2@5 ~@5 a2@5 ~",
  K: "~@4 a2@5 ~@5 a#2@2 ~ g2@2 d2@2 ~ e2@2", L: "~@6 g2@2 ~@3 a#2@2 ~@3 a2@5 ~@3", M: "~@3 a#2@2 ~@3 f2@5 ~@5 f2@5 ~",
  N: "~@4 f2@5 ~@5 a#2@2 ~ g2@2 d2@2 ~ e2@2", O: "e2@5 ~@5 e2@5 ~@5 e2@4", P: "~@6 e2@5 ~@5 f2@5 ~@3",
  Q: "~@2 f2@5 ~@5 f2@5 ~@5 a#2@2", R: "~ g2@2 d2@2 ~ e2@2 e2@5 ~@5 e2@5 ~", S: "~@4 f2@5 ~@5 f2@5 ~@5",
  T: "g#2@5 ~@5 g#2@5 ~@5 f#2@4", U: "~@6 f#2@5 ~@5 f2@5 ~@3", V: "~@2 f2@5 ~@5 f2@5 ~@5 f2@2", W: "~@3 g#2@2 ~@19",
  X: "[a2,e3]", Y: "[a#2,f3] [g2,d3]",
})).s("gm_timpani").gain(0.25)

// drums · kick
const kick = s("bd").struct("<~@30 A B C D E F G C H I F G C J E K B ~@35>".pickRestart({
  A: "~@4 x ~@4 x ~@2", B: "~@4 x ~@4 x ~@4 x ~@9", C: "x ~@4 x ~@4 x ~@4 x ~@4 x ~@3",
  D: "~ x ~@4 x ~@4 x ~@4 x ~@4 x ~@2", E: "~@2 x ~@4 x ~@4 x ~@4 x ~@4 x ~", F: "~@8 x ~@4 x ~@4 x ~@4 x",
  G: "~@4 x ~@4 x ~@4 x ~@4 x ~@4", H: "~ x ~@4 x ~@9 x ~@7", I: "~@2 x ~@9 x ~@4 x ~@4 x ~",
  J: "~ x ~@4 x ~@9 x ~@4 x ~@2", K: "~@3 x ~@4 x ~@4 x ~@4 x ~@4 x",
})).gain(0.4)

// drums · snare
const snare = s("sd").struct(`<
  A B C D E F G C H E I B C D E F G C H E I B C D E F G C H E J K L M N O P Q R S O P Q T U V W X ~@34
>`.pickRestart({
  A: "~@8 x ~@7 x!3 ~@5", B: "~@2 x!3 ~@7 x!3 ~@7 x!2", C: "x ~@7 x!3 ~@7 x!3 ~@3", D: "~@4 x!3 ~@2 x ~@3 x ~@2 x ~@7",
  E: "x!3 ~@7 x!3 ~@7 x!3 ~", F: "~@6 x!3 ~@7 x!3 ~@5", G: "~@2 x!3 ~@7 x!3 ~@2 x ~@3 x ~@2", H: "~@4 x!3 ~@7 x!3 ~@7",
  I: "~ x ~@3 x ~@2 x ~@7 x!3 ~@5", J: "~ x ~@3 x ~@2 x ~@2 x ~ x!6 ~@2 x ~ x", K: "x!5 ~ x!2 ~ x ~ x!2 ~ x ~@4 x!5",
  L: "x ~@2 x ~@4 x ~@4 x ~@4 x ~@4 x", M: "~@4 x ~@4 x ~ x ~ x!2 ~@4 x ~@4",
  N: "x ~@4 x ~@4 x ~ x ~ x!2 ~ x ~ x!2 ~ x ~", O: "~@3 x!6 ~@2 x ~@4 x ~@4 x ~@2",
  P: "~@2 x ~@4 x ~@4 x ~@4 x ~ x ~ x!2 ~", Q: "~@3 x ~@4 x ~@4 x ~@4 x ~ x ~ x!2",
  R: "~ x ~ x!2 ~ x ~@4 x!6 ~@2 x ~ x!3", S: "x!3 ~@2 x ~ x!6 ~ x!2 ~ x ~ x!2 ~ x ~",
  T: "~ x ~ x!2 ~ x ~@4 x!6 ~@2 x ~@4", U: "x ~@4 x ~@4 x ~@4 x ~@4 x ~@3", V: "~ x ~ x ~ x!2 ~@4 x ~@4 x ~@4 x ~@2",
  W: "~@2 x ~ x ~ x!2 ~ x ~ x!2 ~ x ~@4 x!5", X: "x",
})).gain(0.4)

// drums · mid tom
const mid_tom = s("mt").struct("<~@47 [~ x ~ x ~@4] [x ~ x ~@2 x ~@2]!25 ~@9>").gain(0.3)

// drums · crash
const crash = s("cr").struct(`<
  ~@31
  [~@9 x ~@4 x ~@9]
  ~@6
  [~ x ~@4 x ~@17]
  [~@17 x ~@4 x ~]
  ~@6
  [~@9 x ~@4 x ~@9]
  ~@35
>`).gain(0.4)

// drums · tambourine
const tambourine = s("tb").struct("<~@47 [~@5 x ~@2] [~@3 x]!25 ~@9>").gain(0.3)

// drums · congas
const congas = s("conga:18").struct("<~@49 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@10>".pickRestart({
  A: "~@3 x ~@4",
})).gain(0.95)

// drums · congas
const congas_2 = s("conga:33").struct("<~@47 A B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~@9>".pickRestart({
  A: "~ x", B: "~@3 x ~@4",
})).gain(0.95)

stack(tuba, bass, timpani, kick, snare, mid_tom, crash, tambourine, congas, congas_2)