Strudelify

Vanishing

Mariah Carey

KeyE majorTempo90 bpm
0:00/0:00
// Vanishing — Mariah Carey
// 90 bpm, 3/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 129 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.

// chords · piano · "piano rigt hand"
const piano = note(`<
  A B C D E F G H I ~ J K L M N O P Q R S T U V W X Y Z AA R AB AC F AD AE I ~ AF K AG AH AI O P AJ R S AK U V W X Y AL
  AM R AN AO AP AQ AR AS AT AU AV AW AX AY AZ BA BB BC BD BE BF BG BH ~ BI BJ BK BJ BL BM BN BO AE I BP BQ BR AG AH N BS
  P BT R S BU BV@3 X Y BW BX R BY BZ CA CB ~ CC CD CE CF CG CH@3 CI CJ CK CL CM CN CO CP@2
>`.pickRestart({
  A: "[e3,a3,c#4]@6 ~@2 [a3,e4]@5 ~@3 [c#4,a4]@6 ~@2", B: "[b3,g#4]@11 ~@5 [g#3,b3,e4]@3 ~ b3@2 g#3@2",
  C: "[e3,a3,c#4]@3 ~ [a3,e4]@3 ~ [c#4,e4,a4]@3 ~", D: "[b3,e4,g#4]@6 ~@2 [g#3,b3,e4]@3 ~",
  E: "[f#3,b3,d#4]@11 ~@5 f#3@6 ~@2", F: "[f#3,b3]@11 ~@13", G: "[c#4,f#4]@5 ~@3 c#4@11 ~@5, f#3@2 ~",
  H: "c#4@5 ~@3 d#4@6 ~@2 [d#3,a#3,c#4]@6 ~@2, [f#3,a#3] ~", I: "[f#3,b3,d#4]@11 ~@13",
  J: "[a3,c#4] [a3,c#4,e4] [a3,c#4,f#4], f#4@5 ~@19", K: "[g#3,b3,e4]@3 ~@5 [g#3,b3,e4]@3 ~", L: "[d#3,b3]@2 ~",
  M: "[f#3,b3]@6 ~@2 [b3,d#4]@3 ~", N: "[a#3,d#4,f#4]@6 ~@2 [d#3,a#3,c#4]@11 ~@5",
  O: "c#4@6 ~@2 d#4@5 ~@3 [d#3,a#3,c#4]@6 ~@2, [e3,a#3]@11 ~@13", P: "[d#3,g#3,b3]@11 ~@5 g#3@3 ~@3 c#4@2",
  Q: "[b3,d#4] ~@2 [g#3,b3,d#4]@2 ~@7, g#3 ~@23", R: "[a3,c#4]@2 ~", S: "[g#3,b3,e4]@11 ~@13",
  T: "[a3,c#4,f#4]@3 ~ [a3,c#4,e4]@3 ~ [a3,c#4,f#4]@3 ~", U: "[a#3,c#4,e4]@17 ~@7", V: "~@8 [d#3,a#3,c#4]@11 ~@5",
  W: "[d#4,f#4]@3 ~@13 [f#3,a#3,b3]@6 ~@2, d#3@11 ~@13", X: "[e3,g#3,b3] ~@7",
  Y: "[g#3,b3,e4,g#4]@3 ~ [a3,d4,f#4]@3 ~ [g#3,b3,e4]@3 ~", Z: "[a3,c#4,d#4]@6 ~@2 [d#3,a3,c#4]@11 ~@5",
  AA: "d#3@11 ~@5 [d#3,g#3,b3]@5 ~@3, d#4 ~@7", AB: "[b3,e4,g#4]@3 ~ [a3,d4,f#4]@3 ~ [g#3,b3,e4]@3 ~",
  AC: "[f#3,b3,d#4]@11 ~@5 f#3@5 ~@3", AD: "[c#4,f#4]@5 ~@3 c#4@11 ~@5, f#3@17 ~@7",
  AE: "c#4@5 ~@3 d#4@6 ~@2 [d#3,a#3,c#4]@6 ~@2, [f#3,a#3]@11 ~@13", // D#7 F#
  AF: "[a3,c#4] [a3,c#4,e4] [a3,c#4], f#4@5 ~@11 f#4@5 ~@3", AG: "[d#3,b3]@17 ~@7",
  AH: "[f#3,b3]@11 ~@5 [b3,d#4]@6 ~@2", AI: "[a#3,d#4,f#4]@3 ~ [d#3,a#3,c#4]@6 ~@2",
  AJ: "[g#3,d#4]@2 ~@4 [g#3,b3,d#4]@3 ~@15, b3 ~@23", AK: "[a3,c#4,f#4]@5 ~@3 [a3,c#4,e4]@6 ~@2 [a3,c#4,f#4]@6 ~@2",
  AL: "[a#3,c#4]@17 ~@7", AM: "g#3@11 ~@5 b3@5 d#3@3, c#4@6 ~@10 g#3@3 ~@5",
  AN: "[g#3,b3,e4]@3 ~ [b3,e4,g#4]@3 ~ [e4,g#4,b4]@3 ~", AO: "[a#3,c#4,d#4]@17 ~@7",
  AP: "[g#3,c#4]@11 ~@5 g#3@3 ~ d#3@3 ~", AQ: "[a#3,c#4,f#4]@17 ~@7",
  AR: "g#3@6 ~@2 [g#3,g#4]@3 ~@5 [b3,b4]@3 ~ [c#4,c#5]@3 ~", AS: "[d#4,a#4,c#5]@6 ~@2 [a#3,c#4,d#4]@9 ~@7",
  AT: "[d#4,g#4]@17 ~@7", AU: "[e4,a4,c#5]@3 ~ [e4,a4,c#5]@3 ~ [e4,a4,c#5]@3 ~",
  AV: "[e4,g#4,b4]@5 ~@3 [e4,g#4,b4]@7 ~ [e4,g#4,b4]@6 ~@2", // E
  AW: "[c#4,e4,a4]@6 ~@2 [c#4,e4,a4]@5 ~@3 [c#4,e4,a4]@6 ~@2", // A
  AX: "[c#4,e4,f#4]@6 ~@2 [c#4,e4,f#4]@6 ~@2 [c#4,e4,f#4]@7 ~", AY: "[g3,b3,c#4,e4]@11 ~@13", AZ: "[b3,e4]@2 ~",
  BA: "~@16 f#3@3 ~@3 [f#3,b3]@2", BB: "[g#3,c#4]@3 ~@2 d#3@3 [f#3,b3]@3 ~@5 [d#3,g#3]@6 ~@2",
  BC: "[e3,g3,b3,c#4]@11 ~@13", BD: "[a#3,c#4,f#4] ~@2", BE: "[d#3,g#3]@17 ~@7",
  BF: "[g#3,b3,d#4,g#4]@3 ~ [b3,d#4,g#4,b4]@3 ~ [d#4,g#4,b4,d#5]@3 ~", BG: "[b4,c#5,e5,g5] ~",
  BH: "[c#4,e4,g#4]@11 ~@13", BI: "[d#3,d#4]@5 ~ [f#3,f#4]@6 ~@4 [b3,b4]@3 ~ b3@3 ~",
  BJ: "[c#4,e4,a4]@3 ~ [c#4,e4,a4]@3 ~ [c#4,e4,a4]@3 ~", BK: "[b3,e4,g#4]@3 ~ [b3,e4,g#4]@3 ~ [b3,e4,g#4]@3 ~",
  BL: "[g#4,b4]@6 ~@2 [g#4,b4]@6 ~@2 [g#4,b4]@5 ~@3", BM: "[d#4,f#4,b4]@3 ~ [d#4,f#4]@3 ~@9 [g#3,b3,d#4]@6 ~@2",
  BN: "[f#3,b3]@11 ~@5 [f#3,b3]@6 ~@2", BO: "[c#4,f#4]@6 ~@2 c#4@11 ~@5, f#3@17 ~@7", BP: "~@16 b3@3 ~ d#4@2 g#4@2",
  BQ: "[a3,c#4,f#4] [a3,c#4] [a3,c#4,f#4], ~@8 e4@5 ~@11", BR: "[g#3,b3,e4]@3 ~ [g#3,b3,e4]@3 ~ [g#3,b3,e4]@3 ~",
  BS: "c#4@5 ~@3 d#4@5 ~@3 [d#3,a#3,c#4]@7 ~, [e3,a#3]@11 ~@13", BT: "[b3,d#4] ~@5 [g#3,b3,d#4]@3 ~@15, g#3 ~@11",
  BU: "[a3,c#4,f#4]@6 ~@2 [a3,c#4,e4]@6 ~@2 [a3,c#4,f#4]@7 ~", // F#m A F#m
  BV: "[[a#3,c#4,e4]@8 [a#3,c#4,e4]@8 [a#3,c#4]@8 [d#3,a#3,c#4]@8 [d#3,a#3,c#4]@8 d#3@8 [d#4,f#4]@3 ~@13 [f#3,a#3,b3]@6 ~@2, ~@4 e4@4 ~@2 [a#3,c#4]@3 ~@5, ~@48 d#3@11 ~@13]/3", // A#dim A#m D#7 D#m Bmaj7 A#m
  BW: "[a#3,c#4,d#4]@5 ~@3 [a#3,c#4,d#4]@9 ~@5 g#4@2", BX: "g#3@11 ~@5 g#3@3 ~@3 d#3@2, c#4 ~@7",
  BY: "[g#3,b3,e4]@5 ~ [g#3,g#4]@5 ~@5 [c#4,c#5]@3 ~ [e4,e5]@3 ~", BZ: "[d#4,a#4,c#5,d#5]@5 ~@3 [d#4,a#4,c#5]@11 ~@5",
  CA: "[d#4,g#4]@11 ~@5 [a3,d#4,f#4]@6 ~@2", CB: "[b3,e4,g#4]@4 f#4@3 ~@17",
  CC: "[e3,a#3,c#4]@12 ~@4 [e3,a#3,c#4]@3 ~@5", CD: "[e3,g#3,b3]@6 ~@2 e3@3 ~@5 g#3@3 ~ c#4@3 ~",
  CE: "[e3,a3,c#4]@11 ~@5 [e3,a3,c#4]@5 ~@3", CF: "[e3,f#3,c#4]@5 ~@3 [e3,f#3,c#4]@6 ~@2 [e3,f#3,c#4]@6 ~@2",
  CG: "d4@3 ~ b3@3 ~ d4@4 ~@4 d4@3 ~@5",
  CH: "[d4@3 ~@5 d4@2 ~@6 d4@3 ~@9 f#4@5 ~@5 c#4 ~ b3@3 ~@13 [g#3,d4]@11 ~@5, ~@20 b3@11 ~@41, ~@3 g#3@4 ~@2]/3", // G#dim
  CI: "[a#3,c#4,d#4] ~@3", CJ: "b4@2 ~", CK: "[c#4,e4,a#4]@11 ~@5 [c#4,e4,a#4]@6 ~@2", CL: "[e4,g#4,c#5]@5 ~@19",
  CM: "[c#4,e4,g4,b4]@6 ~@2 [c#4,e4,g4]@5 ~@3 [c#4,e4,g4,b4]@6 ~@2", CN: "~ [b3,c#4,e4,g4]@18 ~@5",
  CO: "~@3 b3@4 f#3 ~@4 [c#4,f#4]@4 ~@3 b4@2 d#5@2 ~, ~@3 d#4@12 ~@4 c#5 ~@4, ~ [c#4,f#4]@3 ~@4", // F#5
  CP: "[~@4 c#6@2 ~ [b3,c#4,d#4,f#4,d#6]@20 ~@21]/2", // B
})).s("gm_piano").gain(0.45)

