Strudelify

sonic the hedgehog 2 mystic cave zone

Masato Nakamura

KeyA minorTempo108 bpm
0:00/0:00
// sonic the hedgehog 2 mystic cave zone — Masato Nakamura
// 108 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5966811; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 49 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(108/4)

// 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 · piano
const piano = note(`<
  ~ A B C@2 D E C@2 F G F H I G I H ~ J ~ K ~ J ~@2 A B C@2 D E C@2 F G F H I G I H ~ J ~ K ~ J ~@2
>`.pickRestart({
  A: "a5@11 ~ b5@11 ~", B: "c6@11 ~ g#5@11 ~", C: "[a5@23 ~]/2", D: "a5@11 ~ c6@11 ~", E: "b5@11 ~ a#5@11 ~",
  F: "a5@3 g#5@3 g5@2 g#5 g5@2 f#5 f5@3 e5@3 d#5@2 d5@4", G: "c5@3 c5@3 b4@2 c5@3 e5@12 ~",
  H: "c5@3 c5@3 b4@2 c5@3 a4@12 ~", I: "a5@3 g#5@3 g5@2 g#5 g5@2 f#5 f5@2 f5 e5@3 d#5@2 d5@4", J: "f#5 g5 g#5 a5",
  K: "a5 g#5 g5 f#5",
})).s("gm_piano").gain(0.3)

// other · piano
const piano_2 = note(`<
  ~ A B A B A B A B C D C D E F E F ~ G ~ H ~ I ~ J A B A B A B A B C D C D E F E F ~ G ~ H ~ I ~ J
>`.pickRestart({
  A: "~@5 b3", B: "c4 ~@14 a4@2 g#4 g4@2 f#4 f4@2 e4", C: "~@3 e4 ~@11 e4 ~@4 b3@4",
  D: "c4 ~@2 e4 ~@11 c5@2 b4 c5@2 b4 c5 ~@2", E: "~@3 [e4,c5] ~@11 [e4,c5] ~@4 b3@4",
  F: "c4 ~@2 [e4,c5] ~@11 [c5,e5]@2 [b4,d#5] [c5,e5]@2 [b4,d#5] [c5,e5] ~@2", // C B C B C
  G: "~@3 a3@2 b3 c4@2 b3 a3@3 a3@2 b3 c4@2 b3 a3 ~@5", H: "a3 ~ g3 ~ f3 ~ e3 ~",
  I: "~@3 [a3,c4]@2 [b3,d4] [c4,e4]@2 [b3,d4] [a3,c4]@3 [a3,c4]@2 [b3,d4] [c4,e4]@2 [b3,d4] [a3,c4] ~@5", // Am Bm C Bm Am Bm C Bm …
  J: "a3@3 a3@3 e3@2 g3@3 a3 ~@12",
})).s("gm_piano").gain(0.25)

// other · piano
const piano_3 = note(`<
  A B C D E D E D E D E D E D E D E A F A G A F A H B C D E D E D E D E D E D E D E A F A G A F A H
>`.pickRestart({
  A: "a2@5 b2 c3 ~@2 e3 ~@2 d#3 ~@2 e3 ~@2 g3@2 e3@4", B: "a2@3 a3@3 g3@2 a3 g3@2 e3 d3@2 d3 d#3@3 e3@2 g#2@4",
  C: "a2@3 a3@3 g3@2 a3 g3@2 e3 d3@2 d3 d#3@2 e3 ~@6", D: "a2@3 a3@3 g3@2 a3 g3@2 e3 d3@3 d#3@3 e3@2 g#2@4",
  E: "a2@3 a3@3 g3@2 a3 g3@2 e3 d3@3 d#3@2 e3 ~@6", F: "a2 b2 c3 d3 d#3 d3 c3 b2", G: "a2 ~ g2 ~ f2 ~ e2 ~",
  H: "a2@3 a2@3 e2@2 g2@3 a2 ~@2 a2 f#2@3 g2@3 g#2@3",
})).s("gm_piano").gain(0.3)

// drums · kick
const kick = s("bd").struct(`<
  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 C B C B C B C B C B C B C B C B C B C B C B C
>`.pickRestart({
  A: "~@18 x ~@2 x ~ x", B: "x ~ x ~@2 x ~@3 x ~ x ~@3 x ~@5 x ~@2", C: "x ~ x ~@2 x ~@3 x ~ x ~@3 x ~@8",
})).gain(0.2)

// drums · snare
const snare = s("sd").struct(`<
  ~ 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
>`.pickRestart({
  A: "~@3 x ~@3 x ~ x ~@2", B: "~@6 x ~@7 x ~@3 x ~@2 x ~ x",
})).gain(0.2)

// drums · hihat
const hihat = s("hh").struct("<~ [x ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x]!48>").gain(0.25)

stack(piano, piano_2, piano_3, kick, snare, hihat)

More by Masato Nakamura