Strudelify

pokemon ruby sapphire - champion battle

Jun'ichi Masuda & Shota Kageyama

KeyD♭ majorTempo190 bpm
0:00/0:00
// pokemon ruby sapphire - champion battle — Jun'ichi Masuda & Shota Kageyama
// 190 bpm, 4/4, key Db major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: Transcription provider: pdmx. https://musescore.com/score/2529801; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 121 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(190/4)

// 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 · "B♭ Trumpet 1"
const trumpet = note(`<
  ~@4 A B A C A B A D E F E G E F H@2 I J I K I J L@2 ~@3 M@4 N O N P Q R Q S T U T V W X W Y Z@4 AA@4 E F E G E F H@2 I
  J I K I J L@2 ~@3 M@4 N O N P Q R Q S T U T V W X W Y Z@4 AB@3 AC ~@5 AD@3 AE@6 ~
>`.pickRestart({
  A: "eb4", B: "~ eb4 db4 eb4 gb4 e4 eb4 db4", C: "~ eb4 db4 eb4 gb4 eb4 ab4 e4", D: "eb5", E: "f5",
  F: "~ f5 eb5 f5 ab5 gb5 f5 eb5", G: "~ f5 eb5 f5 ab5 f5 bb5 gb5", H: "[f5@3 gb5]/2", I: "g5",
  J: "~ g5 f5 g5 bb5 ab5 g5 f5", K: "~ g5 f5 g5 bb5 g5 c6 ab5", L: "[g5@3 d6@3 c6@2]/2", M: "~ eb5 ~ eb5 ~ eb5 ~ eb5",
  N: "c5@3 db5@3 gb5 ~", O: "f5@3 db5@3 b4 ~", P: "f5@3 gb5@3 eb5 ~", Q: "f5@3 gb5@3 b5 ~", R: "bb5@3 gb5@3 e5 ~",
  S: "bb5@3 b5@3 db6 ~", T: "c5!2 db5@2 c5!2 eb5@2", U: "c5!2 e5@2 f5 e5 db5 b4", V: "c5!2 e5@2 f5@2 e5@2",
  W: "c6!2 db6@2 c6!2 eb6@2", X: "c6!2 e6@2 f6 e6 db6 b5", Y: "c6!2 e5@2 f5@2 e5@2", Z: "f5/4", AA: "f4/4", AB: "f4/3",
  AC: "f4", AD: "[~@7 eb4@16 ~]/3", AE: "[~ eb4@2 db4@2 eb4@2 gb4@2 e4@2 eb4@2 db4@2 eb4@16 eb5@17]/6",
})).s("gm_trumpet").gain(0.72)

// other · french horn
const french_horn = note(`<
  A B A B C D C E C D C E F@2 G F@3 G H I@2 J I@3 J K L M N O@3 B P Q P Q@2 R Q R ~@4 S T S U V@3 B W X W X F@2 G F@3 G
  H I@2 J I@3 J K L M N O@3 B P Q P Q@2 R Q R ~@4 S T S U V@3 B W X W X Y@2 Z AA AB AC@6 AD@3 ~
>`.pickRestart({
  A: "eb4", B: "db4", C: "b3@4 b3!2 ~ b3 b3@4 b3!2 ~ b3", D: "b3@4 b3!2 ~ b3 b3@4 db4@4",
  E: "b3@4 b3!2 ~ b3 b3@4 bb3@4", F: "f4@3 ~@3 c4@6 eb4@3 ~", G: "f4@3 ~@3 bb4@4 ab4@2 gb4@2 eb4@2", H: "f4@2 c4 gb4",
  I: "g4@3 ~@3 d4@6 f4@3 ~", J: "g4@3 ~@3 c5@4 bb4@2 ab4@2 f4@2", K: "g4@3 d5 eb5@4", L: "b4@3 bb4@3 gb4@2",
  M: "a4@3 g4@3 e4@2", N: "gb4@3 g4@3 e4@2", O: "eb4/3", P: "c4", Q: "f4", R: "bb4", S: "c4!2 db4@2 c4!2 eb4@2",
  T: "c4!2 e4@2 f4 e4 db4 b3", U: "c4!2 e4@2 f4@2 e4@2", V: "f4/3", W: "f3 ab3 bb3 b3 c4 eb4 e4 f4",
  X: "gb4 f4 e4 eb4 c4 b3 bb3 ab3",
  Y: "[f3@2 ab3@2 bb3@2 b3@2 c4@2 ~ eb4@2 e4@2 f4@2 gb4@2 ~ f4@2 e4@3 eb4@2 c4@3 b3@2]/2",
  Z: "~ bb3@3 ab3@2 f3@3 ~ ab3@3 bb3@3", AA: "b3@3 c4@3 eb4@3 e4@3 ~ f4@3", AB: "gb4@4 f4@4 e4@3 eb4@4 c4",
  AC: "[~@3 b3@4 bb3@4 ab3@3 b4@32 eb5@32 b4@18]/6", AD: "[~@7 eb5@17]/3",
})).s("gm_french_horn").gain(0.72)

