Strudelify
KeyF majorTempo97 bpm
0:00/0:00
// Megaman x5 Ending Theme — Naoto Tanaka Naoya Kamisaka and Takuya Miyawaki
// 97 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 1 "Sintetizador de efectos, Raindrop Piano" named as a piano, played on piano (its pad sweep patch is not one)
// note: Transcription provider: pdmx. https://musescore.com/score/5891128; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 66 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(97/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 · piano · "Sintetizador de efectos, Raindrop Piano"
const piano = note("<A B C D E F G H ~@9 I J I J I J I J ~@21 I J I J I J I J ~@12>".pickRestart({
  A: "bb6 e6 g6 db6 bb6 e6 g6 db6", B: "a6 e6 f6 d6 a6 e6 f6 d6", C: "g6 d6 e6 db6 g6 d6 e6 db6",
  D: "f6 d6 e6 a5 f6 d6 e6 a5", E: "e6 bb5 d6 g5 e6 bb5 d6 g5", F: "e6 a5 d6 f5 e6 a5 d6 f5",
  G: "d6 g5 bb5 e5 db6 e5 g5 bb5", H: "g5 gb5 e5 gb5 d5@4", I: "a6 e6 d6 g6 a6 e6 d6 g6", J: "e6 a5 d6 g5 e6 a5 d6 g5",
})).s("gm_piano").gain(0.2)

// other · synth brass 2 · "Sintetizador de efectos, Sweeps"
const synth_brass_2 = note(`<
  A@2 B C D E F G ~ H I H I H I H I H I H I H I H I ~@13 H I H I H I H I H I H I H I H I ~@12
>`.pickRestart({
  A: "[[bb4,bb5] [a4,a5], d5]/2", B: "d5 db5, [g4,g5]", C: "e5 d5, [f4,a5]", D: "f5 e5, [bb4,bb5]",
  E: "e5 d5, [d4,f4,a4]", F: "d5 db5, [db4,e4,a4]", G: "g4 gb4, [d4,a4,d5]", H: "a4 f5", I: "e5 d5",
})).s("gm_synth_brass_2").gain(0.3)

// chords · timpani · "Timbales, Timpani"
const timpani = note(`<
  ~@8 A@2 ~@2 B@2 ~@2 B@2 ~@2 B@2 ~@2 C@2 ~@11 A@2 ~@2 B@2 ~@2 B@2 ~@2 B@2 ~@2 C@2 ~@11
>`.pickRestart({
  A: "[[eb2,d3]@3 [eb2,d3]@3 [eb2,d3]@3 [eb2,d3]@3 [eb2,d3]@3 [eb2,d3]@3 ~@14]/2", // Ebmaj7
  B: "[~@6 [eb2,d3]@3 [eb2,d3]@3 [eb2,d3]@3 [eb2,d3]@3 ~@14]/2", // Ebmaj7
  C: "[~@6 [bb2,a3]@3 [bb2,a3]@3 [bb2,a3]@3 [bb2,a3]@3 ~@14]/2", // Bbmaj7
})).s("gm_timpani").gain(0.15)

// chords · string ensemble 1 · "Violas, Strings"
const string_ensemble_1 = note("<~@8 A ~@7 A ~@16 B C D E A ~@7 A ~@16 B C D E>".pickRestart({
  A: "~@2 [c4,e4] [d4,f4] [c4,e4] [d4,f4] [c4,e4] [d4,f4] [c4,e4] [d4,f4] [c4,e4] [d4,f4] [c4,e4] [d4,f4] [c4,e4] [d4,f4]", // C Dm C Dm C Dm C Dm …
  B: "[d5,a5]@2 [d5,g5] ~ [d5,f5] ~ [c5,e5]@3 ~ [g4,c5]@6", C: "[gb4,a4]@12 d4 e4 f4 g4",
  D: "[d4,a4]@2 [d4,g4] ~ [d4,f4] ~ [c4,e4]@3 ~ [g3,c4]@6", E: "[gb3,a3]@3 ~",
})).s("gm_string_ensemble_1").gain(0.21)

// chords · string ensemble 1 · "Violas, Strings" · soft notes
const string_ensemble_1_soft = note("<~@8 A ~@7 A ~@17 B ~ C A ~@7 A ~@17 B ~ C>".pickRestart({
  A: "[c4,e4] [d4,f4] ~@14", B: "d4@3 ~", C: "db3@3 ~",
})).s("gm_string_ensemble_1").gain(0.13)