// chords · piano · "piano rigt hand" · soft notes
const piano_soft = note(`<
  ~@16 A ~@25 B ~@10 C ~@3 C ~ D ~@8 E F ~@7 G ~@4 H ~@2 I ~@7 I J ~@9 K C ~ L ~@2 M@2 N O ~@2 P Q R@2 ~@6 S T ~
>`.pickRestart({
  A: "~@6 b3 ~", B: "~@9 b3 c#4 ~", C: "~@6 f#3 ~", D: "~@10 [b3,b4]@3 ~ [c#4,c#5]@3 ~@7", E: "~@9 g#3@2 ~",
  F: "~@2 [f#3,b3]@2 g#3@2 ~@4 [g#3,c#4]@2 [f#3,b3]@3 ~@9", G: "~@5 [g#3,g#4]@3 ~@4", H: "~@4 [f#3,b3,d#4] ~@3",
  I: "~@4 a#4@3 ~@5 f#4@3 ~@9", J: "~@9 b3@2 ~", K: "~@6 f#4 ~", L: "~@10 [b3,b4]@5 ~@9", M: "[~@5 [g#3,c#4]@3 ~@4]/2",
  N: "~@10 c#4 ~", O: "~@4 e3 ~ b3 ~", P: "~@2 c#4@3 ~@5 c#4@2 b3@3 ~@3 c#4@2 b3@3 ~",
  Q: "~@2 c#4@2 b3@3 ~@3 c#4@2 b3@2 ~@4 c#4@3 ~@3", R: "[~@6 d#4 ~@3 c#4@4 ~@10]/2", S: "~@9 b3@6 ~ [f#4,c#5] ~@7",
  T: "f#5@2 b5 ~@21",
})).s("gm_piano").gain(0.2)

