Strudelify

Megalovania Brass

Toby Fox - Josh Walsh

KeyD minorTempo240 bpm
0:00/0:00
// Megalovania Brass — Toby Fox - Josh Walsh
// 240 bpm, 2/2, key D minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/4252176; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 156 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. 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 · french horn · "Horn in F"
const french_horn = note(`<
  ~@24 A B A B A B A B ~@7 C D B E B F B G B ~ H I@2 J K L@2 ~@9 H I@2 J K L@2 ~@8 M@2 N O P@4 M@2 N O@2 Q R@2 M@2 N O
  S@4 T@2 U V@2 W X@2 ~@44
>`.pickRestart({
  A: "~@2 d5 ~ a4@2 ~ ab4", B: "~ g4 ~ f4@2 d4 f4 g4", C: "e4 ~@3", D: "d4!2 d5 ~ a4@2 ~ ab4",
  E: "c4!2 d5 ~ a4@2 ~ ab4", F: "b3!2 d5 ~ a4@2 ~ ab4", G: "bb3!2 d5 ~ a4@2 ~ ab4", H: "f4 d4 f4 g4 ab4 g4 f4 d4",
  I: "[ab4 g4 f4 d4 f4@4 g4@18 ab4@4 a4@2]/2", J: "c5@2 a4 ab4 g4 f4 d4 e4", K: "f4 g4 a4 c5",
  L: "[db5@2 ab4@2 ab4 g4 f4 g4@9]/2", M: "[bb3@3 f4]/2", N: "e4", O: "d4", P: "f4/4",
  Q: "~ db4 ~ c4 b3 bb3 ~ a3 ab3 g3 ~ gb3 f3 e3 ~ eb3", R: "d3/2",
  S: "[f4@56 f4@2 ~ g4@2 ~ a4@2, ~@58 gb4@2 ~ ab4@2 ~]/4", T: "[bb4@3 f5]/2", U: "e5", V: "d5",
  W: "~ db5 ~ c5 b4 bb4 ~ a4 ab4 g4 ~ gb4 f4 e4 ~ eb4", X: "d4/2",
})).s("gm_french_horn").gain(0.5)

// other · french horn · "Horn in F"
const french_horn_2 = note(`<
  ~@24 A ~ B ~ C ~ D ~@9 E F G F H F I F ~@8 J K L M N O P Q ~@8 J K L M N O P Q R@2 S T U@4 R@2 S T@2 V W@2 R@2 S T U@4
  R@2 S@2 E F X F ~@44
>`.pickRestart({
  A: "d4!2 ~@6", B: "c4!2 ~@6", C: "b3!2 ~@6", D: "bb3!2 ~@6", E: "d4!2 d5 ~ a4@2 ~ ab4", F: "~ g4 ~ f4@2 d4 f4 g4",
  G: "c4!2 d5 ~ a4@2 ~ ab4", H: "b3!2 d5 ~ a4@2 ~ ab4", I: "bb3!2 d5 ~ a4@2 ~ ab4", J: "f3 g3 a3 f4", K: "e4 d4",
  L: "e4 f4", M: "g4 e4", N: "a4", O: "a4 ab4 g4 gb4 f4 e4 eb4 d4", P: "db4", Q: "eb4", R: "[bb3@3 f4]/2", S: "e4",
  T: "d4", U: "f4/4", V: "~ db4 ~ c4 b3 bb3 ~ a3 ab3 g3 ~ gb3 f3 e3 ~ eb3", W: "d3/2", X: "a3!2 d5 ~ a4@2 ~ ab4",
})).s("gm_french_horn").gain(0.4)

