Strudelify

Mario Battle theme

Shiho Fujiiarr. Jordi Hortal

KeyC majorTempo170 bpm
0:00/0:00
// Mario Battle theme — Shiho Fujiiarr. Jordi Hortal
// 170 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (1/4 at bar 1, 4/4 at bar 2) are rendered on a constant 4/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/5985672; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 70 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(170/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// chords · synth brass 1 · "Sintetitzador Metalls"
const synth_brass_1 = note(`<
  A B C ~@4 D E D E F G H I D E D E F G H ~@9 D E D E F G H I D E D E F G H ~@9 D E D E F G H I D E D E F J H
>`.pickRestart({
  A: "~@14 g4 [a4,b4]", B: "[e4,c5] ~ [g3,c4]@2 [a#3,d#4]@2 [c4,f4]@2", C: "[a#3,c#4,f#4]@3 ~",
  D: "[b4,d#5] ~ [c5,e5] ~ [b4,d#5] ~ [c5,e5] ~ [a4,d5] ~ [a4,c5] ~ [f4,a4] ~ [e4,c5]@2", // B C B C D5 Am F C
  E: "~@2 [e4,c5] ~ d#5 d5 [e4,c5]@2 ~@2 a4 ~ c5@2 ~@2, ~@2 f4 ~@5", // C
  F: "[b4,g5] ~ [b4,g5] ~ [c5,a5] ~ [c#5,a#5] ~ [d5,b5] ~ [b4,g5]@2 ~@2 [b4,g5] ~", // Em F F# G Em
  G: "[a4,f5] ~ [a4,f5] ~ [g#4,e5] ~ [a4,f5]@2 ~@2 c5 ~ d5 ~ c5 ~", // Dm C#m Dm
  H: "[g4,d#5] ~ [g4,d#5] ~ [g4,d5] ~ [g4,d#5] ~ [f4,d5] ~ [f4,c5] ~ [f4,a4] ~ [e4,c5]@2", // Cm G5 Cm Dm F5 F C
  I: "~@2 [b4,g5] ~ [b4,g5] ~ [b4,g5] ~ [c5,g5] ~ [c5,g5] ~ [d5,g5] ~ [d5,g5] ~", // Em C5 G5
  J: "[a4,f5] ~ [a4,f5] ~ [g#4,e5] ~ [a4,f5]@2 ~@2 c5 ~ d5 ~ c5 [c#5,d5]", // Dm C#m Dm Dmaj7
})).s("gm_synth_brass_1").gain(0.3)

// other · lead 2 sawtooth
const lead_2_sawtooth = note("<~@5 A B ~@16 C D E F G H I J ~@16 C D E F G H I J ~@13 K L>".pickRestart({
  A: "e2!2 g2 g#2 a2!2 c3 c#3", B: "e2!2 g2 g#2 a2 g#2 e2 d2", C: "g#4 a4 c5 g#4 a4 c5 d5 c5", D: "d#5@2 d#5@2 d5 c5@3",
  E: "f#4 g4 c5 d#4 e4 g4 a4 c5", F: "a#4@4 ~ a#4 a4 g4", G: "f4 a3 c4 f4 a4 c5 d5 c5",
  H: "[d#4,d#5,g5]@2 [d#4,d#5,g5]@2 [d4,d5,f5] [c4,c5,d#5]@2 [c4,c5]", // D# Dm Cm C
  I: "[d4,d5] [c4,c5] [a#3,a#4] [g#3,g#4] [g3,g4] [f#3,f#4] [f3,f4] [b3,b4]", // D C A# G# G F# F B
  J: "[g#2,g#3] [g2,g3]@2 [g#2,g#3] [g2,g3]@2 [g2,g3]@2", // G# G G# G
  K: "~@14 [c4,c#4,d4,d#4,c5] [e4,f4,f#4,g4,g#4,a4,a#4,b4,c#5,d5]",
  L: "[d#4,g4,c5,c#5,d5,d#5] ~ [d#4,g4,d#5] ~ [d4,g4,d5] ~ [d#4,g4,d#5] ~ [d4,f4,d5] ~ [c4,f4,c5] ~ [a3,f4,a4] ~ [c4,e4,c5]@2", // Cm D# G5 D# Dm F5 Dm C
})).s("gm_lead_2_sawtooth").gain(0.3)

// bass · synth bass 1 · "Sintetitzador Baix"
const bass = note(`<
  ~ A B C@8 D E C F C@4 D E C ~ G H I J G H K L C@4 D E C F C@4 D E C ~ G H I J G H K L C@4 D E C F C@4 D E M
>`.pickRestart({
  A: "c2 c3 a#1 a#2 g#1 g#2 g1 g2", B: "f#1 f#2 f#1 f#2 f#1@2 ~@2", C: "c2!2 d#2 e2 f2!2 g#2 a2",
  D: "g2!2 b2!2 d3!2 e3 g3", E: "f2!2 a2!2 c3!2 d3 f3", F: "~ g2!3 a2!2 b2!2", G: "f2!2 a2!2 c3 d#3 d3 c3",
  H: "g#1!2 c2 d#2 a#1 f2 g#2 a2", I: "c2!2 d2 d#2 e2!2 g2 a#2", J: "c2!2 d2 e2 f2 d#2 d2 c2",
  K: "d2!2 f#2 a2 d3 c3 g#2 b1", L: "g#1 g1@2 g#1 g1@2 g1@2", M: "g1!5 a1 b1 c2",
})).s("gm_synth_bass_1").gain(0.3)

// drums · kick
const kick = s("bd").struct(`<
  ~
  [x!4]
  [x!3 ~]
  [x ~@2 x!3 ~@2]!19
  [x ~@5 x!2]
  [x ~@2 x!3 ~@2]!23
  [x ~@5 x!2]
  [x ~@2 x!3 ~@2]!23
>`).gain(0.3)

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

// drums · low tom
const low_tom = s("lt").struct("<~@22 [~@3 x ~ x ~@2] ~@23 [~@3 x ~ x ~@2] ~@23>").gain(0.3)

// drums · hihat
const hihat = s("hh").struct("<~@3 A@3 B A@7 B A@7 ~ A@7 B A@7 B A@7 ~ A@7 B A@7 B A@6 B>".pickRestart({
  A: "x!8", B: "x!4 ~@4",
})).gain(0.3)

// drums · crash
const crash = s("cr").struct(`<
  ~ A B ~@4 B ~@3 B ~@3 B ~@3 B ~@3 B ~@7 B ~@3 B ~@3 B ~@3 B ~@3 B ~@7 B ~@3 B ~@3 B ~@3 B ~ C
>`.pickRestart({
  A: "x!4", B: "x", C: "~@7 x",
})).gain(0.3)

// drums · cowbell
const cowbell = s("cb").struct("<~@3 A@3 B A@7 B A@7 ~ A@7 B A@7 B A@7 ~ A@7 B A@7 B A@6 B>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2",
})).gain(0.3)

// drums · whistle
const whistle = s("ballwhistle:1").struct("<~@2 [~@3 x] ~@67>").gain(0.39)

stack(synth_brass_1, lead_2_sawtooth, bass, kick, snare, low_tom, hihat, crash, cowbell, whistle)