Strudelify

sonic the hedgehog 2 chemical plant zone

Masato Nakamura

KeyA majorTempo140 bpm
0:00/0:00
// sonic the hedgehog 2 chemical plant zone — Masato Nakamura
// 140 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5965179; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 64 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(140/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.

// chords · piano
const piano = note(`<
  A ~ A ~ A ~ A B C D E B C D E F G D H ~ G D H ~ I J I K I J I ~@3 L M C D E B C D E F G D H ~ G D H ~ I J I K I J I
  ~@3 L M
>`.pickRestart({
  A: "~@10 f#4 c#4 e4 f#4 ~@2", B: "~@8 c#5!2 a4 ~ b4 c#5 ~@2",
  C: "[f#4,a4] ~@3 [f#4,a4]@3 [f#4,a4] ~@2 f#4 c#4 e4 f#4 [f#4,a4]!2", D: "~@2 [f#4,a4]!2 ~@2 [f#4,a4] [g#4,b4]@9",
  E: "[f#4,a4] ~@3 [f#4,a4]@3 [f#4,a4] ~@2 f#4 c#4 e4 f#4 ~@2", F: "~@8 c#5!2 a4 ~ b4 a4 f#4 e4",
  G: "[f#4,a4] ~@3 [f#4,a4]@3 [f#4,a4] ~@6 [f#4,a4]!2", H: "[f#4,a4] ~@3 [f#4,a4]@3 [f#4,a4] ~@8",
  I: "d5@2 d5@2 e5 ~@3", J: "~@14 e5 f#5", K: "~@12 f#5 f5 e5 d#5", L: "f#4 ~ e4 ~ f#4@2 e4 f#4 ~ f#4 e4 ~ f#4@2 e4 ~",
  M: "[f#4,c#5] ~ [e4,b4] ~ [f#4,c#5]@2 [e4,b4] [f#4,c#5] ~ [f#4,c#5] [e4,b4] ~ [f#4,c#5]@2 [e4,b4] ~", // F#5 E5 F#5 E5 F#5 E5 F#5 E5
})).s("gm_piano").gain(0.25)

// other · piano
const piano_2 = note(`<
  ~@8 A@3 B A@3 B A@3 B A@3 B ~ A ~ A ~ A ~@2 C D@3 A@3 B A@3 B A@3 B A@3 B ~ A ~ A ~ A ~@2 C D@3
>`.pickRestart({
  A: "f#3 ~ f#4 ~ e4 ~ f#4 f#3 ~ f#3 f#4 ~ e4 ~ f#4@2", B: "e3 ~ e4 ~ d#4 ~ e4 d#3 ~ d#3 d#4 ~ c#4 ~ d#4@2",
  C: "a3 ~ g#3 ~ a3@2 g#3 a3 ~ a3 g#3 ~ a3@2 g#3 ~",
  D: "[a3,c#4] ~ [g#3,b3] ~ [a3,c#4]@2 [g#3,b3] [a3,c#4] ~ [a3,c#4] [g#3,b3] ~ [a3,c#4]@2 [g#3,b3] ~", // A G#m A G#m A G#m A G#m
})).s("gm_piano").gain(0.25)

// bass · piano
const bass = note(`<
  ~@3 A B C B D B C B D B C B D B C B D B C B D E F E G E F E H I@2 ~ J B C B D B C B D B C B D B C B D E F E G E F E H
  I@2 ~ J
>`.pickRestart({
  A: "f#2 d#2@7 e2 ~ e2@2 f2 ~ f2@2", B: "f#2 ~ f#2@2 f#2 ~ f#2@2 f#2 ~ f#2@2 f#2 ~ f#2@2",
  C: "f#2 ~ f#2@2 f#2 ~ f#2@2 f#2 d#2@3 e2@2 f2@2", D: "e2 ~ e2@2 e2 ~ e2@2 d#2 ~ d#2@2 d#2 ~ d#2@2",
  E: "e1@2 f1@2 f#1 ~@3", F: "f#2@2 ~@5 f#2 ~ f#2 ~@2 e2 ~ e2 f#2", G: "f#2@2 ~@5 f#2 ~ f#2 ~@2 f2@2 e2@2",
  H: "f#2 d#2@3 e2@2 f2@2", I: "[f#2@15 ~]/2", J: "~@8 a1@2 a1@2 a1@2 g#1 g1",
})).s("gm_piano").gain(0.3)

// drums · kick
const kick = s("bd").struct(`<
  A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A
  C A B A C
>`.pickRestart({
  A: "x ~@2 x ~ x ~ x", B: "x ~@5 x ~@2 x ~@6", C: "x ~@2 x ~@4",
})).gain(0.2)

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

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

// drums · crash
const crash = s("cr").struct("<x ~@63>").gain(0.2)

stack(piano, piano_2, bass, kick, snare, hihat, crash)

More by Masato Nakamura