Strudelify

Song of Storms Remix

Koji Kondo

KeyD minorTempo150 bpm
0:00/0:00
// Song of Storms Remix — Koji Kondo
// 150 bpm, 3/4, key D minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: Transcription provider: pdmx. https://musescore.com/score/5935483; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 105 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/3)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once · [...]/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 · violin
const violin = note(`<
  ~@6 A@4 ~@15 B C D@2 E F G H G I J@2 ~@2 K@2 L M N O N P Q@2 R S T U V W X ~@5 Y@3 ~@7 Z@3 ~@31
>`.pickRestart({
  A: "[~@13 a4@40 ~@11]/4", B: "~@11 d5@2 e5@3", C: "db5", D: "d5@3 e5@2 f5@11", E: "g5@8 a5 ~@2 g5@2 a5@3",
  F: "g5@3 e5@2 c5@11", G: "d5@3 ~@2 a4@5 ~ d5@2 e5@3", H: "f5", I: "db5@11 d5@3 ~@2", J: "d5/2", K: "~@5 a4 ~ g4 f4@8",
  L: "e5 e5@7 ~ d5@2 c5 ~@2 d5@2, ~ f5 ~@14", M: "e5 ~@2 c5@2 a4@5 ~@6", N: "f5@8 ~ c5@2 f5 ~@2 g5@2",
  O: "a5@5 ~@6 g5 ~@4", P: "e5@11 ~@5", Q: "f4 ~@2 e4@2 d4@5 ~@6", R: "f4@8 ~ e4@2 f4 ~@2 e4@2",
  S: "d4 ~@2 e4@2 f4@5 ~@6", T: "f4@3 ~@2 d4@3 ~@3 f4 ~@2 g4@2", U: "a4@11 a4@3 ~@2",
  V: "a4@3 ~@2 d4@3 ~@3 f4 ~@2 g4@2", W: "e4@11 d4@3 ~@2", X: "d4@11 ~@5",
  Y: "[~ d4@2 f4@2 a4@3 d4@2 ~ a4@3 ~@2 f4@2 a4@3 d4@2 f4@2 a4@3 d4@2 ~ a4@3 ~@2 f4@2 a4@3 d4@2 f4@2 a4@3, ~@10 f4@2 ~@3 d4@2 ~@13 f4@2 ~@3 d4@2 ~@11]/3",
  Z: "[~@2 d5@5 db5@5]/3",
})).s("gm_violin").gain(0.3)

// other · violin · soft notes
const violin_soft = note("<~@60 A ~@20 B@3 C@2 D@2 E F@4 G H@5 I@2 J@4>".pickRestart({
  A: "~@4 d4@2 ~ a4@3 ~@2 f4@2 a4@2, ~@6 f4@2 ~@3 d4@2 ~@3",
  B: "[~@3 f4@6 d5@3 ~@3 d5@5 db5@6 e5@11 ~ a4@5 f5@3 ~@2]/3", C: "[~ f5@6 g4@5 db5@11 ~ f4@6 d5@2]/2",
  D: "[~@3 d5@6 db5@6 e5@11 a4@6]/2", E: "f5@3 ~@3 f5@5 g4@5",
  F: "[~ e5@11 f4@6 d5@3 ~@3 d5@6 db5@5 e5@11 ~ a4@5 f5@3 ~@3 f5@6]/4", G: "g4@3 db5@5",
  H: "[~ f4@6 d5@3 ~@2 d5@6 db5@6 e5@11 a4@6 f5@3 ~@3 f5@5 g4@6 e5@11 ~ f4@5 d5@3 ~@2]/5",
  I: "[~ d5@6 db5@5 e5@11 ~ a4@6 f5@2]/2", J: "[~@3 f5@6 g4@6 db5@11 d5@34 ~@4]/4",
})).s("gm_violin").gain(0.2)

// other · viola
const viola = note(`<
  ~@7 A@3 ~@17 B C D@2 C@2 E F G@2 ~@4 H I C@2 E F J@2 K J L M L N O ~@5 P@3 ~@7 Q@3 ~@11 R@8 F S T U V@8
>`.pickRestart({
  A: "[~@11 db4@13 a3@13 ~@11]/3", B: "~@5 f4@5 ~ e4@3 ~@2", C: "d4", D: "[f4@5 e4@3 ~@3 d4@10 f4@5 ~ e4@3 ~@2]/2",
  E: "e4", F: "db4", G: "d4/2", H: "f4@11 e4 ~@2 d4 ~", I: "f4@5 e4@3 ~@3 d4@3 ~@2", J: "d4 ~@2 e4@2 d4@5 ~@6",
  K: "d4@8 ~ a3@2 bb3 ~@2 a3@2", L: "d4@3 ~@2 a3@3 ~@3 d4 ~@2 e4@2", M: "d4@11 db4@3 ~@2", N: "db4@11 a3@3 ~@2",
  O: "d4@11 ~@5", P: "[~@8 d4@3 d3@3 ~ d4@3 d3@3 d4@3 ~ d3@3 d4@3 d3@3 ~ d4@3 d3@3 d4@3 ~ d3@3]/3",
  Q: "[~@2 e4@5 db4@5]/3", R: "[~@8 d4@17 f4@17 e4@17 a4@17 d4@17 ~ f4@17 e4@17]/8", S: "~ d4@15", T: "~ f4@7",
  U: "~@3 e4@13", V: "[~@4 a4@17 ~ d4@17 f4@17 e4@17 db4@17 d4@34 ~@4]/8",
})).s("gm_viola").gain(0.3)

