Strudelify

love ooh ooh paradise

Tsunku

KeyB majorTempo150 bpm
0:00/0:00
// love ooh ooh paradise — Tsunku
// 150 bpm, 4/4, key B major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5976702; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 66 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(150/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.

// bass · piano
const bass = note(`<
  ~@2 A B A C D E A F A B G H A B G H I J I K A B L F A B G H A B G H I J I K A B G H A B G H M N A O P Q R S T U V ~ W
  X Y Z AA@3 ~
>`.pickRestart({
  A: "c2 ~ g1 ~ c2 ~ g1 ~", B: "c2@2 ~@2 g1@2 ~@2 c2 ~ g1 ~ a1 ~ b1 ~", C: "c2@2 ~@2 g1@2 ~@2 c2 ~ g1 ~ a1 ~ a#1 ~",
  D: "g#1 ~ d#2 ~ g1 ~ d2 ~", E: "g#1@2 ~@2 d#2@2 ~@2 g2 ~ g1 ~ a1 ~ b1 ~", F: "c2@2 ~@2 g1@2 ~@2 c2 ~ g1 ~ g1@4",
  G: "a#1 ~ f1 ~ a#1 ~ f1 ~", H: "a#1@2 ~@2 f1@2 ~@2 a#1 ~ f1 ~ g1 ~ a1 ~", I: "g#1@2 d#2 ~ [d1,d2] ~ a2 ~",
  J: "g#1@4 d#2@2 ~@2 d2 ~ d1@2 a1 ~ d1@2", K: "d#2 a#1 g1 d2", L: "g1 ~ d2 ~ g1 ~ d2 ~", M: "g#1 g1",
  N: "g#1@8 g1@4 a1@2 b1 ~", O: "c2 ~ g2 ~ c2 ~@3", P: "g#1 ~@3 g#1@4", Q: "~ g#2 f#2 d2", R: "a#1 ~@3 a#1@4",
  S: "~ a#2 g#2 e2", T: "c2 ~@5 c3@2", U: "c2 ~@7", V: "c2 ~@3 c2@4", W: "c1 ~@2 c1 g1 ~@2 g1 a1 ~@2 a1 b1 ~@2 b1",
  X: "c2 ~@2 c2 g1 ~@2 g1 a1 ~@2 a1 b1 ~@2 b1", Y: "g1 a1 a#1 b1", Z: "c#2 g#1 a#1 c#2", AA: "[c2@23 ~]/3",
})).s("gm_piano").gain(0.35)

// bass · piano
const bass_2 = note("<~@50 A B C D E@2 F G ~@8>".pickRestart({
  A: "g#1@4 ~@4 g#1 ~ g#1!6", B: "g#1 ~@3", C: "a#1@4 ~@4 a#1 ~ a#1!6", D: "a#1 ~@3", E: "c2@3 ~@2 c2!3 c2@4 ~@4",
  F: "c2@4 ~@5 c2!7", G: "c2 ~@3",
})).s("gm_piano").gain(0.2)

// bass · piano · soft notes
const bass_soft = note("<~@50 [~@4 g#1!4 ~@8] ~ [~@4 a#1!4 ~@8] ~ [~@3 c2!2 ~@11]!2 [~@4 c2!5 ~@7] ~@9>")
  .s("gm_piano").gain(0.1)

// drums · hihat
const hihat = s("hh").struct(`<
  A B C D C D C D C E C D C D C F C D C D C G C D C E C D C D C F C D C D C G C D C D C F C D@2 H I ~@8 J ~@4 K ~@3
>`.pickRestart({
  A: "x!3 ~ x!3 ~", B: "x!3 ~ x ~@3", C: "~ x!2 ~@2 x!2 ~@3 x ~@2 x!2 ~", D: "~ x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~",
  E: "~ x!2 ~@2 x!2 ~@2 x!2 ~ x ~@3", F: "~ x!2 ~@2 x!2 ~ x!3 ~@2 x!2 ~", G: "~ x!2 ~@2 x!2 ~@2 x ~@6",
  H: "~ x!2 ~@2 x!2 ~@2 x!2 ~@5", I: "~@6 x ~ x!3 ~@2 x!2 ~", J: "~@8 x ~@2 x!2 ~@3", K: "x",
})).gain(0.15)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  [~@3 x ~@3 x]
  [~@3 x ~@4]
  ~@55
  [~@9 x ~@6]
  [x ~@6 x!2 ~@6 x]!3
  [x ~@6 x!2 ~@7]
  ~@4
>`).gain(0.1)

// drums · cowbell
const cowbell = s("cb").struct("<~@49 [x!3 ~] ~@16>").gain(0.3)

// drums · ride
const ride = s("rd").struct("<~@49 [~ x] [~@3 x] ~ [~@3 x] ~ [~@3 x]!3 ~@9>").gain(0.35)

stack(bass, bass_2, bass_soft, hihat, hihat_soft, cowbell, ride)

More by Tsunku