Strudelify

Hogwarts' March

Patrick Doyle

KeyG majorTempo240 bpm
0:00/0:00
// Hogwarts' March — Patrick Doyle
// 240 bpm, 2/2, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5262275; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 132 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(240/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.

// other · trumpet · "Trompete in B"
const trumpet = note(`<
  A B@2 C D E F G H I J K D E F G H I L M N O P ~ Q R S T N O P ~ Q U V W D E F G H I J K D E F G H I L M ~@16 X Y Z
  AA@3 AB@2 ~@4 AC AD AE@2 ~@16 X Y Z AA@3 AB@2 ~@4 AC AD AF@2 D E F G H I J K D E F G H I L M
>`.pickRestart({
  A: "c5@12 c5 ~ c5 ~", B: "c5 ~ c5 ~ c5 ~ c5 ~", C: "c5 ~ c5 ~ c5 ~ c5 ~ c5 ~ c5 ~ c5 ~ c5 ~", D: "c5@6 c5!2",
  E: "c5!2", F: "d5@6 e5 f5", G: "c5 f4", H: "a#4@6 c5 a#4", I: "a4 c5 e5 f5", J: "g5@6 f5 e5",
  K: "d5@2 c5@2 g5 f5 e5 d5", L: "g5@4 ~@4 e5 [e5,f5]!3 d5@2 e5@2, ~@12 f5 ~@3", M: "f5 ~@3", N: "~@2 e5!2 e5@2 e5@2",
  O: "e5!2 f5 g5", P: "f5@3 e5 d5@2 a4@2", Q: "~@2 d5!2 d5@2 d5@2", R: "d5!2 e5 f5", S: "e5@3 d5 c5@2 g4@2",
  T: "g4 a4 b4 c5 d5 e5 f5 g5", U: "d5!2 ~@2", V: "g5 f5 e5 d5 c5 a#4 a4 g4", W: "a4 a#4 c5 d5 c5 a#4 a4 a#4", X: "d4",
  Y: "g4@5 a4@5 ~ b4@5", Z: "a4", AA: "[d5@6 c5@5 d5]/3", AB: "[c5 b4 g4@5 ~]/2", AC: "g5 e5", AD: "a5@5 g5@5 ~ e5@5",
  AE: "[d5@7 ~]/2", AF: "[d5@6 d5 c#5]/2",
})).s("gm_trumpet").gain(0.3)

// other · trumpet · "Trompete in B"
const trumpet_2 = note(`<
  A B C D E F G H I J K L M F N H I J O P Q@2 R@2 S@2 T@2 Q@2 R@2 S@2 U V E F G H I J K L M F N H I J O P W X W X Y Z W
  X Y@2 Z Y Z Y AA AB X W X W AC T X W Z AD Z AD AE AF AG AH W X W X Y Z W X Y@2 Z Y Z Y AA AB X W X W AC T X W Z AD Z
  AD AE AF AG AI E F G H I J K L M F N H I J O P
>`.pickRestart({
  A: "c5@12 c5 ~ c5 ~", B: "a#4@12 a#4 ~ a#4 ~", C: "g4@12 g4 ~ g4 ~", D: "e4@4 d4 ~ c4 ~", E: "~@2 f4 ~@3 f4 ~",
  F: "e4!2", G: "~@2 a#3 ~@3 a#3 ~", H: "f4 c4", I: "a#3 c4", J: "c4 a3", K: "a#3 d4", L: "c4@3 d4 e4@4",
  M: "~ f4 ~ f4", N: "~ a#3 ~ a#3", O: "a#3 ~ c4@2", P: "c4 ~@3", Q: "~@2 c#4 ~@3 c#4 ~", R: "~@2 a3 ~@3 a3 ~",
  S: "~@2 b3 ~@3 b3 ~", T: "~@2 c4 ~@3 c4 ~", U: "c4 ~", V: "a#3 ~", W: "~@2 d4 ~@3 d4 ~", X: "~@2 d4!2 d4@2 d4@2",
  Y: "~@2 e4 ~@3 e4 ~", Z: "~@2 e4!2 e4@2 e4@2", AA: "~@2 f#4!2 f#4@2 f#4@2", AB: "~@2 f#4 ~@3 f#4 ~",
  AC: "~@2 c4!2 c4@2 c4@2", AD: "~@2 e4 ~@3 g4 ~", AE: "~@2 g4!2 g4@2 g4@2", AF: "~@2 g4 ~@3 g4 ~",
  AG: "~@2 a4!2 a4@2 a4@2", AH: "~@2 a4 ~@3 a4 ~", AI: "a4 ~@7",
})).s("gm_trumpet").gain(0.3)