// other · trumpet · "B♭ Trumpet"
const trumpet = note(`<
  A ~ B ~ C ~ D ~ A ~ B ~ C ~ D ~ A ~ B ~ C ~ D ~ A ~ B ~ C ~ D E F G H@2 I@2 J@2 K@2 L@2 M N O@2 ~ P Q@2 R S T@2 ~@9 P
  Q@2 R S T@2 ~@30 U V W X Y X Z AA Z AA ~@28 AB X AB X AC X Y X AB X AB X AC X Y X
>`.pickRestart({
  A: "d4!2 ~@6", B: "c4!2 ~@6", C: "b3!2 ~@6", D: "bb3!2 ~@6",
  E: "~@10 [e3,f3] [gb3,g3] [ab3,a3] [bb3,b3] [c4,db4] [d4,eb4,e4]", F: "f4@2 f4 f4@2 f4@2 e4", G: "f4 d4@2 d4@5",
  H: "[f4@4 f4@2 f4@4 g4@4 ab4@4 ~ [g4,ab4] f4@2 d4@2 f4@2 g4@3 ~@3, ~@20 g4 ~@11]/2", // Abmaj7
  I: "[f4@2 f4 f4@2 g4@2 ab4@2 a4@2 c5@2 a4@3]/2", J: "[d5@2 d5@2 d5 a4 d5 c5@9]/2",
  K: "[f4@2 f4 f4@2 f4@2 f4@2 d4@2 d4@5]/2", L: "[f4@2 f4@2 f4 f4@2 d4@2 f4@2 e4@2 d4 c4@2]/2",
  M: "a4 f4 d4 e4 f4 d4 b3 d4", N: "~ d4 b3 d4 b3 g3 b3 g3", O: "[bb3@2 d4 e4 ~ f4 ~ e4@9]/2",
  P: "f4 d4 f4 g4 ab4 g4 f4 d4", Q: "[ab4 g4 f4 d4 f4@4 g4@18 ab4@4 a4@2]/2", R: "c5@2 a4 ab4 g4 f4 d4 e4",
  S: "f4 g4 a4 c5", T: "[db5@2 ab4@2 ab4 g4 f4 g4@9]/2", U: "a4 d5 f5 d5 a5 ~ g5 f5",
  V: "d5@2 c5@3 ~@3 a4@4 bb4@2 c5@2", W: "a4 bb3 d5 ~ a4@2 ~ ab4", X: "~ g4 ~ f4@2 d4 f4 g4", Y: "c4!2 d5 ~ a4@2 ~ ab4",
  Z: "~@2 f5 ~ e5@2 ~ c5", AA: "~ e5 ~ d5@2 g4 a4 c5", AB: "d4!2 d5 ~ a4@2 ~ ab4", AC: "bb3!2 d5 ~ a4@2 ~ ab4",
})).s("gm_trumpet").gain(0.45)

// other · trombone
const trombone = note(`<
  ~@16 A B A B A B A B A B A B A B A B ~@8 C D E F G H I J K L E F C D M N K L E F C D M N K L E F C D M N K L E F C D M
  N O@2 P Q R@4 O@2 P Q@2 S T@2 O@2 P Q U@4 V@2 W X@2 Y Z@2 K AA E F AB AC AD H K AA E F C D C D K AA E F AB AC AD H K
  AA E F C D C D ~@12
>`.pickRestart({
  A: "~@2 d4 ~ a3@2 ~ ab3", B: "~ g3 ~ f3@2 d3 f3 g3", C: "d3@3 ~ d3@3 ~ d3 ~ d3 ~@3 d3@2",
  D: "~@2 d3@3 ~ d3 ~ d3 ~ d3 ~ d3@4", E: "c3@3 ~ c3@3 ~ c3 ~ c3 ~@3 c3@2", F: "~@2 c3@3 ~ c3 ~ c3 ~ c3 ~ c3@4",
  G: "b2@3 ~ b2@3 ~ b2 ~ b2 ~@3 b2@2", H: "~@2 b2@3 ~ b2 ~ b2 ~ b2 ~ b2@4", I: "bb2@3 ~ bb2@3 ~ bb2 ~ bb2 ~@3 c3@2",
  J: "~@2 c3@3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~", K: "bb2@3 ~ bb2@3 ~ bb2 ~ bb2 ~@3 bb2@2",
  L: "~@2 bb2@3 ~ bb2 ~ bb2 ~ bb2 ~ bb2@4", M: "db3@3 ~ db3@3 ~ db3 ~ db3 ~@3 eb3@2",
  N: "~@2 eb3@3 ~ eb3 ~ eb3 ~ eb3 ~ eb3@4", O: "[bb2@3 f3]/2", P: "e3", Q: "d3", R: "f3/4",
  S: "~ db3 ~ c3 b2 bb2 ~ a2 ab2 g2 ~ gb2 f2 e2 ~ eb2", T: "d2/2",
  U: "[f3@56 f3@2 ~ g3@2 ~ a3@2, ~@58 gb3@2 ~ ab3@2 ~]/4", V: "[bb3@3 f4]/2", W: "e4", X: "d4",
  Y: "~ db4 ~ c4 b3 bb3 ~ a3 ab3 g3 ~ gb3 f3 e3 ~ eb3", Z: "d3/2", AA: "~@2 bb2@3 ~ bb2 ~ bb2 ~ bb2 ~ bb3 ~ bb3 ~",
  AB: "d3@3 ~ d3@3 ~ d3 ~ d3 ~@3 db3@2", AC: "~@2 db3@3 ~ db3 ~ db3 ~ db3 ~ db3@4",
  AD: "c3@3 ~ c3@3 ~ c3 ~ c3 ~@3 b2@2",
})).s("gm_trombone").gain(0.45)

