Strudelify

requiem for a dream theme

Olivia Sanera

KeyB♭ majorTempo70 bpm
0:00/0:00
// requiem for a dream theme — Olivia Sanera
// 70 bpm, 4/4, key Bb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/2555956; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 59 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(70/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.

// chords · piano
const piano = note(`<
  ~@12 A@4 B C B D B C B D E F G H E F G I J K L M J K L M N O N P Q R Q S T U T V T U T V W X@2
>`.pickRestart({
  A: "bb5 a5 bb5 a5 bb5 a5 bb5 a5 bb5 a5 bb5 a5 bb5 a5 bb5 a5", B: "g4@15 ~", C: "a4 bb4", D: "f4 eb4",
  E: "bb5 d6 bb5@2 bb5 d6 bb5@2, g4@15 ~", F: "a5 d6 a5@2 bb5 d6 bb5@2, a4 bb4", G: "a5 d6 a5@2 a5 d6 a5@2, g4@15 ~",
  H: "c6 d6 c6@2 c6 d6 a5@2, f4 eb4", I: "c6 d6 c6@2 c6 d6 a5 bb5, f4 eb4",
  J: "[g4,bb4,bb5] g4@5 [bb4,bb5] g5 [bb4,bb5] g4@5 [bb4,bb5] [g4,g5], ~ g5 ~@5 g4@2 g5 ~@6", // Gm Bb G
  K: "[g4,bb4,bb5] g4@5 [bb4,bb5] g5 [bb4,bb5] g5 [bb4,bb5] g5 [bb4,bb5] g5 [bb4,bb5] [g4,g5], ~ g5 ~@5 g4@2 g4@2 g4@2 g4@2 ~", // Gm Bb G
  L: "[bb4,bb5] [a4,a5] ~@4 [bb4,bb5] [a4,a5] [bb4,bb5] [a4,a5] ~@4 [bb4,bb5] [a4,a5], g4@15 ~", // Bb A Bb A Bb A Bb A
  M: "[bb4,bb5] [a4,a5] ~@4 [bb4,bb5] [a4,a5] [bb4,bb5] [a4,a5] [bb4,bb5] [a4,a5] [bb4,bb5] [a4,a5] [bb4,bb5] [a4,a5], f4 eb4", // Bb A Bb A Bb A Bb A …
  N: "[bb4,bb5]@2 [a4,a5]@2 g5@2 [bb4,bb5]!3 [a4,a5]!2 [g4,g5] g5@2 [bb4,bb5]!2, g4@4 g4@4 g4@3 ~ g4@4", // Bb A Bb A G Bb
  O: "[a4,bb4,bb5] [a4,a5] a5 [g4,g5] [g4,g5]@2 [g4,g5]!3 [a4,a5]!3 [a4,bb4,a5] [bb4,bb5]!3, ~ a4 a4@2 bb4@2 ~@2", // Bbmaj7 A G A Bbmaj7 Bb
  P: "[bb4,bb5] [a4,a5]!2 [g4,g5] [g4,g5]@2 [g4,g5]!3 [a4,a5]!4 [bb4,bb5]!3, f4!2 eb4!2", Q: "[g4,g5]@15 ~",
  R: "[a4,a5] [bb4,bb5]", S: "[f4,f5] [eb4,eb5]", T: "bb5 a5 g5 d5 bb5 a5 g5 d5, g4@15 ~",
  U: "bb5 a5 g5 d5 c6 bb5 a5 bb5, eb4 d4", V: "bb5 a5 g5 d5 c6 bb5 a5 g5, eb4 d4", W: "[g3,g4]@15 ~",
  X: "[[g3,g4]@8 [gb3,gb4]@23 ~]/2", // G Gb
})).s("gm_piano").gain(0.3)

// chords · piano
const piano_2 = note(`<
  A B A B C D C E C D C E C D C E C D C E C D C E C D C E C D C E F G F G F G F G F G F G F G F G H I H I J K J K A L@2
>`.pickRestart({
  A: "[g1,g2]@15 ~", B: "[eb1,eb2] [d1,d2]", C: "bb3 a3 g3 d3 bb3 a3 g3 d3, [g1,g2]@15 ~",
  D: "bb3 a3 g3 d3 c4 bb3 a3 bb3, [eb1,eb2] [d1,d2]", E: "bb3 a3 g3 d3 c4 bb3 a3 g3, [eb1,eb2] [d1,d2]",
  F: "[g1,g2]!8, ~ [g3,bb3,d4] ~ [g3,bb3,d4]", G: "[eb1,eb2]!4 [d1,d2]!4, ~ [eb3,g3,bb3] ~ [d3,gb3,a3]",
  H: "[g2,bb2,d3]!8", I: "[eb2,g2,bb2]!4 [d2,gb2,a2]!4", J: "[g2,bb2,d3]!2", K: "[eb2,g2,bb2] [d2,gb2,a2]",
  L: "[[eb1,eb2]@8 [d1,d2]@23 ~]/2", // Eb D
})).s("gm_piano").gain(0.3)

stack(piano, piano_2)