Strudelify

sonic the hedgehog 2 - casino night zone 2-player

Masato Nakamura

KeyF majorTempo106 bpm
0:00/0:00
// sonic the hedgehog 2 - casino night zone 2-player — Masato Nakamura
// 106 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5969248; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 41 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(106/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once.
// 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("<~@2 A ~ A B ~ B ~ C ~ C ~ D E D F D E D ~@2 A ~ A B ~ B ~ C ~ C ~ D E D F D E D ~>".pickRestart({
  A: "~@15 f5@2 e5 f5@2 e5 f5 ~@2", B: "f5@5 e5 d5 ~@2 c5@3 e5 ~@2 c5@3 d5@3 ~@3",
  C: "a5@5 g5 f5 ~@2 e5@3 g5 ~@2 e5@3 f5@3 ~@3", D: "c4@11 ~ db4@11 ~, e4@23 ~",
  E: "f4 ~@2 f4 ~@2 e4@2 f4 ~@2 f4@7 e4@2 f4@2 ~@2", F: "~@3 f4 ~@2 g4@2 f4 ~@2 a4@12 ~",
})).s("gm_piano").gain(0.3)

// other · piano · soft notes
const piano_soft = note("<~@20 [~@3 f4 ~@2 f4@3 e4@2 f4 ~@12] ~@19 [~@3 f4 ~@2 f4@3 e4@2 f4 ~@12]>")
  .s("gm_piano").gain(0.2)

// chords · piano
const piano_2 = note("<~ A B A B ~ A ~ C ~ A ~ C D E D E D E D F A B A B ~ A ~ C ~ A ~ C D E D E D E D F>".pickRestart({
  A: "~@3 [d4,f4] ~@5 [d4,f4] ~@5 [d4,f4] ~@5 [d4,f4] ~@2", // Dm
  B: "~@3 [bb3,d4] ~@5 [bb3,d4] ~@5 [bb3,d4] ~@5 [bb3,d4] ~@2", // Bb
  C: "~@3 [d4,f4] ~@5 [d4,f4] ~@5 [d4,f4]@2 [d4,f4] ~@3 [d4,f4] ~@2", // Dm
  D: "~@3 [a4,c5] ~@5 [a4,c5] ~@5 [a4,db5] ~@5 [a4,db5] ~@2", E: "~@3 [a4,d5] ~@5 [a4,d5] ~@5 [a4,d5] ~@5 [a4,d5] ~@2",
  F: "~@3 [a4,d5] ~@2 [a4,d5]@3 [a4,d5]@2 [a4,d5] ~@12", // D5
})).s("gm_piano").gain(0.2)

// other · piano
const piano_3 = note("<A B C B C D E D C F E G C H I H I H I H J B C B C D E D C F E G C H I H I H I H J>".pickRestart({
  A: "a2!2 b2!2 c3!2 db3!2", B: "d2@2 d3@2 ~@2 c3 ~@2 b2@3 c3@3 ~@9", C: "g2 ~@2 g2@3 a2 ~@2 a2@3 bb2@3 ~@9",
  D: "d2@3 d3 ~@2 c3 ~@2 d3@3 d2 ~ d2 d3@3 c3@3 d3@3", E: "g2 ~@2 g2@3 a2 ~@2 a2@3 bb2@3 ~@8 c3",
  F: "d2@3 d3 ~@2 c3 ~@2 d3@3 d2 ~ d2 d3@3 c3@3 d3 ~ a2", G: "d2@3 d3 ~@2 c3 ~@2 d3@3 d2 ~ d2 d3@3 c3@3 d3 ~ g3",
  H: "c3 ~@2 c3 ~@2 b2 ~@2 bb2 ~@2 a2 ~@2 a2 ~@2 e3 ~@2 a2 ~@2",
  I: "d3 ~@2 a2 ~@2 c3 ~@2 db3 ~@2 d3 ~ d3 a2 ~@2 c3 ~@2 d3 ~@2", J: "~@2 c3 d3@3 d2@3 d3@2 d2 ~@12",
})).s("gm_piano").gain(0.3)

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

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

// drums · hihat
const hihat = s("hh").struct("<~ A@3 B A@15 C A@3 B A@15 C>".pickRestart({
  A: "~@5 x ~@9 x ~@5 x ~@2", B: "~@5 x ~@9 x ~@4 x!2 ~@2", C: "~ x ~@10",
})).gain(0.15)

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

More by Masato Nakamura