// bass · piano · "piano left hand"
const bass = note(`<
  A B C D E@2 F@2 G@2 A H I@2 J@2 K@2 A L M N O P Q@2 O R S T U@2 V@2 W@2 A H I@2 J@2 X@2 A Y Z AA O P Q@2 AB AC AD AE
  AF AG AH AI AJ AK AL AM AN AO AP@2 AQ AR AS AT AU AV AW@2 AX AY AZ AI BA BB BC BD V@2 BE@2 C H BF@2 BG@2 K@2 A L M N
  AT BH Q@2 AF BI BJ BK O BL BM BN BO AI BP BQ BR BS BT BU BV BI BW BX BY BZ CA@2 ~
>`.pickRestart({
  A: "[a1,a2]@2 ~", B: "[e1,e2]@17 ~@3 g#2@3 ~", C: "[a1,a2]@17 ~@7", D: "e1@16 ~@4 f#2@3 ~, f#2 ~@2",
  E: "[[b1,b2]@41 ~@3 f#2@3 ~]/2", F: "[[a#1,a#2]@33 ~@7 [g1,g2]@5 ~@3]/2", G: "[g#1@41 ~@7, g#2@2 ~]/2",
  H: "[e1,e2]@2 [e1,e2]", I: "[[b1,b2]@19 ~@5]/2", J: "[[f#1,f#2]@33 ~@7 [a1,g2]@3 ~ d#2@3 ~]/2",
  K: "[[g#1,g#2]@37 ~@11]/2", L: "[e1,e2]@17 ~@3 e2@3 ~", M: "a2@8 ~@4 a2@6 ~@2 a2@3 ~, a1@2 ~",
  N: "[a#1,a#2]@17 ~@3 a#1@3 ~", O: "[g1,g2]@16 ~@4 d#2@3 ~", P: "[g#1,g#2]@16 [d#1,d#2]@5 ~@3",
  Q: "[[e1,e2]@32 ~@12 e2@3 ~]/2", R: "g#1@17 ~@7, g#2@3 ~@5", S: "a#2@8 ~@4 a#2@9 ~@3, a#1@2 ~",
  T: "[f#1,f#2]@9 ~@13 c#2@2", U: "[[b1,b2]@40 ~@4 f#2@3 ~]/2", V: "[[a#1,a#2]@33 ~@7 [g1,g2]@6 ~@2]/2",
  W: "[g#1@5 ~, g#2@2 ~]/2", X: "[[g#1,g#2]@19 ~@5]/2", Y: "[e1,e2]@4 ~ e2", Z: "a2@8 ~@4 a2@5 ~@3 a2@3 ~, a1@2 ~",
  AA: "[a#1,a#2]@16 ~@4 a#1@3 ~", AB: "g2@8 ~@4 g2@6 ~@2 [g1,g2]@3 ~, g1@17 ~@7", AC: "g#1@2 ~, g#2 ~@3",
  AD: "a#2@8 ~@4 a#2@9 ~@3, a#1@17 ~@7", AE: "[f#1,f#2]@11 ~@9 [f#1,f#2]@2 f#2@2",
  AF: "g2@9 ~@3 g2@6 ~@2 d#2@3 ~, g1@17 ~@7", AG: "g#1@17 ~@3 d#2@3 ~, g#2 ~@2", AH: "[e1,e2]@16 ~@4 e2@3 ~",
  AI: "[e1,e2]@17 ~@7", AJ: "[g1,g2]@8 ~@2 d#2 ~", AK: "g#1@8 ~@2 g#2 ~, g#2 ~@2", AL: "[a#1,a#2]@17 ~@3 c#2@3 ~",
  AM: "e1@17 ~@3 e2@3 ~, e2@3 ~@5", AN: "a#2@8 ~@4 a#2@7 ~ a#2@4, a#1@2 ~", AO: "a#1@16 ~@4 a#2@3 ~, a#2@3 ~@5",
  AP: "[[c#1,c#2]@41 ~@3 e2@3 ~]/2", AQ: "g#2@8 ~@4 g#2@9 ~@3, g#1@2 ~", AR: "~@10 d#1 d#2", AS: "[c#1,c#2]@17 ~@7",
  AT: "[g1,g2]@17 ~@3 d#2@3 ~", AU: "g#2@8 ~@4 g#2@5 ~@3 d#2@3 ~, g#1@2 ~", AV: "[g#1,g#2]@16 ~@4 d#2@3 ~",
  AW: "[[e1,e2]@40 ~@5 [g1,g2]@3]/2", AX: "g#2@8 ~@4 g#2@5 ~@3 d#2@3 ~, g#1@17 ~@7", AY: "g#1@8 ~@2 g#2 ~, g#2@3 ~@5",
  AZ: "[a1,a2]@17 ~@3 c#2@3 ~", BA: "[a#1,a#2]@16 ~@4 a#2@3 ~", BB: "f#2@3 ~ f#2@5 ~@11 a#2@3 ~", BC: "[b1,b2]@2 ~",
  BD: "~@5 f#2", BE: "[g#1@5 ~, g#2@11 ~@5]/2", BF: "[[b1,b2]@37 ~@11]/2", BG: "[[f#1,f#2]@32 ~@8 [a1,g2]@3 ~ d#2@4]/2",
  BH: "[g#1,g#2]@8 [d#1,d#2]@3 ~", BI: "g#1@16 ~@4 g#2@3 ~, g#2 ~@2", BJ: "a#2@8 ~@4 a#2@5 ~@3 [d#1,d#2]@3 ~, a#1@2 ~",
  BK: "[e1,e2]@9 ~@11 [e1,e2]@3 ~", BL: "[g#1,g#2]@9 ~@7 d#2@3 ~ d#2@3 ~", BM: "[e1,e2]@9 ~@3 e2@8 ~@4",
  BN: "[e1,e2]@8 ~@12 g#2@3 ~", BO: "[a#1,a#2]@17 ~@3 d#2@3 ~", BP: "[a1,a2]@16 ~@4 a2@3 ~",
  BQ: "[a#1,a#2]@4 ~@6 a#2 f#2", BR: "g2@2 ~ g2@2 ~, g1@2 ~", BS: "[g#1,g#2]@11 ~@5 [g#1,g#2]@6 ~@2",
  BT: "[e1,e2]@5 ~@3 [e1,e2]@6 ~@2 [e1,e2]@6 ~@2", BU: "[e1,e2]@6 ~@2 [e1,e2]@6 ~@2 [e1,e2]@3 ~ [f#1,f#2]@3 ~",
  BV: "g2@2 ~ g2@2 ~, g1@17 ~@7", BW: "a2@8 ~@4 a2@6 ~@2 d#2@3 ~, a1@2 ~",
  BX: "[e1,e2]@6 ~@2 [e1,e2]@5 ~@3 [e1,e2]@6 ~@2", BY: "[e1,e2]@17 ~@3 b1@3 ~",
  BZ: "~ [e2,e3]@6 ~@2 [d#2,d#3]@6 ~@3 [c#2,c#3]@6", CA: "[~@3 [b1,b2]@38 ~@7]/2",
})).s("gm_piano").gain(0.48)