// other · trombone
const trombone_2 = note(`<
  ~@16 A ~ B ~ C ~ D ~ A ~ B ~ C ~ D ~ E F G H I J K L ~@8 M N O P Q R S T M N O P Q R S T M N O P Q R S T M N O P Q R S
  T U@2 V W X@4 U@2 V W@2 Y Z@2 U@2 V W X@4 U@2 V W AA AB AC AB AD AE G H AF AG AH J AD AE G H E F E F AD AE G H AF AG
  AH J AD AE G H E F E F ~@12
>`.pickRestart({
  A: "d3!2 ~@6", B: "c3!2 ~@6", C: "b2!2 ~@6", D: "bb2!2 ~@6", E: "d3@3 ~ d3@3 ~ d3 ~ d3 ~@3 d3@2",
  F: "~@2 d3@3 ~ d3 ~ d3 ~ d3 ~ d3@4", G: "c3@3 ~ c3@3 ~ c3 ~ c3 ~@3 c3@2", H: "~@2 c3@3 ~ c3 ~ c3 ~ c3 ~ c3@4",
  I: "b2@3 ~ b2@3 ~ b2 ~ b2 ~@3 b2@2", J: "~@2 b2@3 ~ b2 ~ b2 ~ b2 ~ b2@4", K: "bb2@3 ~ bb2@3 ~ bb2 ~ bb2 ~@3 c3@2",
  L: "~@2 c3@3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~", M: "f2@3 ~ f2@3 ~ f2 ~ f2 ~@3 f2@2", N: "~@2 f2@3 ~ f2 ~ f2 ~ f2 ~ f2@4",
  O: "g2@3 ~ g2@3 ~ g2 ~ g2 ~@3 g2@2", P: "~@2 g2@3 ~ g2 ~ g2 ~ g2 ~ g2@4", Q: "a2@3 ~ a2@3 ~ a2 ~ a2 ~@3 a2@2",
  R: "~@2 a2@3 ~ a2 ~ a2 ~ a2 ~ a2@4", S: "ab2@3 ~ ab2@3 ~ ab2 ~ ab2 ~@3 bb2@2",
  T: "~@2 bb2@3 ~ bb2 ~ bb2 ~ bb2 ~ bb2@4", U: "[bb2@3 f3]/2", V: "e3", W: "d3", X: "f3/4",
  Y: "~ db3 ~ c3 b2 bb2 ~ a2 ab2 g2 ~ gb2 f2 e2 ~ eb2", Z: "d2/2", AA: "d3!2 d4 ~ a3@2 ~ ab3",
  AB: "~ g3 ~ f3@2 d3 f3 g3", AC: "a2!2 d4 ~ a3@2 ~ ab3", AD: "bb2@3 ~ bb2@3 ~ bb2 ~ bb2 ~@3 bb2@2",
  AE: "~@2 bb2@3 ~ bb2 ~ bb2 ~ bb2 ~ bb3 ~ bb3 ~", AF: "d3@3 ~ d3@3 ~ d3 ~ d3 ~@3 db3@2",
  AG: "~@2 db3@3 ~ db3 ~ db3 ~ db3 ~ db3@4", AH: "c3@3 ~ c3@3 ~ c3 ~ c3 ~@3 b2@2",
})).s("gm_trombone").gain(0.46)