// other · french horn · "Horn in F"
const french_horn = note(`<
  ~@4 A B C D E F G H F B C I E F J K B@2 F C@3 B@4 F C@3 L@2 A B C D E F G H F B C I E F J K M N O P M N M N M@2 N Q R
  Q R Q N M P O S B N M N T N U S V P W M N O P M N M N M@2 N Q R Q R Q N M P O S B N M N T N U S V P X A B C D E F G H
  F B C I E F J K
>`.pickRestart({
  A: "~@2 c4 ~@3 f4 ~", B: "~@2 e4 ~@3 e4 ~", C: "~@2 d4 ~@3 d4 ~", D: "~@2 c4 ~@3 c4 ~", E: "~@2 d4 ~@3 e4 ~",
  F: "~@2 f4 ~@3 f4 ~", G: "~@2 f4 ~@3 g4 ~", H: "~@2 e4 ~@3 g4 ~", I: "~@2 c4 ~@3 d4 ~",
  J: "d4@4 ~@4 e4 [e4,f4]!3 d4@2 e4@2, ~@12 f4 ~@3", K: "f4 ~ f3 ~", L: "e4 ~", M: "~@2 g4 ~@3 g4 ~",
  N: "~@2 g4!2 g4@2 g4@2", O: "~@2 f#4 ~@3 f#4 ~", P: "~@2 f#4!2 f#4@2 f#4@2", Q: "~@2 a4 ~@3 a4 ~",
  R: "~@2 a4!2 a4@2 a4@2", S: "~@2 e4!2 e4@2 e4@2", T: "~ g4 ~ g4", U: "~ a4 ~ a4", V: "~ e4 ~ e4", W: "~ f#4 ~ f#4",
  X: "f#4 ~@7",
})).s("gm_french_horn").gain(0.25)

// other · trombone · "Posaune"
const trombone = note(`<
  ~@4 A B C@2 D E F G E B C@2 D E H I ~@2 J K L M N O P@2 Q K M@2 R@2 A B C@2 D E F G E B C@2 D E H I S T U V W@2 X@2 Y
  T U Z U AA AB AC ~@8 AD AE AF U AG AH AI@2 S T U V W@2 X@2 Y T U Z U AA AB AC ~@8 AD AE AF U AG AH AJ@2 A B C@2 D E F
  G E B C@2 D E H I
>`.pickRestart({
  A: "~@2 f3 ~@3 a3 ~", B: "~@2 g3 ~@3 g3 ~", C: "~@2 f3 ~@3 f3 ~", D: "~@2 f3 ~@3 g3 ~", E: "~@2 a3 ~@3 a3 ~",
  F: "~@2 a3 ~@3 a#3 ~", G: "~@2 g3 ~@3 a#3 ~", H: "g3 ~@3 a#3@4", I: "a3 ~ f3 ~", J: "~@2 d3 e3",
  K: "f3@3 e3 d3@2 a2@2", L: "g2 d3", M: "g3 d3", N: "g2 c3 d3 e3", O: "e3@3 d3 c3@2 g2@2", P: "a2 e3",
  Q: "a2 d3 e3 f3", R: "c3 ~", S: "d3", T: "g3@5 a3@5 ~ b3@5", U: "a3", V: "d4", W: "[d4@2 c4@5 d4]/2",
  X: "[c4 b3 g3@5 ~]/2", Y: "b3", Z: "e3", AA: "e3@5 f#3@5 ~ g3@5", AB: "f#3@3 g3", AC: "a3 d3", AD: "g4",
  AE: "g4@5 f#4@5 ~ e4@5", AF: "e4", AG: "g4 e4", AH: "a4@5 g4@5 ~ e4@5", AI: "[d4@7 ~]/2", AJ: "[d4@5 ~@3]/2",
})).s("gm_trombone").gain(0.25)

// bass · tuba
const bass = note(`<
  ~@4 A B C D E F G H A B C I E F J K L@2 M N O P Q R S@2 T N P@2 U V A B C D E F G H A B C I E F J K W@2 X@2 Y Z AA AB
  Y AC AD AE L AF AG AH AI AJ AG AK AL AM AN W Y AC AD AE Y AJ AO AP W@2 X@2 Y Z AA AB Y AC AD AE L AF AG AH AI AJ AG AK
  AL AM AN W Y AC AD AE Y AJ AO AQ A B C D E F G H A B C I E F J K
>`.pickRestart({
  A: "~ f2 a2 c3", B: "e2 g2 c3@2", C: "a#2@2 g2 d3", D: "c3@2 e2 d2", E: "~ g2 a#2 c3", F: "c3 a2 g2 f2",
  G: "g2 a2 a#2 d3", H: "c3 g2 c2@2", I: "c3 f2 e2 d2", J: "a#2 ~ c3 c2", K: "f2 ~@3", L: "a2 ~ e2 ~", M: "a2@2 d2 e2",
  N: "f2@3 e2 d2@2 a1@2", O: "g1 d2", P: "g2 d2", Q: "g1 c2 d2 e2", R: "e2@3 d2 c2@2 g1@2", S: "a1 e2",
  T: "a1 d2 e2 f2", U: "c3 ~", V: "c2 ~", W: "g2 ~ d2 ~", X: "a2 ~ d2 ~", Y: "e2 ~ g2 ~", Z: "c3 ~ g2 e2",
  AA: "g2 ~ g2 d2", AB: "g1 ~@3", AC: "b2 ~ g2 e2", AD: "a1 ~ c#2 e2", AE: "a2 ~@3", AF: "a2 ~ f#2 a2",
  AG: "d3 ~ a2 f#2", AH: "d3 c3 b2 a2", AI: "g2 ~ d2 g2", AJ: "b2 ~ g2 b2", AK: "d2 ~", AL: "c2 ~ e2 g2",
  AM: "c3 ~ d3 f#3", AN: "a3 g3 d3 b2", AO: "d2 ~ a2 ~", AP: "d3 ~", AQ: "d3 ~@3",
})).s("gm_tuba").gain(0.3)

stack(trumpet, trumpet_2, french_horn, trombone, bass)