Strudelify

mario kart 64 - rainbow road

Koji Kondo

KeyF majorTempo125 bpm
0:00/0:00
// mario kart 64 - rainbow road — Koji Kondo
// 125 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/2158201; 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(125/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 · church organ · "Organ"
const church_organ = note(`<
  A@2 B@4 C@4 D E F G D E F H I J K L M N I J O P Q R Q S T@2 U@2 B@4 C@4 D E F G D E F H I J K L M N I J O P Q R Q S
  T@2 U@2
>`.pickRestart({
  A: "[[d4,a4,d5] [c4,g4,c5] ~ [g3,d4,g4] [d3,a3,d4] [c3,g3,c4] ~ [g2,d3,g3] [d2,a2,d3]@24]/2", // D5 C5 G5 D5 C5 G5 D5
  B: "[~@2 d3@2 d3@4 d3@3 d3 d3@2 db3@2 ~@2 d3@2 d3@4 d3@3 d3 d3@2 db3@2 ~@2 d3@2 d3@4 d3@3 d3 d3@2 db3@2 ~@2 d3@2 d3@4 d3@3 d3 d3@2 db3@2, [d2,a2], [a3,d4] [b3,e4] [c4,f4] [d4,g4]]/4", // D5 E5 F5 G5
  C: "[~@2 d3@2 d3@4 d3@3 d3 d3@2 db3@2 ~@2 d3@2 d3@4 d3@3 d3 d3@2 db3@2 ~@2 d3@2 d3@4 d3@3 d3 d3@2 db3@2 ~@2 d3@2 d3@4 d3@2 ~@6, [d2,a2]@15 ~, [a3,d4]@4 [b3,e4]@4 [c4,f4]@4 [d4,g4]@3 ~]/4", // D5 E5 F5 G5
  D: "[d2,a2]@4 [d2,a2]@4 ~@2 [d2,a2]@2 [d2,a2]!4, d3", E: "[e2,b2]@4 [e2,b2]@4 ~@2 [e2,b2]@2 [e2,b2]!4, e3",
  F: "[f2,c3]@4 [f2,c3]@4 ~@2 [f2,c3]@2 [f2,c3]!4, f3", G: "[g2,d3]@4 [g2,d3]@4 ~@2 [g2,d3]@2 [g2,d3]!4, g3",
  H: "[g2,d3]@4 [g2,d3]@4 ~@2 [g2,d3]@2 [g2,d3]!4, [g3,g4,b4]", // G5 G
  I: "[f2,c3]@4 [f2,c3]@4 ~@2 [f2,c3]@2 [f2,c3]!4, [f3,eb4]", J: "[g2,d3]@4 [g2,d3]@4 ~@2 [g2,d3]@2 [g2,d3]!4, [g3,f4]",
  K: "[ab2,eb3]@4 [ab2,eb3]@4 ~@2 [ab2,eb3]@2 [ab2,eb3]!4, [ab3,eb4]", // Ab5
  L: "[bb2,f3]@4 [bb2,f3]@4 ~@2 [bb2,f3]@2 [bb2,f3]!4, [bb3,f4]", // Bb5
  M: "[d2,a2]@4 [d2,a2]@4 ~@2 [d2,a2]@2 [d2,a2]!4, [d3,c4]", N: "[e2,b2]@4 [e2,b2]@4 ~@2 [e2,b2]@2 [e2,b2]!4, [e3,d4]",
  O: "[g4,c5] [g4,c5,g5]", P: "f5 c5@3", Q: "c5 [g4,c5,g5]", R: "f5 d5@2 g5", S: "f5 ~ d5@2",
  T: "[d5@3 ab4, [g2,b2,b4]]/2", U: "g4/2",
})).s("gm_church_organ").gain(0.4)