// chords · piano · "Piano, Grand Piano"
const piano_2 = note(`<
  ~@9 A B C D E B C F E B C D E B C F G H I J K L M N O@2 P@2 ~ A Q@2 R@2 Q@2 S@2 Q@2 R@2 Q@2 T@2 U@6 V@5
>`.pickRestart({
  A: "~@3 a3 ~ d4 ~ d3 [f3,a4]@2 ~ g4@2 ~ d3@2, [bb2,f3] ~, [a3,bb3]@4 bb3@4 ~@2 g3@3 ~@3, ~@2 d3@4 f4@3 ~@4 f4@3", // F Bb5 Bbmaj7
  B: "~@3 f4 ~@6 d3@2 g3 a3 d3@2, [f3,a3]@11 ~@5, [c4,e4]@2 e4 g3@3 ~@2, ~ a2@4 ~@3, ~@5 c4@5 ~@6", // F C
  C: "d3 ~@2 a3 ~@3 d3 [bb3,a4]@2 ~ g4@2 ~ d3 a2, f3@8 ~@2 g3@3 ~@3, [a3,bb3] bb3 ~@2, ~@2 d3@4 f4@3 ~@4 f4@3, ~@5 d4@2 ~@9", // Bbmaj7
  D: "~@4 c3@2 d3@5 ~ g3 ~ d3@2, a3@12 ~ a3@3, d3@6 ~@5 d3@3 ~@2, [c4,e4]@3 [g4,c5]@3 [e4,a4]@9 ~, ~ a2 ~@6", // C C5 A5
  E: "~@3 a3 ~@3 d3 [f3,a4]@2 ~ g4@2 ~ d3@2, [bb2,f3] ~, [a3,bb3]@4 bb3@4 ~@2 g3@3 ~@3, ~@2 d3@3 d4@3 ~@8, ~@6 f4@3 ~@4 f4@3", // F Bb5 Bbmaj7
  F: "~ a2 [c3,g4,c5]@2 [d3,e4,a4]@4, a3@15 ~, d3 ~, [c4,e4] ~@3", // C5 Dsus2 C
  G: "[bb3,d4]@2 ~ [f3,bb3,d4]@4 ~ [bb3,d4,f4]@8, f4 ~, ~ bb2@6 ~", // Bb
  H: "[c4,e4,a4] ~@2 [c4,e4,a4]@2 [c4,e4,a4]@3 [c4,e4,g4]@8, c3@15 ~", // Am C
  I: "[e4,g4,c5] ~@2 [e4,g4,c5]@2 [e4,g4,c5]@2 a3 [a3,d4,a4]@8, d3@15 ~", // C D5
  J: "[e4,g4,c5]@3 [e4,g4,c5] e4 d4 e4 d4, d3@15 ~, ~@2 a4!2", // C
  K: "bb2 ~@2 a4@3 ~@2 [bb3,d4,g4]@8, f4 ~, [a4,bb4]@4 ~@2 bb4@3 ~@7, ~@2 bb2@4 ~ bb2@8 ~", // Gm Bbmaj7
  L: "a2 ~@2 a4@3 ~@2 [e4,g4,c5]@4 [c4,e4,g4]@3 [c4,e4], e4 ~, [a4,bb4]@4 ~@2 bb4@3 ~@7, ~@2 a2@4 ~ a2@8 ~", // C Bbmaj7
  M: "~@2 c4 d4@2 c4 d4@2 [c4,f4,a4]@4 [c4,e4,a4]@4, [d4,a4] ~@3", // F Am D5
  N: "~@2 a3@2 d4 e4 f4@2 g4@4 d4 e4 f4 g4, [c4,a4] ~@3", // F
  O: "[a4@2 g4 ~ f4@2 [c4,e4]@4 ~@6 d3@2 ~@6 d4@4 ~ e4 f4 g4, [bb2,a3,d4]@6 [c2,g3]@9 [d2,c3]@16 ~, ~@10 c4@9 d3 e3@2 a3@9 ~, ~@15 a2 [a3,d4]@2 a2@10 d4@4, ~@8 gb3@7 ~]/2", // C Bbmaj7 C5 D7 D5
  P: "[a4@2 g4 ~ f4@2 [c4,e4]@4 ~@6 d3@2 ~@6 d4@8, [bb2,a3,d4]@6 [c2,g3]@9 [d2,c3]@16 ~, ~@10 c4@9 d3 e3@2 a3@9 ~, ~@15 a2 [a3,d4]@2 a2@12 ~@2, ~@8 gb3@7 ~]/2", // C Bbmaj7 C5 D7 D5
  Q: "[~@3 f4 e4 ~@5 d3@2 g3 a3 d3@2 d3 ~@2 a3 ~ d4 ~ d3 bb3 ~@2 g4@2 ~ d3 a2, [f3,a3]@9 ~@7 f3@8 ~@2 g3@3 ~@3, [c4,e4]@4 ~ c4@26 ~, ~@2 a2@8 ~@8 d3@4 f4@3 ~@4 f4@3, ~@3 g3@3 ~@2 [a3,bb3]@2 bb3@2 a4@2 ~@2]/2", // F C Bbmaj7
  R: "[e4@2 ~@2 c3@2 d3@5 ~ g3 ~ d3@2 ~@3 a3 ~ d4 ~ d3 f3 ~@2 g4@2 ~ d3@2, c4@15 ~, a3@13 a3@3 [a3,bb3]@4 bb3@4 a4@4 ~@4, d3@6 ~@5 d3@3 ~@2 [bb2,f3]@8 ~@2 g3@3 ~@3, ~@2 a2 [g4,c5]@3 [e4,a4]@9 ~@3 d3@4 f4@3 ~@4 f4@3]/2", // Bbmaj7 Bb5 C5 A5
  S: "[~@2 a2@2 [c3,g4,c5]@4 [d3,e4,a4]@8 ~@3 a3 ~ d4 ~ d3 f3 ~@2 g4@2 ~ d3@2, c4@15 ~, a3@15 ~ [a3,bb3]@4 bb3@4 a4@4 ~@4, d3@8 ~@8 [bb2,f3]@8 ~@2 g3@3 ~@3, e4@4 ~@14 d3@4 f4@3 ~@4 f4@3]/2", // C5 Dsus2 Bbmaj7 Bb5
  T: "[~@2 a2@2 [c3,g4,c5]@4 [d3,e4,a4]@8 [bb3,d4]@2 ~ [f3,bb3,d4]@4 ~ [bb3,d4,f4]@8, c4@15 ~, a3@15 ~@17, d3@4 ~@5 bb2@6 ~, e4 ~@3 f4@2 ~@2]/2", // C5 Dsus2 Bb
  U: "[[c4,e4,a4] ~@2 [c4,e4,a4]@2 [c4,e4,a4]@3 [e4,g4]@8 [e4,g4,c5] ~@2 [e4,g4,c5]@2 [e4,g4,c5]@2 a3 [a3,d4,a4]@8 [e4,g4,c5]@6 [e4,g4,c5]@2 e4@2 d4@2 e4@2 d4@2 bb2 ~@2 a4@3 ~@2 [bb3,d4,g4]@8 a2@2 ~ a4@3 ~@2 [e4,g4,c5]@4 [c4,e4,g4]@3 e4 ~@3 d4@2 ~ d4@2 [c4,f4,a4]@4 [c4,e4,a4]@4, c3@15 ~ d3@15 ~ d3@15 ~ [a4,bb4]@4 ~@2 bb4@3 ~@7 [a4,bb4]@4 ~@2 bb4@3 ~@23, ~@8 c4@65 ~@6 c4@3 c4@3 c4@3 ~@8, ~@10 a4!2 f4@2 ~@2 e4@2 ~@2 [d4,a4] ~@3, ~@50 bb2@4 ~ bb2@8 ~@3 a2@3 ~@2 a2@8 ~@17]/6", // Am Em C D5 C Gm C F …
  V: "[~@2 a3@2 d4 e4 f4@2 g4@4 d4 e4 f4 g4 a4@2 g4@2 f4@2 [c4,e4]@4 ~@6 d3@2 ~@6 d4@4 ~ e4 f4 g4 a4@2 g4 ~ f4@2 [c4,e4]@4 c4@5 ~ d3@2 ~@6 d4@8, c4@21 ~ [c2,g3]@9 [d2,c3]@16 ~ [bb2,a3,d4]@6 [c2,g3]@9 [d2,c3]@16 ~, a4@4 ~@12 [bb2,a3]@8 ~@7 a2 [a3,d4]@2 a2 d3 e3@2 a3@9 ~@16 a2@3 a2@2 e3@2 a3@9 ~, ~@8 d4@3 ~@2 c4@14 ~@5 gb3@7 ~, ~@32 gb3@12 d4@4 ~@16 [a3,d4]@3 d3@11 ~@2]/5", // C C5 D7 Bbmaj7 C5 D7 Bbmaj7 D5
})).s("gm_piano").gain(0.26)

