Strudelify

sonic the hedgehog 2 - emerald hill zone

Masato Nakamura

KeyA minorTempo136 bpm
0:00/0:00
// sonic the hedgehog 2 - emerald hill zone — Masato Nakamura
// 136 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5961380; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 50 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(136/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [...]/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 D E@2 C F E@2 G H I J G H I J K L M N O L P@2 C D E@2 C F E@2 G H I J G H I J K L M N O L P@2
>`.pickRestart({
  A: "f4@3 g4@12 ~", B: "e4 f4", C: "~@2 g4@2 a4@2 g4@2 c5@2 c5@2 d5 e5@3", D: "~@2 d5@4 a4@2 c5 c5@2 d5@5",
  E: "[~@5 a#4 c5 a#4 d5@2 c5@2 a#4 c5@2 a4@16 ~]/2", F: "~@2 d5@4 a4@2 c5@3 d5@5", G: "e5@15 ~", H: "f#5@15 ~",
  I: "d5@15 ~", J: "c5@15 ~", K: "c5@3 a4 g4@2 a4 c5", L: "b4@2 c5 b4 ~@12", M: "~@2 b4 c5 d5 c5 b4 d5",
  N: "c5 c5@2 a4 e4@4", O: "c5@6 a4@2 g4@5 a4 c5@2", P: "[d5 c5@2 a4@28 ~]/2",
})).s("gm_piano").gain(0.3)

// other · piano
const piano_2 = note(`<
  A B C D E F C D E F C D E G C D E H I J K L I J M@2 C D E F C D E F C D E G C D E H I J K L I J M@2
>`.pickRestart({
  A: "d5@3 e5@12 ~", B: "c5 d5", C: "g4@15 ~", D: "f#4@15 ~", E: "f4@15 ~", F: "e4@15 ~", G: "e4@9 e5@2 e5 d5@2 c5@2",
  H: "e4@2 a4@2 c5@2 a4@2 d5@3 c5 ~@4", I: "~ f4 g4 a4", J: "b4 c5 d5 b4", K: "~ b4 c5 d5", L: "c5 d5 e5 c5",
  M: "[d5@3 e5@28 ~]/2",
})).s("gm_piano").gain(0.25)

// other · piano
const piano_3 = note(`<
  A B C D E F C D E F C D E F C D E F G H I J G H K L C D E F C D E F C D E F C D E F G H I J G H K L
>`.pickRestart({
  A: "a#1@3 c2@9 ~ g2 e2 c2", B: "a1!2 a2!2 a1!2 a2!2 a#1!2 a#2!2 a#1!2 a#2!2",
  C: "c2@2 c3@2 c3@2 g2@2 d3@3 c3@2 g2 a2 c3", D: "d2@2 d3@2 d3@2 a2@2 e3@3 d3@2 a2 b2 d3",
  E: "a#1@2 a#2@2 a#2@2 f2@2 c3@3 a#2@2 f2 g2 a#2", F: "a1@2 a2 a1 b1@2 b2 b1 c2@2 c3 c2 a1@2 a2 a1",
  G: "f2 f3 c2 c3 f2 f3 c2 c3", H: "e2 e3 b1 b2 e2 e3 b1 b2", I: "e2 e3 b1 b2 g#1 g#2 e1 e2",
  J: "a1 a2 b1 b2 c2 c3 a1 a2", K: "g1 g1@2 a1@12 ~", L: "a1 a1@2 a1 b1@2 c2@2 d2@2 c2@2 b1 a1 g1@2",
})).s("gm_piano").gain(0.3)

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

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

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

// drums · mid tom
const mid_tom = s("mt").struct("<~ [~@13 x!2 ~] ~@23 [~@10 x ~@3 x!2] ~@23 [~@10 x ~@3 x!2]>").gain(0.25)

// drums · open hat
const open_hat = s("oh").struct("<~@17 A ~@3 A ~@19 A ~@3 A ~@4>".pickRestart({
  A: "~@3 x",
})).gain(0.25)

// drums · high tom
const high_tom = s("ht").struct("<~ [~ x ~ x!2 ~ x ~ x ~@3 x ~@3] ~@23 [~@6 x ~@6 x ~@2] ~@23 [~@6 x ~@6 x ~@2]>")
  .gain(0.25)

// drums · china
const china = s("cr").struct("<~@25 [x!4] ~@23 [x!4]>").gain(0.25)

stack(piano, piano_2, piano_3, kick, snare, hihat, mid_tom, open_hat, high_tom, china)

More by Masato Nakamura