// chords · trumpet · "B♭ Trumpet"
const trumpet = note("<A@2 ~@7 B ~@3 C D E F G H I J K D L M N ~@17 B ~@3 C D E F G H I J K D L M N ~@10>".pickRestart({
  A: "[[a5,d6] [g5,c6] ~ [d5,g5] g4 f4 ~ c4 g3@24]/2", B: "~ d4 d4@2 d4 ~@3", C: "~@2 f4 e4", D: "d4@5 d4 f4 c5",
  E: "b4 g4 d4@3 d4 f4 d5", F: "c5@2 b4@5 a4", G: "b4", H: "[f3,c4]@4 [f3,c4]@4 ~@2 [f3,c4]@2 [f3,c4]!4",
  I: "[g3,d4]@4 [g3,d4]@4 ~@2 [g3,d4]@2 [g3,d4]!4", J: "[ab3,eb4]@4 [ab3,eb4]@4 ~@2 [ab3,eb4]@2 [ab3,eb4]!4",
  K: "[bb3,f4]@4 [bb3,f4]@4 ~@2 [bb3,f4]@2 [bb3,f4]!4", L: "b4 g4 d4@6", M: "g4 f4 g4@14", N: "g5",
})).s("gm_trumpet").gain(0.3)

// chords · trumpet · "B♭ Trumpet"
const trumpet_2 = note(`<
  ~@9 A B C D E B F G H ~@9 I J K L ~@2 I M@2 ~@7 A B C D E B F G H ~@9 I J K L ~@2 I M@2
>`.pickRestart({
  A: "~ b3 b3@2 b3 ~@3", B: "[d3,a3]@4 [d3,a3]@4 ~@2 [d3,a3]@2 [d3,a3]!4",
  C: "[e3,b3]@4 [e3,b3]@4 ~@2 [e3,b3]@2 [e3,b3]!4", D: "[f3,c4]@4 [f3,c4]@4 ~@2 [f3,c4]@2 [f3,c4]!4",
  E: "[g3,d4]@4 [g3,d4]@4 ~@2 [g3,d4]@2 [g3,d4]!4", F: "[e3,b3]@2 [e3,b3]@2 ~ d4!2 c4", G: "c4@2 b3@5 a3", H: "g4",
  I: "~@5 f4 g4 c5", J: "b4@3 g4@5 ~@8", K: "~@5 f4 b4 c5", L: "c5@3 g4@5 ~@8", M: "[b4@3 g4@29]/2",
})).s("gm_trumpet").gain(0.25)

// chords · trombone
const trombone = note(`<
  A@2 ~@8 B C B D E C B D ~@8 F G F G F G H G@3 ~@8 B C B D E C B D ~@8 F G F G F G H G@3
>`.pickRestart({
  A: "[d4 c4 ~ g3 d3 c3 ~ g2 d2@24]/2", B: "[f2,c3]@4 [f2,c3]@4 ~@2 [f2,c3]@2 [f2,c3]!4",
  C: "[e2,b2]@4 [e2,b2]@4 ~@2 [e2,b2]@2 [e2,b2]!4", D: "[g2,d3]@4 [g2,d3]@4 ~@2 [g2,d3]@2 [g2,d3]!4",
  E: "[d2,a2]@4 [d2,a2]@4 ~@2 [d2,a2]@2 [d2,a2]!4", F: "~@2 ab2@2 ab2@4 ab2@3 ab2 ab2@2 ab2@2",
  G: "~@2 g2@2 g2@4 g2@3 g2 g2@2 g2@2", H: "~@2 d3@2 d3@4 d3@3 d3 d3@2 d3@2",
})).s("gm_trombone").gain(0.3)

