Strudelify

Koopa's Road

Koji Kondo

KeyF majorTempo125 bpm
0:00/0:00
// Koopa's Road — Koji Kondo
// 125 bpm, 2/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 97) are rendered on a constant 2/4 grid of one bar per cycle
// note: ch 1 "Violin" named as a string part, played on violin (its oboe patch is not one); ch 13 "Bass Guitar" named as a bass, played on electric bass finger (its harpsichord patch is not one)
// note: Transcription provider: pdmx. https://musescore.com/score/4240976; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 382 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(125/2)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · string ensemble 1 · "Violins"
const string_ensemble_1 = note(`<
  A B@3 C@2 D@2 E@2 F@2 C@2 D@2 E@2 F@2 G@2 H@2 I@2 J@2 G@2 H@2 I@2 K ~@15 F@2 L@2 E@2 L@2 C@2 G@2 H@2 I@4 M@2 N@2 M@2
  N@2 M@2 N@2 O@4 P@4 Q@2 R S N@2 T@3 A C@2 D@2 E@2 F@2 C@2 D@2 E@2 F@2 G@2 H@2 I@2 J@2 G@2 H@2 I@2 K ~@15 F@2 L@2 E@2
  L@2 C@2 G@2 H@2 I@4 M@2 N@2 M@2 N@2 M@2 N@2 O@4 P@4 Q@2 R S N@2 T@3 A C@2 D@2 E@2 F@2 C@2 D@2 E@2 F@2 G@2 H@2 I@2 J@2
  G@2 H@2 I@2 K ~@15 F@2 L@2 E@2 L@2 C@2 G@2 H@2 I@4 M@2 N@2 M@2 N@2 M@2 N@2 O@4 P@4 Q@2 R S N@2 T@3 A C@2 D@2 E@2 F@2
  C@2 D@2 E@2 F@2 G@2 H@2 I@2 J@2 G@2 H@2 I@2 K ~@15 F@2 L@2 E@2 L@2 C@2 G@2 H@2 I@4 M@2 N@2 M@2 N@2 M@2 N@2 O@4 P@4 Q@2
  R S N@2 T@3 A C@2
>`.pickRestart({
  A: "d5@3 c5@2 g4@3 d4@3 c4@2 g3@3", B: "bb4/3", C: "d4/2", D: "e4/2", E: "f4/2", F: "g4/2", G: "d5/2", H: "e5/2",
  I: "f5/2", J: "g5/2", K: "g5", L: "eb4/2", M: "c5", N: "b4/2", O: "a4/4", P: "bb4/4", Q: "a4/2", R: "ab4", S: "eb4",
  T: "c5/3",
})).s("gm_string_ensemble_1").gain(0.3)

// other · string ensemble 1 · "Violins"
const string_ensemble_1_2 = note(`<
  A B@3 C@2 D@2 E@2 F@2 C@2 D@2 E@2 F@2 G@2 H@2 I@2 J@2 G@2 H@2 I@2 K ~@33 L@2 M@2 ~ L M@2 L@2 N O P@4 Q@4 R@2 S@2 T@2
  U@3 V C@2 D@2 E@2 F@2 C@2 D@2 E@2 F@2 G@2 H@2 I@2 J@2 G@2 H@2 I@2 K ~@33 L@2 M@2 ~ L M@2 L@2 N O P@4 Q@4 R@2 S@2 T@2
  U@3 V C@2 D@2 E@2 F@2 C@2 D@2 E@2 F@2 G@2 H@2 I@2 J@2 G@2 H@2 I@2 K ~@33 L@2 M@2 ~ L M@2 L@2 N O P@4 Q@4 R@2 S@2 T@2
  U@3 V C@2 D@2 E@2 F@2 C@2 D@2 E@2 F@2 G@2 H@2 I@2 J@2 G@2 H@2 I@2 K ~@33 L@2 M@2 ~ L M@2 L@2 N O P@4 Q@4 R@2 S@2 T@2
  U@3 V F@2
>`.pickRestart({
  A: "a4@3 g4@2 d4@3 a4@3 g4@2 d4@3", B: "f4/3", C: "a3/2", D: "b3/2", E: "c4/2", F: "d4/2", G: "a4/2", H: "b4/2",
  I: "c5/2", J: "d5/2", K: "d5", L: "g4", M: "f4/2", N: "f4 ~", O: "f4", P: "gb4/4", Q: "d4/4", R: "gb4/2", S: "c4",
  T: "g4/2", U: "g4/3", V: "d5@3 c5@2 g4@3 d4@3 c4@2 g3@3",
})).s("gm_string_ensemble_1").gain(0.4)

// other · harpsichord
const harpsichord = note(`<
  ~@71 A B ~@2 A C ~@20 D ~@67 A B ~@2 A C ~@20 D ~@67 A B ~@2 A C ~@20 D ~@67 A B ~@2 A C ~@20 D E@2
>`.pickRestart({
  A: "~ f5 g5 c6", B: "a5 b5@5 g5@10", C: "d6 c6@5 g5@10", D: "d5@3 c5@2 g4@3 d4@3 c4@2 g3@3", E: "d4/2",
})).s("gm_harpsichord").gain(0.45)

