Strudelify

the phantom of the opera

Andrew Lloyd Webberarr. Lady Tookie

KeyF majorTempo160 bpm
0:00/0:00
// the phantom of the opera — Andrew Lloyd Webberarr. Lady Tookie
// 160 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5821608; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 80 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 · [...]/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(`<
  A@2 B@2 A@2 C D E@2 F@2 G@2 F@2 H@2 I@2 J@2 K@2 L@2 M@2 N O P@2 Q R S@2 Q R S@2 T U V@2 W@2 X@2 Y Z AA@2 Y Z AA@2 AB
  AC AD@2 AE AF AG@2 AE AF AG@2 AH AI AJ@2 AK@6 AL@2
>`.pickRestart({
  A: "[d5@12 d5 db5 c5 b4]/2", B: "[bb4@3 ~]/2", C: "bb4", D: "ab4 bb4 ~@2 bb4 b4 c5 db5", E: "[d5@5 a3 d4 a3]/2",
  F: "[c4@3 bb3 bb3@6 g3@2 c4@3 g3]/2", G: "[a3@5 a3 d4 a3]/2", H: "[a3@5 a3 d4 f4]/2",
  I: "[a4@3 g4 g4@6 g4@2 c5@3 g4]/2", J: "[a4@6 ~ a4]/2", K: "[d5@9 c5 bb4 a4 g4 f4 e4 d4]/2",
  L: "[db4@10 bb3@2 bb3@3 a3]/2", M: "[a3@12 a4 ab4 g4 gb4]/2", N: "f4", O: "eb4 f4 ~@2 d4 c4 bb3 a3",
  P: "[d4@5 ~@3]/2", Q: "c4!2 ~ c4!3 ~ c4", R: "f4!2 ~ f4!3 ~ f4", S: "g3!2 ~ g3!3 ~ g3", T: "eb4", U: "a4",
  V: "[d5@6 ~ d5]/2", W: "[g5@9 f5 eb5 d5 c5 bb4 a4 g4]/2", X: "[gb4@10 eb4@2 eb4@3 d4]/2", Y: "f4@3 g4",
  Z: "g4@3 f4 f4@3 f4", AA: "[f4@2 c5@5 ~]/2", AB: "ab5@12 g5@2 ab5 g5", AC: "f5@3 g5 f5@3 eb5", AD: "[f5 ab5@3]/2",
  AE: "bb5@12 a5@2 bb5 a5", AF: "g5@3 a5 g5@3 f5", AG: "[g5@2 bb5@5 ~]/2", AH: "c6@12 b5@2 c6 b5",
  AI: "a5@3 b5 a5@3 g5", AJ: "[a5@2 c6@5 ~]/2", AK: "[c6@7 ~]/2", AL: "[e6@7 ~]/2",
})).s("gm_violin").gain(0.4)

// other · viola
const viola = note(`<
  A@2 B@2 A@2 C D E@2 ~@2 F G H I J@2 K L M@2 N@2 O@2 A@2 C P Q@2 R@2 S@2 ~@3 T U@2 V W X@2 Y@2 Z AA AB@2 Z AA AB@2 AC
  AD AE@2 AF AG AH@2 AF AG AH@2 AI AJ AK@2 AI AJ AK@2 AL@2 ~@2
>`.pickRestart({
  A: "[f4@12 f4 e4 eb4 d4]/2", B: "[d4@3 ~]/2", C: "d4", D: "c4 d4 ~@2 d4 eb4 e4 f4", E: "[f4@5 ~@3]/2", F: "a3@7 g3",
  G: "a3 ~@7", H: "c3", I: "e3", J: "[f3@5 ~@3]/2", K: "f3", L: "g3", M: "[f3@6 ~ f3]/2",
  N: "[a3@9 c4 bb3 a3 g3 f3 e3 d3]/2", O: "[db3@10 f3@2 f3@3 f3]/2", P: "c4 d4 ~@2 d4 c4 bb3 a3",
  Q: "[g3@5 d4 g4 d4]/2", R: "[f4@3 eb4 eb4@6 c4@2 f4@3 c4]/2", S: "[d4@5 ~@3]/2", T: "~ d3 g3 bb3",
  U: "[d4@3 c4 c4@6 c4@2 f4@3 c4]/2", V: "d4@9 g4 f4 eb4 d4 c4 bb3 a3", W: "g3 ~@2 d4",
  X: "[g4@9 f4 eb4 d4 c4 bb3 a3 g3]/2", Y: "[gb3@10 eb3@2 eb3@3 d3]/2", Z: "f3@3 g3", AA: "g3@3 f3 f3@3 f3",
  AB: "[f3@2 c4@5 ~]/2", AC: "ab4@12 g4@2 ab4 g4", AD: "f4@3 g4 f4@3 eb4", AE: "[f4 ab4@3]/2", AF: "bb4@12 a4@2 bb4 a4",
  AG: "g4@3 a4 g4@3 f4", AH: "[g4@2 bb4@5 ~]/2", AI: "c5@12 b4@2 c5 b4", AJ: "a4@3 b4 a4@3 g4", AK: "[a4@2 c5@5 ~]/2",
  AL: "[c5@12 c5 b4 bb4 a4]/2",
})).s("gm_viola").gain(0.4)

// bass · cello · "Violoncello"
const bass = note(`<
  A B C D A B C D A@2 E F G A E F A@2 C H G A@3 C@2 A B C I E@2 F J K E F J K E L J E@4 H M J N F O J N F O P N F Q R S
  L T R S L T U V W X U V W X U V ~@2
>`.pickRestart({
  A: "d2!8", B: "d2!4 d3 db3 c3 b2", C: "bb2!8", D: "ab2 bb2!7", E: "g2!8", F: "c2!8", G: "d2!7 c2", H: "c3!8",
  I: "ab2 bb2!3 d3 c3 bb2 a2", J: "f2!8", K: "g2!6 d3!2", L: "eb2!8", M: "c3!4 a2 ab2 g2 gb2", N: "f2!5 eb2 d2 db2",
  O: "c2!5 d2 eb2 e2", P: "f2!3 c2 f2!4", Q: "c2!5 d2 eb2 f2", R: "g2!3 f2 g2!4", S: "g2!5 gb2 f2 e2",
  T: "eb2!5 e2 f2 gb2", U: "a2!3 g2 a2!4", V: "a2!5 ab2 g2 gb2", W: "f2!3 e2 f2!4", X: "f2!5 gb2 g2 ab2",
})).s("gm_cello").gain(0.4)

stack(violin, viola, bass)