Strudelify

halo 4 - 117

Kazuma Jinnouchi

KeyE majorTempo90 bpm
0:00/0:00
// halo 4 - 117 — Kazuma Jinnouchi
// 90 bpm, 6/8, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/159757; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 104 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(90/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(`<
  ~@3 A@8 B@2 C@3 D@4 ~@15 E F@2 G@2 F@2 H@2 I@2 J@2 K@2 L@2 I@2 J@2 M@2 N O P@4 Q@2 R@2 S@2 T@2 U@2 V@2 W@2 X@2 Y@2 Z@2
  AA AB AC AA AD AE AF@2 AG AH AI@2 AJ@8
>`.pickRestart({
  A: "g#6/8", B: "f#6/2", C: "e6/3", D: "c#6/4", E: "~@6 [g#4,g#5]@3 [g#4,g#5]!3", F: "[g#4@2 ~ g#4@21]/2",
  G: "[g#4 a4@11]/2", H: "[g#4@2 a4@16 a4@3 a4!3]/2", I: "[c#5@3 g#5@5 d#5 e5 d#5 c#5]/2",
  J: "[d#5@2 b4 c#5@7 c#5 d#5]/2", K: "[e5@3 c#6@5 b5!2 a5 g#5]/2", L: "[a5@2 f#5 g#5@9]/2",
  M: "[e5@3 c#6@6 b5 f#5 g#5]/2", N: "a#5@10 b5 a#5", O: "g#5", P: "g#4 c#4 g#4!2 f#4 c#4 f#4 g#4!2 a4!2 b4",
  Q: "c#5 d#5!3 c#5 g#4 c#5 d#5!2 e5!2 f#5", R: "g#5 a#5!3 g#5 d#5 g#5 a#5!2 b5!2 c#6",
  S: "[c5@3 c6@5 g5 g#5 g5 d#5]/2", T: "[c5@9 a#4 c5 c#5]/2", U: "[c5@3 c6@6 a#5 c6 c#6]/2",
  V: "[c6@3 c7@5 g6 g#6 g6 d#6]/2", W: "[g#4@3 g#5@5 d#5 e5 d#5 b4]/2", X: "[g#4@9 f#4 g#4 a4]/2",
  Y: "[g#4@3 g#5@6 f#5 g#5 a5]/2", Z: "[~ g#6 f#6@2, g#5]/2", AA: "c#5 b4", AB: "d#5@4 e5 d#5 c#5@6", AC: "f#5 e5",
  AD: "b4 d5", AE: "c#5@4 d5 c#5 b4@4 a4@2", AF: "[g5 e6@2 c#6]/2", AG: "b5 g6", AH: "f#6 d6", AI: "e6/2",
  AJ: "[~@4 b4 d5 c#5 a4 b4@8, e6]/8",
})).s("gm_violin").gain(0.4)

// other · cello · "Violoncello"
const cello = note(`<
  ~@16 A B C D ~@2 E@2 F G H@2 ~@2 E@2 F G I@2 J K L M J K L M N F O P Q R S@2 N F O P Q R T@2 U V W X Y Z AA AB AC AD@3
  AE AF@3 F G F@3 G F AG AH AI@2 AH AJ AK AL AM AN AO AP@2 AQ@2 AR AS AT@4
