Strudelify

heathers the musical - lifeboat

D.N. Laster

KeyD minorTempo160 bpm
0:00/0:00
// heathers the musical - lifeboat — D.N. Laster
// 160 bpm, 4/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: metre changes (3/4 at bar 1, 4/4 at bar 29, 12/8 at bar 62, 4/4 at bar 65) are rendered on a constant 4/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/5075176; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 120 bars on a 24-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 · "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("<[~ g4 d5 g4] [d5 g4 d5 g4]!15 [f5 g4 d5 g4]!5 [f5 g4 d5 bb4]!6 [f5 ~@3] ~@92>")
  .s("gm_violin").gain(0.15)

// other · cello
const cello = note("<~@28 A ~@3 B ~@3 C@2 ~@2 D E@2 F@4 G@8 H@5 ~ I ~@58>".pickRestart({
  A: "[db5,db6] [a4,a5] [gb4,gb5] [db4,db5] [a4,gb5]@2 [a4,gb5]@2", B: "~@2 [a3,db4]!2",
  C: "[~@5 [a3,e4]@2 [a3,e4]@2 ~@7]/2", D: "~ e4", E: "db4 db4@2 eb4@2 f4@2 ~",
  F: "[db4@2 eb4@2 f4 gb4@2 ab4@3 b4@2 b4@6 a4 ab4 ab4@6 ~@2 ab4@2 a4@2]/4",
  G: "[b4@2 a4@4 ab4@4 a4@8 ab4 gb4@7 ~@2 ab4@2 a4@2]/4",
  H: "[b4@2 a4@4 ab4@4 a4 ab4 e4@6 e4@2 gb4@2 ab4@4 a4@4 ab4@4 db4@6]/5",
  I: "~@8 ab3 [a3,bb3] [b3,c4] [db4,d4] [eb4,e4] gb4 [g4,ab4] a4 ~@8, ~@8 f4@5 f4@3 ~@8", // Bbmaj7 Cmaj7 Dmaj7 Emaj7 Abmaj7
})).s("gm_cello").gain(0.3)

// other · cello
const cello_2 = note(`<
  ~@61 A@5 ~ B ~ C ~ D@2 ~ E F@2 G@2 H@3 I@4 J@2 K@5 L M@2 N O@4 P ~@2 Q@2 R@2 S T@2 U V W@3 X@4
>`.pickRestart({
  A: "[~@15 [bb4,bb5]@7 ~ [bb4,bb5]@7 [bb4,ab5]@5 bb3@2 [bb4,ab5]@5 ab3@2 [bb4,g5]@7 ~ [bb4,g5]@7 [bb4,gb5]@5 f4@2 [bb4,gb5]@5 ab3@2 [bb4,bb5]@7 ~ [bb4,bb5]@7 [bb4,ab5]@5 bb3@2 [gb4,gb5]@5 [f4,f5]@2 ~@18]/5", // Bb Bb7 Eb Ebm Bb Bb7 Gb F
  B: "~@3 bb4@7 db5@5 ~@9", C: "~@13 bb4@7 db5@4", D: "[~@21 bb4@7 db5@5 ~@15]/2", E: "~@7 bb4@7 db5@5 ~@5",
  F: "[~@12 f4@5 f4@2 bb4@7 ab4@5 ab4@2 ~ bb4@7 ~@7]/2",
  G: "[bb3@5 bb3@2 ~ db4@4 f4@7 ~ eb4@9 db4@5 db4@2 ~ bb3@4 f4@7]/2",
  H: "[~ eb4@7 ~@2 db4@5 db4@2 ~ bb3@5 bb3@2 f4@7 eb4@7 ~ f4@4 db4@7 ~@18 db4@3]/3",
  I: "[~ db4@2 ~ bb3@5 f4@7 eb4@10 db4@5 db4@2 bb3@5 f4@7 eb4@7 ~@3 bb4@5 bb4@2 ab4@5 ab4@2 f4@5 f4@2 ~ bb4@7 ab4@5 f4@7]/4",
  J: "[db5@2 ab4@5 bb4@7 ~ db5@2 ab4@5 bb4@7 db5@2 ~ ab4@4 bb4@10 ~@2]/2",
  K: "[~@5 c4@5 db4@2 ~ e4@4 f4@2 ~ ab4@7 db4@7 ab4@7 ~ gb4@15 ~@7 e4@4 gb4@2 ~ ab4@5 a4@2 b4@7 e4@7 ~ b4@7 a4@15 ~@5]/5",
  L: "~@2 a4@5 ab4@2 gb4@5 a4@2 ab4@7 ~", M: "[e4@7 b4@7 a4@5 ab4@7 e4@7 b4@7 ~ a4@2 ab4@5]/2", N: "a4 gb4@11",
  O: "[~@5 ab4@2 ~ a4@4 ab4@2 ~ gb4@5 a4@2 ab4@7 e4@5 db4@17 ab4@7 a4@7 ~ ab4@19 d4@5 e4@2 f4@4]/4",
  P: "~ g4@2 ~ a4@7 d4@7 c5@6", Q: "[~@12 c4@4 e4@5 g4@5 bb4@5 a4@2 g4@5 bb4@2 ~ a4@7]/2",
  R: "[f4@7 c5@7 ~ bb4@4 a4@7 ~ f4@7 c5@7 d5@2 ~ e5@4]/2", S: "f5@2 ~ e5@21",
  T: "[~@6 a4@2 bb4@5 a4@2 g4@5 bb4@2 ~ a4@7 db5@5 d5@5 ~@4 d4@4]/2", U: "~ d4@2 ~ c4@7 d4@5 a3@7 ~",
  V: "~ f4@5 f4@2 ~ e4@7 f4@7 ~", W: "[~@7 a4@4 a4@2 ~ g4@7 a4@5 f4@7 ~@3 bb4@4 bb4@2 ~ a4@7 bb4@7 ~@8 d5@5 d5@2]/3",
  X: "[c5@7 d5@5 bb4@7 ~@3 f5@5 f5@2 e5@7 f5@7 ~ d5@29 f5@2 e5@2 ~ f5@10 ~@8]/4",
})).s("gm_cello").gain(0.3)

// bass · cello
const bass = note("<~@3 A@6 B@6 A@6 C@7 ~@92>".pickRestart({
  A: "[~ g2@6 g2@3 f2@3 eb2@6 eb2@3 d2@2]/6", B: "[~ c2@6 f2@6 g2@6 g2@3 f2@2]/6",
  C: "[~ c2@6 f2@6 g2@6 g2@3 g2@3 ~@3]/7",
})).s("gm_cello").gain(0.15)

stack(violin, cello, cello_2, bass)