// bass · piano · "piano left hand" · soft notes
const bass_soft = note(`<
  ~@3 A ~@3 B ~ C ~@3 D ~ E ~ F ~@7 G ~ F ~ H ~@3 I ~ F ~@3 D ~ E ~ C ~@7 J ~ F ~ K ~ F ~@3 F L M ~ N ~@3 O ~@5 O ~ P
  ~@3 Q ~@3 I ~ F ~@3 D ~ E ~ F ~@7 M ~ P ~ R ~ S ~ M ~@3 T ~@3 K ~ U ~@7
>`.pickRestart({
  A: "~@12 f#2@5 ~@7", B: "~@6 a#2 ~@5", C: "~@4 g#2@3 ~", D: "~@3 b2@2 ~", E: "~@4 f#2 ~@3", F: "~@3 g#2@2 ~",
  G: "~@12 e2@5 ~@7", H: "~@4 f#2 ~ f#2 ~", I: "~@4 a#2 ~@3", J: "~@3 [e2,g#2]@2 ~", K: "~@6 [f1,f2] ~", L: "~@6 a#2 ~",
  M: "~@2 e2 ~", N: "~@12 a#2@5 ~@7", O: "~@6 [f#1,f#2] ~", P: "~@2 g#2 ~", Q: "~@3 f#2@2 ~", R: "~@2 [e1,e2] ~",
  S: "~@4 d#2 ~@3", T: "~@2 [a#1,a#2] ~", U: "~@12 g#2@5 ~@7",
})).s("gm_piano").gain(0.3)

stack(piano, piano_soft, bass, bass_soft)

More by Mariah Carey