// chords · xylophone · "Xilófono, Xylophone"
const xylophone = note("<~@17 A B C D A B C D E F G@3 H I@2 ~@13 A B C D A B C D E F G@3 H I@2 ~@4>".pickRestart({
  A: "f5@2 a4 f5@2 a4 c5 a4 d5 ~ a4@2 [e5,g5] ~ [d5,f5] ~, d5 ~@2 d5 ~@2 e5@2 f5@4 ~@4", // Em Dm
  B: "e5@2 a4 e5@3 ~ a4 e5@2 g4 a4 g4 ~ [a4,c5] g4, c5 ~@2 c5 ~@4 c5 ~@2 c5@3 ~@2", // Am
  C: "f5@2 a4 f5@2 a4 c5 a4 d5 ~ a4@2 [d5,f5] ~ [f5,a5] a4, d5 ~@2 d5 ~@2 e5@2 f5@4 ~@4", // Dm F
  D: "f5@2 a4 f5@2 a4 c5 a4 e5@2 a4 f5@2 a4 c5 a4, d5 ~@2 d5 ~@2 e5@2 c5 ~@2 d5 ~@2 e5@2",
  E: "f5@2 bb4 f5@2 bb4 c5 bb4 [d5,f5] ~ [e5,g5] ~ [f5,a5] ~ [e5,g5] ~, d5 ~@2 d5 ~@2 e5@2 ~@8", // Dm Em F Em
  F: "c5 ~ [e5,g5] ~ [f5,a5] ~ [e5,g5] [f5,a5] ~ [f5,a5] [e5,g5] ~ [f5,a5] ~ [a5,c6] ~", // Em F Em F Em F Am
  G: "[f5,a5] ~ d5 ~ [e5,g5] ~ a4 [f5,a5] ~ [f5,a5] [e5,g5] ~ [f5,a5] ~ [e5,g5] ~", // F Em F Em F Em
  H: "[e5,a5] ~ a4 ~ [e5,g5] ~ a4 [e5,a5] ~ [e5,a5] [d5,g5] ~ [e5,a5] ~ [d5,g5] ~", // A5 Em A5 G5 A5 G5
  I: "[f5,a5] ~ [e5,g5] ~ [f5,a5] ~ [e5,g5] [f5,a5] ~ [f5,a5] [e5,g5] ~ [f5,a5] ~ [e5,g5] ~", // F Em F Em F Em F Em
})).s("gm_xylophone").gain(0.21)