// other · tuba
const tuba = note(`<
  A@2 ~@7 B ~@8 C D E F G H I J K L K L K L M L@3 ~@7 B ~@8 C D E F G H I J K L K L K L M L@3
>`.pickRestart({
  A: "[d4 c4 ~ g3 d3 c3 ~ g2 d2@24]/2", B: "~ d3 d3@2 d3 ~@3", C: "[f2,c3]@4 [f2,c3]@4 ~@2 [f2,c3]@2 [f2,c3]!4",
  D: "[g2,d3]@4 [g2,d3]@4 ~@2 [g2,d3]@2 [g2,d3]!4", E: "[ab2,eb3]@4 [ab2,eb3]@4 ~@2 [ab2,eb3]@2 [ab2,eb3]!4",
  F: "[bb2,f3]@4 [bb2,f3]@4 ~@2 [bb2,f3]@2 [bb2,f3]!4", G: "d3@5 d3 f3 c4", H: "b3 g3 d3@6", I: "g3 f3 g3@14", J: "g3",
  K: "~@2 ab2@2 ab2@4 ab2@3 ab2 ab2@2 ab2@2", L: "~@2 g2@2 g2@4 g2@3 g2 g2@2 g2@2",
  M: "~@2 b2@2 b2@4 b2@3 b2 b2@2 b2@2",
})).s("gm_tuba").gain(0.4)

// other · french horn · "Horn in F"
const french_horn = note(`<
  A@2 ~@15 B C D E F G H I J K L M N M O P@2 Q@2 ~@15 B C D E F G H I J K L M N M O P@2 Q@2
>`.pickRestart({
  A: "[[a4,d5] [g4,c5] ~ [d4,g4] g3 f3 ~ c3 g2@24]/2", B: "g3", C: "f2@5 f2 bb2 eb3", D: "d3 bb2 f2@5 eb2",
  E: "f2@7 ab2", F: "d2", G: "d2@5 d2 f2 c3", H: "b2 g2 d2@6", I: "g2 f2 g2@14", J: "g2", K: "bb3!2", L: "bb3 f3@3",
  M: "g3!2", N: "bb3 g3@2 c4", O: "bb3 ~ g3@2", P: "[b3@3 ab3]/2", Q: "g3/2",
})).s("gm_french_horn").gain(0.5)

// other · timpani
const timpani = note("<A B C ~@24 D E F G ~ H I J@2 C ~@24 D E F G ~ H I J@2>".pickRestart({
  A: "d2@8 g2!8", B: "g2!16", C: "g2 ~@3", D: "~@5 f2 g2 c3", E: "b2@3 g2@5 ~@8", F: "~@5 f2 b2 c3", G: "c3@3 g2@5 ~@8",
  H: "~@2 b2@2 b2@4 b2@3 b2 b2@2 b2@2", I: "~@2 g2@2 g2@4 g2@3 g2 g2@2 g2@2", J: "[g2!15 g2@16 ~]/2",
})).s("gm_timpani").gain(0.5)

// other · tubular bells
const tubular_bells = note(`<
  A@2 B C D E B C D F B C D E D E G H ~@9 I J K L ~@5 B C D E B C D F B C D E D E G H ~@9 I J K L ~@5
>`.pickRestart({
  A: "[[a5,d6] [g5,c6] ~ [d5,g5] g4 f4 ~ c4 g3@24]/2", B: "d4", C: "e4", D: "f4", E: "g4", F: "g4@3 ~", G: "ab4",
  H: "bb4", I: "~@5 f4 g4 c5", J: "b4@3 g4@5 ~@8", K: "~@5 f4 b4 c5", L: "c5@3 g4@5 ~@8",
})).s("gm_tubular_bells").gain(0.4)

// drums · kick
const kick = s("bd").struct("<[x!2] ~ x!33 ~ x!33 ~>").gain(0.5)

// drums · rim
const rim = s("rim").struct("<~@29 [~@2 x ~ x ~ x ~ x!5 ~ x ~] ~@33 [~@2 x ~ x ~ x ~ x!5 ~ x ~] ~@6>").gain(0.3)

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

// drums · crash
const crash = s("cr").struct("<[x!2] ~ x!33 ~ x!33 ~>").gain(0.45)

stack(church_organ, trumpet, trumpet_2, trombone, tuba, french_horn, timpani, tubular_bells, kick, rim, snare, crash)

More by Koji Kondo