Strudelify

Anna's Theme from When Marnie was There

Takatsugu Muramatsu

KeyA majorTempo124 bpm
0:00/0:00
// Anna's Theme from When Marnie was There — Takatsugu Muramatsu
// 124 bpm, 4/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 (1/2 at bar 1, 4/4 at bar 1) are rendered on a constant 4/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/5901400; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 87 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(124/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.

// chords · french horn · "Horn in F"
const french_horn = note(`<
  ~@13 A B C D E F G H I J K L I M@2 N O P Q R S T U R V W X Y Z AA ~@4 AB AC AD@2 AC@2 AE AF@2 AG AH AI AJ@2 AK AL AM
  ~@8 A B AN AO AP AQ AR AS AT F AU AV@4
>`.pickRestart({
  A: "[e4,a4]!2", B: "[d4,a4]@3 [d4,a4]", C: "[c#4,a4] e4", D: "f#4@2 a3@2 d4@2 f#4 g#4", E: "a3 e4 e4@2", F: "d4 e4",
  G: "a3@2 b3@2 a3@3 g#3", H: "a3@4 ~ e3 a3 b3", I: "g#4@6 a4@2 f#4@6 g#4 f#4", J: "e4 c#4", K: "d4@4 d4@2 c#4 b3",
  L: "b3@2 c#4 b3 ~ e3 ~ b3, ~@2 a3!2", M: "[e4@8 e3@2 a3@2 c#4@2 d4@6 e4@4 c#4@6 b3 a3]/2", N: "b3@3 a3 c#4@2 b3@2",
  O: "a4@4 g#4@3 f#4", P: "e4@2 ~ e3 e4@2 d4@2", Q: "c#4@14 d4 c#4", R: "b3@3 c#4 c#4@2 b3@2", S: "e4@4 e4@3 f#4",
  T: "e4@4 e3 e4@2 d4", U: "a4@14 d4 e4", V: "a3@4 g#3@3 f#3", W: "e3@4 e3 e4@2 d4", X: "a4@4 a4@3 e4", Y: "e4",
  Z: "g#3 a3 e3 g#3 a3 e3 a3 e4", AA: "g#4 a4 e4 g#4 a4@4",
  AB: "[a3,c4] ~ [b3,d4]@2 [a3,c4] ~ [b3,d4]@2 [a3,c4] ~ [b3,d4]@2 [a3,c4] ~ [b3,d4]@2", // Am Bm Am Bm Am Bm Am Bm
  AC: "[a3,c4] ~ [b3,d4] ~ [a3,c4] ~ [b3,d4] ~ [a3,c4] ~ [b3,d4] ~ [a3,c4] ~ [b3,d4] ~", // Am Bm Am Bm Am Bm Am Bm
  AD: "[b3,d4] ~ [c4,e4] ~ [b3,d4] ~ [c4,e4] ~ [b3,d4] ~ [c4,e4] ~ [b3,d4] ~ [c4,e4] ~", // Bm C Bm C Bm C Bm C
  AE: "[g3,b3] ~ [a3,c4] ~ [g3,b3]@2 [a3,c4] ~ [b3,d4] ~ [c4,e4] ~ [b3,d4] ~ [c4,e4] ~", // G Am G Am Bm C Bm C
  AF: "[[a#3,d4,f4] ~ [a#3,e4,g4] ~ [a#3,d4,f4] ~ [a#3,e4,g4] ~ [a#3,d4,f4]@4 ~@4 [f4,a4]@12 c4@4, ~@3 c4@4 ~]/2", // A# Edim A# Edim A# F
  AG: "[f3,a3,c4]@2 b3@2 c4@3 d4", AH: "d4", AI: "~@2 [a3,e4,a4]@2 [b3,g4]@3 c4", AJ: "[[f4,a4]@10 e4@2 d4@3 c4]/2",
  AK: "[b3,e4]", AL: "b3 e4 a4@2", AM: "g#4", AN: "[c#4,a4] [e4,a4]", AO: "~@2 a3@2 [d4,f#4]@2 f#4 g#4",
  AP: "f#4 [c#4,e4]", AQ: "[d4,f#4] [c#4,e4]", AR: "a4 b4 a4 g#4", AS: "[d4,e4,a4]@4 ~ e4 a4 b4", AT: "[c#4,e4,a4]",
  AU: "f#4 [d4,e4]", AV: "[d4@12 b3@12 ~ c#4@25 ~@14]/4",
})).s("gm_french_horn").gain(0.3)

