Strudelify

Flame Mammoth - Mega Man X

Makoto Tomozawa

KeyE♭ majorTempo164 bpm
0:00/0:00
// Flame Mammoth - Mega Man X — Makoto Tomozawa
// 164 bpm, 4/4, key Eb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (1/8 at bar 1, 4/4 at bar 2) are rendered on a constant 4/4 grid of one bar per cycle
// note: ch 4 "Electric Bass" named as a bass, played on electric bass finger (its electric guitar clean patch is not one)
// note: Transcription provider: pdmx. https://musescore.com/score/5225751; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 73 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): Electric Guitar.
setcpm(164/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 · overdriven guitar · "Electric Guitar"
const overdriven_guitar = note(`<
  A B@2 C@2 D@2 E@2 D@2 E@2 F@2 G H F@2 I J K@2 G H K@2 L J M N O P Q R S T B@2 C@2 D@2 E@2 D@2 E@2 F@2 G H F@2 I J K@2
  G H K@2 L J M N O P Q R S T
>`.pickRestart({
  A: "~@14 [bb2,eb3] [b2,e3]", // Eb5 E5
  B: "[[c3,f3]@4 [eb3,ab3]@2 [c3,f3]@2 [f3,bb3]@2 [eb3,ab3]@2 [c3,f3]@2 [eb3,ab3]@10 ~@2 [bb2,eb3]@3 [b2,e3]@3]/2", // F5 Ab5 F5 Bb5 Ab5 F5 Ab5 Eb5 …
  C: "[[c3,f3]@2 [eb3,ab3] [c3,f3] [f3,bb3] [eb3,ab3] [c3,f3] [bb2,eb3]@9]/2", // F5 Ab5 F5 Bb5 Ab5 F5 Eb5
  D: "[~@2 [f3,ab3,ab4]@3 [eb3,g3,g4]@2 [c3,f3,f4]@9]/2", E: "[~@2 [f3,ab3,ab4]@3 [eb3,g3,g4]@2 [g2,c3,g3]@9]/2",
  F: "[f3@16 ~@2 c4@4 bb3@2 ab3@3 bb3@3 ab3@2, f2]/2", G: "g3@3 f3@5, bb2", H: "~ eb3 e3 f3 ab3 f3 eb3 e3",
  I: "g3@3 c3@5, bb2", J: "~ f3 bb3 ab3 g3 ab3 g3 eb3", K: "[f3@16 ~@2 b3 c4@3 bb3@2 ab3@3 bb3@3 ab3@2, f2]/2",
  L: "[d3,g3]@3 [c3,g3]@5", M: "db4 ab3 f3 db4 ab3 f3 db4 ab3", N: "g3 db4 ab3 g3 db4 ab3 g3 db4",
  O: "c4 g3 eb3 c4 g3 eb3 c4 g3", P: "ab3@3 g3@3 f3@6 ab3 g3 f3 eb3",
  Q: "db4 ab3 f3 db4 ab3 f3 db4 ab3 f3 db4 ab3 f3 db4 ab3 f3 ab3",
  R: "db4 ab3 g3 db4 ab3 g3 db4 ab3 g3 db4 ab3 g3 db4 ab3 g3 db4",
  S: "c4 g3 eb3 c4 g3 eb3 c4 g3 eb3 c4 g3 eb3 c4 g3 eb3 eb4",
  T: "db4 c4 bb3 ab3 bb3 ab3 g3 eb3 f3@4 eb3@2 [bb2,eb3] [b2,e3]", // Eb5 E5
})).s("gm_overdriven_guitar").gain(0.62)

// bass · electric bass finger · "Electric Bass"
const bass = note(`<
  A B@2 C@2 D@2 E F D@2 E G H@2 I J H@2 I K H@2 I J H@2 I K L M N O P Q R S B@2 C@2 D@2 E F D@2 E G H@2 I J H@2 I K H@2
  I J H@2 I K L M N O P Q R S
>`.pickRestart({
  A: "~@14 eb2 e2", B: "[f2@4 ab2@2 f2@2 bb2@2 ab2@2 f2@2 ab2@10 ~@2 eb2@3 e2@3]/2",
  C: "[f2@2 ab2 f2 bb2 ab2 f2 eb2@9]/2", D: "[f2@4 ab2@2 f2@2 bb2@2 ab2@2 f2@2 ab2@14 ~@2 eb2 e2]/2",
  E: "f2@2 ab2 f2 bb2 ab2 f2 eb2", F: "~ c2@7", G: "~ c2@2 ~ c2@2 g1@2", H: "f2!8", I: "bb2!8",
  J: "~ eb2 e2 f2 ab2 f2 eb2 e2", K: "~ f2 bb2 ab2 g2 ab2 g2 eb2", L: "db2 ab1 f1 db2 ab1 f1 db2 ab1",
  M: "g1 db2 ab1 g1 db2 ab1 g1 db2", N: "c2 g1 eb1 c2 g1 eb1 c2 g1", O: "ab1@3 g1@3 f1@6 ab1 g1 f1 eb1",
  P: "db2 ab1 f1 db2 ab1 f1 db2 ab1 f1 db2 ab1 f1 db2 ab1 f1 ab1",
  Q: "db2 ab1 g1 db2 ab1 g1 db2 ab1 g1 db2 ab1 g1 db2 ab1 g1 db2",
  R: "c2 g1 eb1 c2 g1 eb1 c2 g1 eb1 c2 g1 eb1 c2 g1 eb1 eb2", S: "db2 c2 bb1 ab1 bb1 ab1 g1 eb1 f1@4 eb1@2 eb2 e2",
})).s("gm_electric_bass_finger").gain(0.48)

// bass · slap bass 1 · "5-str. Electric Bass"
const bass_2 = note(`<
  A B@2 C@2 D E F G D E F H I@2 J K I@2 J L I@2 J K I@2 J L M N O P M N O Q B@2 C@2 D E F G D E F H I@2 J K I@2 J L I@2
  J K I@2 J L M N O P M N O Q
>`.pickRestart({
  A: "~@14 eb1 e1", B: "[f1@4 ab1@2 f1@2 bb1@2 ab1@2 f1@2 ab1@10 ~@2 eb1@3 e1@3]/2",
  C: "[f1@4 ab1@2 f1@2 bb1@2 ab1@2 f1@2 eb1@10 f1 f2 c2 ab1 f1 c2 ab1 g1]/2", D: "f1!8",
  E: "f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 f1@2 eb1 e1", F: "f1!5 eb2 f1 bb1", G: "c1!7 eb1", H: "~ g1@2 ~ g1@2 eb1 c1",
  I: "c2!8", J: "f2!8", K: "~ eb2 e2 f2 ab2 f2 eb2 e2", L: "~ f2 bb2 ab2 g2 ab2 g2 eb2", M: "db2!8", N: "eb2!8",
  O: "c2!7 g2", P: "ab2@3 g2@3 f2@2 f2@2 f2@2 f2@2 f2@2", Q: "f2@3 eb2@3 f2@2 f2@2 f2@2 f2@2 eb1 e1",
})).s("gm_slap_bass_1").gain(0.49)

// drums · kick
const kick = s("bd").struct("<[~@7 x] [x!4]!72>").gain(0.48)

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

// drums · hihat
const hihat = s("hh").struct(`<
  A B C B D E F E F E F E F E@2 G E@3 G E@3 G E@3 G E@4 H I@3 J B C B D E F E F E F E F E@2 G E@3 G E@3 G E@3 G E@4 H
  I@3 J
>`.pickRestart({
  A: "~@7 x", B: "~ x!6 ~", C: "x!5 ~@3", D: "x!4 ~ x ~ x", E: "~ x ~ x ~ x ~ x", F: "~@2 x ~@3 x ~@3 x ~@3 x!2",
  G: "~ x ~@3 x ~ x", H: "~@9 x ~ x ~ x ~ x", I: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x", J: "~@9 x ~ x ~@2 x!2",
})).gain(0.48)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@4 A B C B C B C B C B C B C B C B C B C B C B C B C B@3 D E@3 F ~@3 A B C B C B C B C B C B C B C B C B C B C B C B
  C B@3 D E@3 F
>`.pickRestart({
  A: "~@2 x!2", B: "~ x!3", C: "x!4", D: "~@4 x!4", E: "~ x!7", F: "~@4 x!3 ~",
})).gain(0.48)

// drums · crash
const crash = s("cr").struct(`<
  ~ A B A ~ C ~ C ~ C ~ C ~ C ~ D ~ C ~ D ~ C ~ D ~ C ~ D ~ C@3 E C@3 E A B A ~ C ~ C ~ C ~ C ~ C ~ D ~ C ~ D ~ C ~ D ~
  C ~ D ~ C@3 E C@3 E
>`.pickRestart({
  A: "x ~@6 x", B: "~@10 x ~@2 x ~@2", C: "x", D: "x ~@2 x ~@4", E: "x ~@2 x ~@2 x ~@9",
})).gain(0.48)

stack(overdriven_guitar, bass, bass_2, kick, snare, hihat, open_hat, crash)