>`.pickRestart({
  A: "c#4 d#4!2 e4 c#4 g#3 c#4 d#4!2 e4 g#4 f#4", B: "c#4 d#4!2 ~ c#4 ~ c#4 ~ d#4 ~@3",
  C: "c#4 d#4!2 e4 c#4 g#3 c#4 d#4!2 e4 g#4 ~", D: "c#4 ~ d#4 ~@3 c#4 ~ d#4 e4 f#4 g#4", E: "[~ g#3@3]/2", F: "c#4",
  G: "d#4", H: "[c#4 d#4@2 c#4]/2", I: "g#3/2", J: "[g#2,c#3,g#3]@2 ~ [g#2,c#3,g#3]@2 ~@7",
  K: "[g#2,c#3,g#3]@2 ~ [g#2,c#3,g#3]@2 ~@3 [g#2,c#3,g#3]@2 ~@2", L: "[c#3,a3]@2 ~ [c#3,a3]@2 ~@7",
  M: "[c#3,a3]@2 ~ [c#3,a3]@2 ~@3 [c#3,a3]@2 ~@2", N: "c#4 d#4", O: "c#4 g#3", P: "a3 b3", Q: "[c#4,e4]",
  R: "[d#4,f#4]", S: "[[c#4,e4] [d#4,f#4]@2 [c#4,e4]]/2", T: "[g#3,c#4]/2", U: "[f#2,f#3] ~@2 g#3@3, ~ f#3@2",
  V: "[g#2,g#3] ~ g#3@4", W: "[a2,a3] ~@2 g#3@3, ~ a3@2", X: "[b2,b3] ~@2 g#3@3, ~ b3@2", Y: "[e2,e3] ~ [c#3,e3]@4",
  Z: "[f#2,f#3] ~ [c#3,f#3]@4", AA: "[g#2,g#3] ~ [d#3,g#3]@4", AB: "[a#2,a#3] ~ [a#2,a#3] [d#3,a#3,d#4]@3",
  AC: "c4@3 f4 g4 g#4", AD: "[g4@3 d#4@6 c#4@6 f3 g3 a#3, ~@5 d#4]/3", AE: "a#3@3 c4 f4 g#4",
  AF: "[g#4 g4@2 [a#3,f4]@3]/3", AG: "f#4", AH: "a3 g#3", AI: "[g#3 f#3@2 a3]/2", AJ: "b3 d4", AK: "f#4 e4", AL: "g3",
  AM: "g#3 a3", AN: "b3", AO: "c4", AP: "[[c4,e4] [d4,b4]@2 [c4,a4]]/2", AQ: "b3/2", AR: "[g3,b3] [b3,d4]",
  AS: "[a3,c#4]", AT: "[c4@3 b3@5]/4",
})).s("gm_cello").gain(0.4)

// other · cello · "Violoncello" · soft notes
const cello_soft = note("<~@3 A@4 B@3 C@2 D@2 E@2 ~ F G H ~@84>".pickRestart({
  A: "g#3/4", B: "[c#4@5 b3]/3", C: "a3/2", D: "g#3/2", E: "[a3@3 f#3]/2", F: "~@3 e4 ~ g#3 ~ d#4 ~ e4 g#4 f#4",
  G: "~@11 f#4", H: "~ d#4 ~ e4 c#4 g#3 ~ d#4 ~@4",
})).s("gm_cello").gain(0.2)

// chords · contrabass
const contrabass = note(`<
  A@16 B@2 C@2 D@2 E F G H I J D@2 E F G H I K D@2 L@2 D@2 L@2 D@2 E F G H I J D@2 E F G H I D M N O P Q R N M S N Q T S
  N Q U Q R V W Q R V@2 X Y Z AA AB AA AC AD AE@2 AF AG AH@8
>`.pickRestart({
  A: "c#2/4", B: "[[c#2,g#2]!2 [c#2,g#2]@10]/2", C: "[[c#2,g#2]@2 [c#2,g#2]@2 [c#2,g#2]@17 [c#2,g#2]!3]/2",
  D: "[c#2,g#2] [c#2,g#2]@3", E: "[b1,b2,f#3]!2 [f#1,f#2,c#3]@2",
  F: "[f#1,f#2,c#3]@3 [f#1,f#2,c#3]@5 [f#1,f#2,c#3]@2 [f#1,f#2,c#3]@2", G: "[a1,e2,a2] [a1,e2,a2]@3",
  H: "[b1,f#2,b2] [b1,f#2,b2]@3", I: "[f#1,c#2,f#2] [f#1,c#2,f#2]@3", J: "[c#2,g#2,c#3] [c#2,g#2,c#3]@3",
  K: "[c#2,g#2]@3 [c#2,g#2] [c#2,g#2]@8", L: "[c#2,a2] [c#2,a2]@3", M: "[f#1,f#2] [f#1,f#2]@3",
  N: "[g#1,g#2] [g#1,g#2]@3", O: "[a1,a2] [a1,a2]@3", P: "[b1,b2] [b1,b2]@3", Q: "[c#2,c#3] [c#2,c#3]@3",
  R: "[d#2,d#3] [d#2,d#3]@3", S: "[f1,f2] [f1,f2]@3", T: "[d#2,a#2] [d#2,a#2,d#3]@3",
  U: "[d#1,d#2,a#2] [d#1,d#2,a#2]@3", V: "[f#1,f#2,f#3] [f#1,f#2,f#3]@3", W: "[f#1,f#2,a3] [f#1,f#2,a3]@3",
  X: "[a1,a2] [e1,e2]", Y: "[b1,b2] [f#1,f#2]", Z: "[d1,d2] [a1,a2]", AA: "[f#1,f#2] [e1,e2]", AB: "[e1,e2] [b1,b2]",
  AC: "[b1,b2]", AD: "[f#1,f#2]", AE: "[e1,e2]/2", AF: "[c2,c3]", AG: "[d2,d3]", AH: "[~ e2@15]/8",
})).s("gm_contrabass").gain(0.4)

stack(violin, cello, cello_soft, contrabass)