Strudelify

Battle of Rose

Shinkichi Mitsumune

KeyF majorTempo88 bpm
0:00/0:00
// Battle of Rose — Shinkichi Mitsumune
// 88 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/1788891; license: https://creativecommons.org/publicdomain/mark/1.0/
// note: Full arrangement: all 98 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(88/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.

// other · violin · "Violín"
const violin = note(`<
  ~@12 A B C D ~@4 E F G H I J K L M N O P ~@8 A B C D ~@4 E F G H I J K L M N Q ~ R S R T ~@7 U I J K L M N V W ~@4 X F
  Y Z AA@2 AB AC AD AC AD AC AE AF
>`.pickRestart({
  A: "~@2 bb4 a4 bb4 a4 g4 f4 e4@8", B: "~@2 a4 g4 a4 g4 f4 e4 d4@8", C: "~@2 g4 f4 g4 f4 e4 d4 db4@6 b3 db4",
  D: "d4@3 ~", E: "~ a4@2 a4 a4@3 ~", F: "g4 a4 g4 f4 e4@2 c4@2 a3@8", G: "~@2 c4 d4 e4@4 ~@2 bb3 c4 d4@4",
  H: "~@2 f4@2 e4@2 d4@2 db4@6 b4 db5", I: "d5@8 e5@6 d5 e5", J: "f5@8 g5@6 f5 g5", K: "a5@3 d5 bb5 a5 g5 f5",
  L: "f5@6 e5 d5 e5@8", M: "d5@2 bb5 a5 bb5 a5 g5 f5 e5@2 e5 d5 e5 d5 c5 bb4",
  N: "c5@2 a5 g5 a5 g5 f5 e5 d5@2 d5 c5 d5 c5 bb4 a4", O: "g4@2 g5 f5 g5 f5 e5 d5 [db5,d5] db5@5 b4 db5", P: "d5",
  Q: "g4@2 g5 f5 g5 f5 e5 d5 [db5,d5]!6 ~@2", R: "~@2 d4@2 d4@2 e4 e4@9", S: "~@2 d4@2 f4@2 g4 g4@9",
  T: "~@4 e5@4 ~@2 [e5,f5]!6", U: "~@12 d4 [e4,f4] [g4,a4] [bb4,c5]", V: "g4@2 g5 f5 g5 f5 e5 d5 [db5,d5]!6 b4 db5",
  W: "d5 a5 g5 a5 f5@4", X: "d4 a4@2 d4 a4@3 a4", Y: "bb3@2 c4 d4 e4@4 a3@2 bb3 c4 d4@4",
  Z: "g3@2 f4@2 e4@2 d4@2 db4@6 b3 db4", AA: "[d4@4 ~@5 a4 c5 d5@2 a4 c5 d5@5 ~@12]/2", AB: "~@4 e5@2 ~@4 [e5,f5]!6",
  AC: "~@2 f5@2 ~@2 g5@2 [f5,g5]!8", AD: "~@2 f5@2 ~@2 e5@2 [e5,f5]!8", AE: "e4", AF: "d4",
})).s("gm_violin").gain(0.38).pan(0.8)

// other · cello · "Violonchelo"
const cello = note(`<
  A B A B C D E F C D E G H I G J K L M N K L M O P Q R S P T O ~ C D E F C D E G H I G J K L M N K L M O P Q R S P T O
  U V@2 W X Y Z AA AB AC AD AE AF@2 AG AH S H I AI AJ AK D E G AK AL E G V@2 W V W V AM ~ AN Y
>`.pickRestart({
  A: "~ d4 e4@2", B: "~ d4 c4@2", C: "d3 c3@2 bb2", D: "c3 f3", E: "bb2 e3 f2 bb2", F: "e2 a3", G: "e2 a2", H: "bb2 c3",
  I: "f2 bb2", J: "d3@4 d2@3 ~", K: "d4 c4@2 bb3", L: "c4 f4", M: "bb3 e4 f3 bb3", N: "e3 a4", O: "e3 a3", P: "bb3 c4",
  Q: "d3 e3", R: "f3 a3", S: "d4@2 e4 a4", T: "f3 bb3", U: "d4 a4 g4 a4 f4@4", V: "d3@14 g3 a3", W: "d4@14 g3 a3",
  X: "d3@2 d3@2 f3@2 g3 g3@9", Y: "d3", Z: "d3 e3 f3@2", AA: "g3 e3 f3@2", AB: "c3 a2", AC: "bb2 c3 f2 bb2",
  AD: "db2 e2", AE: "a2!2 f2@2", AF: "g2 a2", AG: "f2 e2", AH: "a2 e2", AI: "e2@8 a2@6 b2 db3", AJ: "d3 ~@3",
  AK: "d3 c3 bb2@2", AL: "g2 a3", AM: "d4@7 ~", AN: "[d3,f3]",
})).s("gm_cello").gain(0.29).pan(1)

// bass · contrabass · "Contrabajo"
const bass = note(`<
  A@3 B C D E F G H I F J K L M C D N O G H I F J P Q R J K S T C D E F G H I F J K L M C D N O G H I F J P Q R J K O ~
  U@2 V W@2 X Y F Z F AA AB J AC Q R AD AE AF AG AH F AI AJ AH F AK AJ U@2 V U V U V U AL W
>`.pickRestart({
  A: "d2@3 ~@4 a2", B: "d2@3 ~@5", C: "d3 c3@2 bb2", D: "c3 f3", E: "bb2 e3 f2 bb2", F: "e2 a2", G: "d2 c3@2 bb1",
  H: "c2 f3", I: "bb2 e2 f2 bb1", J: "bb1 c2", K: "f1 bb1", L: "e1 a1", M: "d3@4 d2@3 ~", N: "bb1 e3 f1 bb2",
  O: "e1 a2", P: "d2 e2", Q: "f2 a1", R: "f2 a2", S: "e1@8 a2@6 b1 db2", T: "d2@3 ~", U: "d2@14 g2 a2",
  V: "d3@14 g2 a2", W: "d2", X: "d2 c2 bb1@2", Y: "a1 c2 bb1@2", Z: "g2!2 c2 g2", AA: "a2 c3 bb2@2", AB: "e2 c3",
  AC: "d2 c2", AD: "g2 a2", AE: "f2!2", AF: "e2!2", AG: "a2 ~@3", AH: "a2!2 f2@2", AI: "g2 c3 c2 bb2", AJ: "db2 e2",
  AK: "g2 c3 f2 bb2", AL: "a2",
})).s("gm_contrabass").gain(0.27).pan(0)

stack(violin, cello, bass)