// bass · fretless bass · "Bajo Eléctrico sin trastes, Silent Bass"
const bass = note("<~@17 A B A B A B A B A C B@2 A D B E ~@13 A B A B A B A B A C B@2 A D B E ~@4>".pickRestart({
  A: "bb1 ~ bb1@4 bb1@2 bb1 ~ bb1 ~ bb1 ~ bb1 ~", B: "d2 ~ d2@4 d2@2 d2 ~ d2 ~ d2 ~ d2 ~",
  C: "c2 ~ c2@4 c2@2 c2 ~ c2 ~ c2 ~ c2 ~", D: "e2 ~ e2@4 e2@2 e2 ~ e2 ~ e2 ~ e2 ~",
  E: "g2 ~ g2@4 g2@2 g2 ~ g2 ~ g2 ~ g2 ~",
})).s("gm_fretless_bass").gain(0.17)

// other · synth brass 2 · "Sintetizador de Metales, Synth Brass"
const synth_brass_2_2 = note("<~@25 A B C ~ D E F G ~@21 A B C ~ D E F G ~@4>".pickRestart({
  A: "[a3,a4]@2 [bb3,bb4] [c4,c5]", B: "[g3,g4]@2 [f3,f4] [e3,e4]", C: "[e3,e4] [f3,f4]",
  D: "~ [a3,a4] [bb3,bb4] [c4,c5]", E: "[db4,db5]@2 [d4,d5] [e4,e5]", F: "[e4,e5]@2 [d4,d5] [f3,f4]",
  G: "[a3,a4] [d4,d5]", // A D
})).s("gm_synth_brass_2").gain(0.24)

// drums · crash
const crash = s("cr").struct("<~@24 [~@13 x!3] x ~@27 [~@13 x!3] x ~@11>").gain(0.25)

// drums · crash · soft notes
const crash_soft = s("cr").struct("<~@24 [~@3 x] ~@28 [~@3 x] ~@12>").gain(0.1)

stack(
  piano, synth_brass_2, timpani, string_ensemble_1, string_ensemble_1_soft, piano_2, xylophone, bass, synth_brass_2_2,
  crash, crash_soft
)