// other · trombone
const trombone = note(`<
  A B A B C D C D E F G H I@2 J I@3 J K L@2 M L@3 M N O P Q R@3 S T@4 U@4 V W V X V W V X A B A B ~@4 I@2 J I@3 J K L@2
  M L@3 M N O P Q R@3 S T@4 U@4 V W V X V W V X A B A B ~@3 Y ~@5 Z@6 AA@3 ~
>`.pickRestart({
  A: "eb2@3 ~ gb2@3 ~ e2@3 ~ eb2@3 ~", B: "db2@3 ~ e2@3 ~ eb2@3 ~ db2@3 ~", C: "eb3 db3 bb2 ab2", D: "eb2 ab2 bb2 db3",
  E: "eb2 eb3 eb2 db3 eb2 bb2 eb2 ab2", F: "eb2 e2 eb2 ab2 eb2 bb2 eb2 db3", G: "b2@4 b2!2 ~ b2 b2@4 b2!2 ~ b2",
  H: "b2@4 b2!2 ~ b2 b2@4 bb2@4", I: "f2@3 ~@3 c2@6 eb2@3 ~", J: "f2@3 ~@3 bb2@4 ab2@2 gb2@2 eb2@2", K: "f2@2 c2 gb2",
  L: "g2@3 ~@3 d2@6 f2@3 ~", M: "g2@3 ~@3 c3@4 bb2@2 ab2@2 f2@2", N: "g2@3 d3 eb3@4", O: "b3@3 bb3@3 gb3@2",
  P: "a3@3 g3@3 e3@2", Q: "gb3@3 g3@3 e3@2", R: "eb3/3", S: "~@2 eb3 ~ eb3 ~ eb3 ~", T: "c3@4 c3!2 ~ c3 c3@4 c3!2 ~ c3",
  U: "c3 c4 c3 c4 c3 c4 c3 c4", V: "c3 ~ c3 ~@5 c3 ~ c3 ~@5", W: "c3 ~ c3 ~@5 f3@2 e3@2 db3@2 b2@2",
  X: "c3 ~ c3 ~ e3@4 f3@4 e3@4", Y: "f3",
  Z: "[~@7 eb2@2 eb3@2 eb2@2 eb3@2 eb2@2 eb3@2 eb2@2 eb3@2 eb2@2 eb3@2 eb2@2 eb3@2 eb2@2 eb3@2 eb2@2 eb3@2 eb2@2 eb3@2 eb2@2 eb3@2 eb2]/6",
  AA: "[~ eb3@2 eb2@2 eb3@2 eb3@17]/3",
})).s("gm_trombone").gain(0.64)

// bass · tuba
const bass = note(`<
  ~@11 A B C B C D E B C F G F G H I F G J K@2 L@3 M N@8 ~@4 O P O Q R@8 B C B C D E B C F G F G H I F G J K@2 L@3 M N@8
  ~@4 O P O Q R@8 S@2 T U V@2 ~@9
>`.pickRestart({
  A: "~ ab2 bb2 db3", B: "f3 eb3 c3 bb2", C: "f2 bb2 c3 eb3", D: "f2 f3 f2 eb3 f2 c3 f2 bb2",
  E: "f2 bb2 f2 bb2 f2 c3 f2 eb3", F: "g3 f3 d3 c3", G: "g2 bb2 d3 f3", H: "g2 g3 g2 f3 g2 d3 g2 c3",
  I: "g2!3 bb2 g2 d3 g2 f3", J: "eb2@6 eb2@6 eb2@3 ~", K: "eb2@3 eb2@3 eb2@2", L: "eb2/3", M: "~@2 eb3 ~ eb3 ~ eb3 ~",
  N: "c2 c3 c2 c3 c2 c3 c2 c3", O: "c2 ~ c2 ~@5 c2 ~ c2 ~@5", P: "c2 ~ c2 ~@5 f2@2 e2@2 db2@2 b1@2",
  Q: "c2 ~ c2 ~ e2@4 f2@4 e2@4", R: "f2 f3 f2 f3 f2 f3 f2 f3",
  S: "[f2@2 f3@2 f2@2 f3@2 f2@2 ~ f3@2 f2@2 f3@2 f2@2 ~ f3@2 f2@3 f3@2 f2@3 f3@2]/2", T: "~ f2@3 f3@2 f2@3 ~ f3@3 f2@3",
  U: "f3@3 f2@3 f3@3 f2@3 ~ f3@3", V: "[f2@4 f3@4 f2@3 f3@4 f2@4 f3@4 ~@9]/2",
})).s("gm_tuba").gain(0.8)

// bass · tuba · soft notes
const bass_soft = note("<A B A B C D C D C D C E ~@99 F@6 G@3 ~>".pickRestart({
  A: "eb2@3 ~ gb2@3 ~ e2@3 ~ eb2@3 ~", B: "db2@3 ~ e2@3 ~ eb2@3 ~ db2@3 ~", C: "eb3 db3 bb2 ab2", D: "eb2 ab2 bb2 db3",
  E: "eb2 ~@3",
  F: "[~@7 f2@4 f3@3 eb2@4 eb3@4 eb2@4 eb3@4 eb2@4 eb3@4 eb2@4 eb3@4 eb2@4 eb3@4 eb2@4 eb3@4 eb2@4 eb3@4 eb2@4 eb3@4 eb2@4 eb3@4 eb2@4 eb3@4 eb2@2]/6",
  G: "[~ eb3@2 eb2@2 eb3@2 eb2@17]/3",
})).s("gm_tuba").gain(0.4)

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