// other · church organ · "Pipe Organ"
const church_organ = note(`<
  A B@3 C@24 D@8 E@2 F@2 G@2 H@2 E@2 F@2 G@2 H@2 ~@45 I C@24 D@8 E@2 F@2 G@2 H@2 E@2 F@2 G@2 H@2 ~@45 I C@24 D@8 E@2 F@2
  G@2 H@2 E@2 F@2 G@2 H@2 ~@45 I C@24 D@8 E@2 F@2 G@2 H@2 E@2 F@2 G@2 H@2 ~@45 I J@2
>`.pickRestart({
  A: "d4@3 c4@2 f3@3 d3@3 c3@2 g2@3", B: "d2/3", C: "[d2,a2]/8", D: "[[d2,a2]@15 ~]/8", E: "d3/2", F: "e3/2", G: "f3/2",
  H: "g3/2", I: "d5@3 c5@2 g4@3 d4@3 c4@2 g3@3", J: "d2/2",
})).s("gm_church_organ").gain(0.25)

// bass · electric bass finger · "Bass Guitar"
const bass = note(`<
  A B@3 C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C E F G H I J K L M F G H N J K L M J K L M O P Q R
  F G H N J K L M S T U V S T U V S T U V W X W X U V U V W X W X U V U V ~ Y C D C D C D C D C D C D C D C D C D C D C
  D C D C D C D C D C E F G H I J K L M F G H N J K L M J K L M O P Q R F G H N J K L M S T U V S T U V S T U V W X W X
  U V U V W X W X U V U V ~ Y C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C E F G H I J K L M F G H N J
  K L M J K L M O P Q R F G H N J K L M S T U V S T U V S T U V W X W X U V U V W X W X U V U V ~ Y C D C D C D C D C D
  C D C D C D C D C D C D C D C D C D C D C E F G H I J K L M F G H N J K L M J K L M O P Q R F G H N J K L M S T U V S
  T U V S T U V W X W X U V U V W X W X U V U V ~ Y Z@2
>`.pickRestart({
  A: "d4@3 c4@2 f3@3 d3@3 c3@2 g2@3", B: "d2/3", C: "~ d2 d2@2", D: "d2@3 d2 d2@2 db2@2", E: "d2 ~", F: "d2!2",
  G: "~@2 d2@2 d2!4", H: "e2!2", I: "~@2 e2@2 e2@2 e2!2", J: "f2!2", K: "~@2 f2@2 f2!4", L: "g2!2", M: "~@2 g2@2 g2!4",
  N: "~@2 e2@2 e2!4", O: "ab2!2", P: "~@2 ab2@2 ab2!4", Q: "bb2!2", R: "~@2 bb2@2 bb2!4", S: "~ ab1 ab1@2",
  T: "ab1@3 ab1 ab1@2 ab1@2", U: "~ g1 g1@2", V: "g1@3 g1 g1@2 g1@2", W: "~ gb1 gb1@2", X: "gb1@3 gb1 gb1@2 gb1@2",
  Y: "d3@3 c3@2 a2@3 d3@3 c3@2 g2@3", Z: "d2/2",
})).s("gm_electric_bass_finger").gain(0.4)

// other · timpani
const timpani = note("<~@4 A@32 ~@62 A@32 ~@62 A@32 ~@62 A@32 ~@64>".pickRestart({
  A: "d3/2",
})).s("gm_timpani").gain(0.3)

// other · tubular bells
const tubular_bells = note("<~@4 A@32 ~@61 B A@32 ~@61 B A@32 ~@61 B A@32 ~@61 B C ~>".pickRestart({
  A: "d4/2", B: "d5@3 c5@2 g4@3 d4@3 c4@2 g3@3", C: "d4",
})).s("gm_tubular_bells").gain(0.3)

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

// drums · low tom
const low_tom = s("lt").struct("<~@20 A@60 ~@34 A@60 ~@34 A@60 ~@34 A@60 ~@20>".pickRestart({
  A: "x",
})).gain(0.3)

// drums · pedal hat
const pedal_hat = s("hh").struct(`<
  ~@20 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B ~@46 A B A B A B
  A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B ~@46 A B A B A B A B A B A B A B A
  B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B ~@46 A B A B A B A B A B A B A B A B A B A B A B A B
  A B A B A B A B A B A B A B A B A B A B A B A B ~@32
>`.pickRestart({
  A: "x ~@3 x ~@2 x", B: "x!4",
})).gain(0.3)

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@4 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A B A B C@12 A B A B A B A B A B A B A B A B A D A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B
  A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B C@12 A B A B A B A B A B A B A B A B A D A B A B A B A
  B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B C@12
  A B A B A B A B A B A B A B A B A D A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A B A B A B A B A B A B A B A B A B A B C@12 A B A B A B A B A B A B A B A B A D ~@2
>`.pickRestart({
  A: "x ~@3 x ~@2 x", B: "x!2 ~@2", C: "x", D: "x ~ x ~ x ~@2 x",
})).gain(0.3)

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

// drums · shaker
const shaker = s("sh").struct("<~@380 x ~>").gain(0.3)

stack(
  string_ensemble_1, string_ensemble_1_2, harpsichord, church_organ, bass, timpani, tubular_bells, snare, low_tom,
  pedal_hat, high_tom, crash, shaker
)

More by Koji Kondo