// bass · trombone · "Bass Trombone"
const bass = note(`<
  ~@8 A B C D E F G H A B C D E F G H A B C D E F G H I J K L M N O P ~@9 Q R@2 S T U@2 V W X W Y Z AA AB ~ Q R@2 S T
  U@2 V W X W Y Z AA AB AC AD C D E F E F AC AD C D A B A B AC AD C D E F E F AC AD C D A B A B AE AF K L AG AH AI N AE
  AF K L I J I J AE AF K L AG AH AI N AE AF K L I J I J ~@12
>`.pickRestart({
  A: "d3@3 ~ d3@3 ~ d3 ~ d3 ~@3 d3@2", B: "~@2 d3@3 ~ d3 ~ d3 ~ d3 ~ d3@4", C: "c3@3 ~ c3@3 ~ c3 ~ c3 ~@3 c3@2",
  D: "~@2 c3@3 ~ c3 ~ c3 ~ c3 ~ c3@4", E: "b2@3 ~ b2@3 ~ b2 ~ b2 ~@3 b2@2", F: "~@2 b2@3 ~ b2 ~ b2 ~ b2 ~ b2@4",
  G: "bb2@3 ~ bb2@3 ~ bb2 ~ bb2 ~@3 c3@2", H: "~@2 c3@3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~",
  I: "d2@3 ~ d2@3 ~ d2 ~ d2 ~@3 d2@2", J: "~@2 d2@3 ~ d2 ~ d2 ~ d2 ~ d2@4", K: "c2@3 ~ c2@3 ~ c2 ~ c2 ~@3 c2@2",
  L: "~@2 c2@3 ~ c2 ~ c2 ~ c2 ~ c2@4", M: "b1@3 ~ b1@3 ~ b1 ~ b1 ~@3 b1@2", N: "~@2 b1@3 ~ b1 ~ b1 ~ b1 ~ b1@4",
  O: "bb1@3 ~ bb1@3 ~ bb1 ~ bb1 ~@3 c2@2", P: "~@2 c2@3 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~", Q: "d3 bb2 d3 e3 f3 e3 d3 bb2",
  R: "[f3 e3 d3 bb2 d3@4 e3@18 ab3@4 a3@2]/2", S: "c4@2 a3 ab3 g3 f3 d3 e3", T: "f3 g3 a3 c4",
  U: "[db4@2 ab3@2 ab3 g3 f3 g3@9]/2", V: "d3 e3 f3 d4", W: "c4 a3", X: "g3 a3", Y: "d4",
  Z: "d4 db4 c4 b3 bb3 a3 ab3 g3", AA: "ab3", AB: "bb3", AC: "bb2@3 ~ bb2@3 ~ bb2 ~ bb2 ~@3 bb2@2",
  AD: "~@2 bb2@3 ~ bb2 ~ bb2 ~ bb2 ~ bb2@4", AE: "bb1@3 ~ bb1@3 ~ bb1 ~ bb1 ~@3 bb1@2",
  AF: "~@2 bb1@3 ~ bb1 ~ bb1 ~ bb1 ~ bb1@4", AG: "d2@3 ~ d2@3 ~ d2 ~ d2 ~@3 db2@2",
  AH: "~@2 db2@3 ~ db2 ~ db2 ~ db2 ~ db2@4", AI: "c2@3 ~ c2@3 ~ c2 ~ c2 ~@3 b1@2",
})).s("gm_trombone").gain(0.45)

// bass · tuba
const bass_2 = note(`<
  ~@8 A@2 B@2 C@2 D@2 E F G H I J K L E F G H I J K L ~@8 E F G H I J K L M N G H E F O P M N G H E F O P M N G H E F O
  P M N G H E F O P M N G H I J I J M N G H E F E F M N G H I J I J M N G H E F E F M N G H Q R S J M N G H E F E F M N
  G H Q R S J M N G H E F E F ~@12
>`.pickRestart({
  A: "d2/2", B: "c2/2", C: "b1/2", D: "[bb1@7 c2@9]/2", E: "d2@3 ~ d2@3 ~ d2 ~ d2 ~@3 d2@2",
  F: "~@2 d2@3 ~ d2 ~ d2 ~ d2 ~ d2@4", G: "c2@3 ~ c2@3 ~ c2 ~ c2 ~@3 c2@2", H: "~@2 c2@3 ~ c2 ~ c2 ~ c2 ~ c2@4",
  I: "b1@3 ~ b1@3 ~ b1 ~ b1 ~@3 b1@2", J: "~@2 b1@3 ~ b1 ~ b1 ~ b1 ~ b1@4", K: "bb1@3 ~ bb1@3 ~ bb1 ~ bb1 ~@3 c2@2",
  L: "~@2 c2@3 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~", M: "bb1@3 ~ bb1@3 ~ bb1 ~ bb1 ~@3 bb1@2",
  N: "~@2 bb1@3 ~ bb1 ~ bb1 ~ bb1 ~ bb1@4", O: "db2@3 ~ db2@3 ~ db2 ~ db2 ~@3 eb2@2",
  P: "~@2 eb2@3 ~ eb2 ~ eb2 ~ eb2 ~ eb2@4", Q: "d2@3 ~ d2@3 ~ d2 ~ d2 ~@3 db2@2",
  R: "~@2 db2@3 ~ db2 ~ db2 ~ db2 ~ db2@4", S: "c2@3 ~ c2@3 ~ c2 ~ c2 ~@3 b1@2",
})).s("gm_tuba").gain(0.33)

