Strudelify

Yuukyuu no Catharsis

Azur Lane

KeyD majorTempo160 bpm
0:00/0:00
// Yuukyuu no Catharsis — Azur Lane
// 160 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5927003; 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(160/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(`<
  ~@5 A B C D A B C D B A E F C F G H I A E F C F G F J B D E A K E B L A E F C A E F M N O P Q N O P Q A B C D A B C D
  R@2
>`.pickRestart({
  A: "[b3,d4,f#4]@15 ~", B: "[g3,b3,d4]@15 ~", C: "[d4,f#4,a4]@15 ~", D: "[a3,c#4,e4]@15 ~", E: "[f#3,a3,c#4]@15 ~",
  F: "[g3,b3,d4] [a3,c#4,e4]", G: "[a#3,c#4,e4] [b3,d4,f#4]", H: "[e3,g3,b3] f3", I: "f#3@15 ~",
  J: "[b3,e4,f#4] [b3,d#4,f#4]", K: "[e3,g3,b3]@15 ~", L: "[f#3,a#3,c#4]@15 ~", M: "[d4,f#4,a4] ~",
  N: "[c4,d#4,g4]@15 ~", O: "[g3,a#3,d4]@15 ~", P: "[g#3,c4,d#4] [a#3,d4,f4]", Q: "[d#4,g4,a#4]@15 ~",
  R: "[[g3,b3,d4]@15 ~]/2", // G
})).s("gm_piano").gain(0.25)

// other · piano
const piano_2 = note(`<
  ~ A@2 B C D E F G D E F G H ~@8 D I J K J L J D ~@8 D I J K D I J M N E O P N E O Q D E F G D E F G R@2
>`.pickRestart({
  A: "b2!8", B: "g2!8", C: "a2!8", D: "b2@3 b2@3 b2@2 b2@3 b2@3 b2@2", E: "g2@3 g2@3 g2@2 g2@3 g2@3 g2@2",
  F: "d3@3 d3@3 d3@2 d3@3 c#3@3 b2@2", G: "a2@3 a2@3 a2@2 a2@3 a2@3 a2@2", H: "g2@15 ~",
  I: "f#2@3 f#2@3 f#2@2 f#2@3 f#2@3 f#2@2", J: "g2@3 g2@3 g2@2 a2@3 a2@3 a2@2", K: "d3@3 d3@3 d3@2 d3@3 d3@3 d3@2",
  L: "a#2@3 a#2@3 a#2@2 b2@3 b2@3 b2@2", M: "d2@3 d2@3 d2@2 ~@8", N: "c3@3 c3@3 c3@2 c3@3 c3@3 c3@2",
  O: "g#2@3 g#2@3 g#2@2 a#2@3 a#2@3 a#2@2", P: "d#3@3 d#3@3 d#3@2 d#3@3 d#3@3 d#3@2", Q: "d#3@3 d#3@3 d#3@2 ~@8",
  R: "[g2@15 ~]/2",
})).s("gm_piano").gain(0.25)

// other · violin · "Violino"
const violin = note("<A B C D E F@2 G H I@2 J K L ~@7 M ~@7 N ~@7 O ~@16 F@2 G H I@2 J K P@2>".pickRestart({
  A: "~@12 e4 f#4 g4 a4", B: "b4@2 b4@2 b4@2 c#5@2 c#5@2 c#5@2 g4 a4 b4 c#5",
  C: "d5@2 d5@2 d5@2 e5@2 e5@2 e5@2 b4 c#5 d5 e5", D: "f#5!3 e5!3 b4@2", E: "d5@6 c#5 b4 c#5@8",
  F: "[a5@24 b4@3 c#5@3 d5@2]/2", G: "f#5@6 f#5@2 f#5@3 e5@3 d5@2", H: "e5@12 ~ d5 c#5 b4",
  I: "[a4@24 ~@2 d5@3 c#5@3]/2", J: "a4@6 a4@2 a4@3 c#5@3 d5@2", K: "e5@6 e5@2 e5@3 d5@3 c#5@2", L: "d5",
  M: "a#5!12 ~@4", N: "e5 d#5", O: "a#5 ~@2 b5 ~@2 c#6 ~ f#6@2 ~@6", P: "d5/2",
})).s("gm_violin").gain(0.2)

stack(piano, piano_2, violin)