// chords · french horn · "Horn in F" · soft notes
const french_horn_soft = note("<A B C B D E F G H I J K L ~@30 M N O@2 ~@17 P Q R S T U V L ~@15>".pickRestart({
  A: "~@6 a3 b3", B: "c#4@2 e4@2 e4@3 a4", C: "d4@6 a3 b3", D: "d4", E: "a3!2", F: "a3@3 a3", G: "a3 e4",
  H: "~ a3 d4@2", I: "~ a3 b3 a3, ~ e4", J: "c#4 d4 [b3,e4]@2", K: "~@2 c#4 d4", L: "a3 g#3, [b3,d4]", M: "d4 e4",
  N: "f#4 e4", O: "e4/2", P: "a4 g#4", Q: "f#4@3 a4", R: "e4 a4", S: "~@4 f#4@2 f#4 g#4", T: "~ e4", U: "~ a3 e4@2",
  V: "~ d4",
})).s("gm_french_horn").gain(0.2)

// bass · tuba · "Euphonium"
const bass = note(`<
  ~ A B A C D E F G H I J K L M N O P Q R S T U V W T X Y Z AA AB AC AD AA AB AE AD AA AF AG AH AI@2 AJ AK AL AM AN AO
  AP AQ AR AS AT AU AV AW AX AY AZ AB BA@2 BB ~@2 BC BD BE BF BG BB L M N O BH BI R BJ BK BL BM BN@4
>`.pickRestart({
  A: "[a3,e4] [g#3,e4]", B: "~ d4 f#4@2, f#3", C: "~ a3 d4 e4 f#4@4, f#3 ~", D: "~ g#3", E: "f#3@3 f3",
  F: "e3@2 b3 a3, ~ c#3", G: "d3@6 d3 e3", H: "f#3 c#3", I: "d3 a3 c#3 a3", J: "g2 d3 g3 b3", K: "e2 b2 e3@2",
  L: "a3 [g#3,a3]", M: "[f#3,a3]@3 [f3,a3]", N: "[e3,a3]@2 b3 a3, ~ c#3", O: "d3@6 [d3,a3] [e3,b3]",
  P: "[f#3,c#4] [c#3,a3]", Q: "d3 a3 [c#3,b3]@2", R: "g2 e2", S: "a2 e3 a3 d4 [a3,c#4]@4", T: "d3 a2 d3 f#3 [d3,g#3]@4",
  U: "c#3 g#2 e3 d4 f#2@4", V: "b2 f#3 a3 f#4 e2@2 [f2,c#3]@2", W: "[f#2,c#3] f#3", X: "c#3 g#2 e3 d4 [f#2,e3]@4",
  Y: "g2 d3 g3 a3 b3@2 d4@2", Z: "e2 d3 a3@2 f2 c#3 f3 b3", AA: "f#2 c#3 f#3 g#3 a3 e4 a3 f#3",
  AB: "d3 a2 d3 e3 f#3 a3 f#3 d3", AC: "e2 a2 e3 a3 c#4 e4 c#4 a3", AD: "e2 d3 a3 d3 f2 c#3 f3 g#3",
  AE: "e2 a2 e3 a3 c#4 e4 a3@2", AF: "g#2 e3 g#3 ~ e3@4, ~@3 b3@5", AG: "a2 e3 a3 c#4 c#3 a3 c#4 e4",
  AH: "d3 a2 d3 e3 g#4 c#4 f#4 g#4", AI: "[g#3 [f#3,a3], d3]/2", AJ: "[b2,a3] [c#3,a3]", AK: "[d3,a3] [e3,b3]",
  AL: "a2@2 d3 e3 a3@2 d3@2", AM: "[a2,e3]", AN: "f2@2 c3@2 f3@3 c3", AO: "f2@2 c3@2 f3@3 d3", AP: "e2@2 d3@2 g3@3 b2",
  AQ: "a2@2 e3@2 a3@3 e3", AR: "d3@2 a2@2 d3@3 a2", AS: "g2@2 d3@2 g3@3 d3", AT: "c3@7 g2", AU: "c3@3 g2 c3@2 g2 ~",
  AV: "f2 c3 f3 g3 a3 c4 a3 f3", AW: "f2 d3 f3 g3 b3 d4 b3 g3", AX: "e2 c3 e3 g3 c4 g3 e3 c3",
  AY: "a2 e3 a3 b3 c4 e4 c4 a3", AZ: "d3 a2 d3 e3 f3 a3 f3 d3", BA: "[e2 e3 a3 b3 d4@11 b2]/2", BB: "e2",
  BC: "~@2 b3 a3", BD: "d3@2 a3@2 d4@2 [d3,a3] [e3,b3]", BE: "[f#3,c#4]@2 b3 a3, ~ c#3", BF: "d3 [c#3,a3]",
  BG: "g2 d3 a3 b3", BH: "f#3@2 b3 a3", BI: "d3 a3 c#3@2", BJ: "a2 e3 a3 d4 a3@4", BK: "a2", BL: "b2 c#3",
  BM: "d3 [e3,b3]", BN: "[[a2,e3]@25 ~@7]/4",
})).s("gm_tuba").gain(0.3)

stack(french_horn, french_horn_soft, bass)