// drums · kick
const kick = s("bd").struct(`<
  ~@24 A B A B A B A C D@7 E D@8 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B
  A B A B A B A B A B A B A B A B E ~@3 A B A B A B A B A B A B A B A F A B A B A B A B A B A B A B A F ~@12
>`.pickRestart({
  A: "x ~ x ~ x ~@2 x", B: "~ x ~ x ~ x ~@2", C: "~@7 x", D: "x!2", E: "x", F: "~ x ~@6",
})).gain(0.35)

// drums · rim
const rim = s("rim").struct("<~@31 [~ x!3] [x!2]!7 ~@72 [~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x] ~@44>").gain(0.35)

// drums · snare
const snare = s("sd").struct(`<
  ~@24 A@7 ~@8 B ~@8 A@32 C D C D C D C D C D C D C D C B C D C D C D C D C D C D ~@3 E A@14 F ~ A@14 F ~@13
>`.pickRestart({
  A: "~ x ~ x", B: "~ x!7", C: "~ x", D: "~@2 x!2", E: "~ x ~ x ~ x ~ x ~@8", F: "x!3 ~",
})).gain(0.35)

// drums · low tom
const low_tom = s("lt").struct("<~@23 [~@12 x!4] ~@7 [~@14 x!2] ~@124>").gain(0.35)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@16 A@4 B@3 ~ C@7 A ~@8 D B@6 A ~@32 E F E F E F E F E F E F E F E ~ E F E F E F E F E F E F A ~@3 C@15 ~ C@15 ~@13
>`.pickRestart({
  A: "x", B: "x!2", C: "x!8", D: "~ x", E: "x!2 ~ x", F: "x!2 ~@2",
})).gain(0.35)

// drums · mid tom
const mid_tom = s("mt").struct("<~@23 A ~@7 B ~@15 C ~@79 C ~@15 C ~@12>".pickRestart({
  A: "~@4 x!8 ~@4", B: "~@10 x!4 ~@2", C: "~@4 x!4",
})).gain(0.35)

// drums · high tom
const high_tom = s("ht").struct("<~@23 A ~@7 B ~@15 C ~@79 D ~@15 D ~@12>".pickRestart({
  A: "x!4 ~@12", B: "~@8 x!2 ~@6", C: "~ x!3 ~@4", D: "~@2 x!2 ~@4",
})).gain(0.35)

// drums · crash
const crash = s("cr").struct("<~@23 A B ~ B ~ B ~ B ~@9 B ~@67 B ~ C D B ~@15 B ~@27>".pickRestart({
  A: "~@4 x!12", B: "x", C: "~@14 x!2", D: "x!3 ~ x!12",
})).gain(0.35)

// drums · crash · soft notes
const crash_soft = s("cr").struct("<~@110 [~@4 x!10 ~@2] ~@45>").gain(0.17)

// drums · ride
const ride = s("rd").struct("<~@15 [~@4 x!4] x ~@31 [x!4]!32 ~@76>").gain(0.35)

// drums · cowbell
const cowbell = s("cb").struct("<~@23 x ~@84 [x ~ x ~ x ~ x!2] [~ x ~ x ~ x ~@2] [x ~ x ~ x ~ x!2] ~@45>").gain(0.35)

stack(
  french_horn, french_horn_2, trumpet, trombone, trombone_2, bass, bass_2, kick, rim, snare, low_tom, hihat, mid_tom,
  high_tom, crash, crash_soft, ride, cowbell
)