// other · cello · "Violoncello"
const cello = note(`<
  ~@6 A@4 ~@17 B C D@2 E@2 F G H@2 ~@9 I J K J K J K J L M ~@6 N@2 ~@7 O@3 ~@11 P@4 Q@4 F R@5 S@6
>`.pickRestart({
  A: "[e2@27 a2@27 ~@10]/4", B: "~@11 d3@2 e3@3", C: "f3@11 d3@2 e3@3", D: "[f3@5 d3@3 e3@3 f3@10 d3@5 ~ e3@3 ~@2]/2",
  E: "f3", F: "e3", G: "a2", H: "d3/2", I: "db3@11 a2@3 ~@2", J: "d3@8 ~ a2@2 d3@3 e3@2", K: "f3@5 e3@3 ~@3 d3@3 ~@2",
  L: "db3@5 b2@3 ~@3 a2@3 ~@2", M: "d3@11 ~@5", N: "[~@3 [f3,d4]@5]/2", O: "[~@2 d3@5 db3@5]/3",
  P: "[~@8 d3@3 f3@3 d4@11 d3@3 f3@3 d4@11 e4@9 f4@3 e4@2 f4@3 e4@3 c4@2]/4",
  Q: "[~ a3@11 a3@6 d3@6 f3@3 g3@3 a3@17 a3@5 d3@6 f3@3 g3@3]/4",
  R: "[~ d3@3 f3@3 d4@11 d3@3 f3@3 d4@11 e4@9 f4@3 e4@3 f4@2 e4@3 c4@3 a3@11 ~ a3@5 d3@5]/5",
  S: "[~ f3@3 g3@3 a3@17 a3@6 d3@5 f3@3 g3@3 e3@11 d3@6 d3@34 ~@4]/6",
})).s("gm_cello").gain(0.3)

// bass · contrabass
const bass = note("<~@7 A@3 ~@52 B@2 ~@5 C@5 ~@11 D@4 E@4 F G@5 H@6>".pickRestart({
  A: "[~@11 a1@27 ~@10]/3", B: "[~@3 f2@5]/2", C: "[d2 f2 e2 a2]/5",
  D: "[~@8 d2@3 f2@3 d3@11 d2@3 f2@3 d3@11 e3@9 f3@3 e3@2 f3@3 e3@3 c3@2]/4",
  E: "[~ a2@11 a2@6 d2@6 f2@3 g2@3 a2@17 a2@5 d2@6 f2@3 g2@3]/4", F: "e2",
  G: "[~ d2@3 f2@3 d3@11 d2@3 f2@3 d3@11 e3@9 f3@3 e3@3 f3@2 e3@3 c3@3 a2@11 ~ a2@5 d2@5]/5",
  H: "[~ f2@3 g2@3 a2@17 a2@6 d2@5 f2@3 g2@3 e2@11 d2@6 d2@34 ~@4]/6",
})).s("gm_contrabass").gain(0.4)

// bass · acoustic bass
const bass_2 = note(`<
  ~@11 A B C B A B C D A B C B A B C D A B C B A B C D E@2 ~@10 F B G B F B G D H ~@49
>`.pickRestart({
  A: "d2@5 a2@3 ~@3 a2@5", B: "e2@5 b2@11", C: "f2@5 c3@3 ~@3 c3@5", D: "e2@5 a2@11", E: "d2",
  F: "d2@8 ~ a2 ~ a2@3 ~@2", G: "f2@8 ~ c3 ~ c3@3 ~@2", H: "d2@11 ~@5",
})).s("gm_acoustic_bass").gain(0.25)

// drums · snare
const snare = s("sd").struct(`<
  ~@36 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A@2 B C D ~@6 A B C D ~@32
>`.pickRestart({
  A: "x", B: "~ x ~@2", C: "~ x", D: "~@5 x ~@6 x ~@3",
})).gain(0.3)

// drums · low tom
const low_tom = s("lt").struct("<~@67 [~@3 x] [~@3 x ~@5 x ~@6] ~@36>").gain(0.3)

// drums · mid tom
const mid_tom = s("mt").struct("<~@66 [~ x ~@14] [~@5 x ~@3 x ~@6] ~@37>").gain(0.3)

// drums · high tom
const high_tom = s("ht").struct("<~@65 [~@11 x ~@4] [~ x] [~ x ~@6] ~@37>").gain(0.3)

// drums · ride
const ride = s("rd").struct("<~@35 A@24 B C D E F ~@3 G H B C D E F ~@31>".pickRestart({
  A: "x ~@4 x ~@5 x ~@4", B: "x ~@2 x ~@3 x ~@2 x ~@2 x ~@2", C: "~ x ~@2 x ~@2 x ~@3 x ~@2 x ~",
  D: "~ x ~@3 x ~@2 x ~@2 x ~@3 x", E: "~@2 x ~@2 x ~@3 x ~@2 x ~@2 x", F: "~@3 x ~@2 x ~@2 x ~@3 x ~@2", G: "~@3 x",
  H: "~@3 x ~@5 x ~@6",
})).gain(0.3)

// drums · crash
const crash = s("cr").struct("<~@66 [~ x] ~@38>").gain(0.3)

stack(violin, violin_soft, viola, cello, bass, bass_2, snare, low_tom, mid_tom, high_tom, ride, crash)

More by Koji Kondo