Strudelify
Never Forget You cover art

1994 · Never Forget You EP

Never Forget You

Mariah Carey

KeyD majorTempo80 bpm
0:00/0:00
// Never Forget You — Mariah Carey
// 80 bpm, 3/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 3/4 at bar 3) are rendered on a constant 3/4 grid of one bar per cycle
// note: duplicate parts dropped: ch 9 "strings" string ensemble 2 (copy of ch 5 "sinth" synth strings 2)
// note: Full arrangement: all 107 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(80/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
const piano = note(`<
  A B C D E F G H I J K L I J K L M N O P Q R S T U V W X Y Z Y Z K AA I J K L I J K L M N O P Q R S T U V W X Y Z Y Z K
  AA AB AC AB AD AE AF AG T U V W X Y Z Y Z AH AI AJ AK U V W X Y Z Y Z U V W X Y Z Y Z U V W X Y Z Y Z K AA AL
>`.pickRestart({
  A: "[a3,d4,f#4]@2 ~", B: "[f#3,a3,c#4]@2 ~", C: "[c4,e4,f#4]@2 ~", D: "[a3,d#4,f#4]@2 ~", E: "[b3,d4]@11 ~@13",
  F: "c#4@5 ~@7 c#4@3 ~@9, g3@7 ~", G: "[g3,b3,d4,f#4]@16 ~@6 e4 ~", H: "[f#3,a3,d4]@11 ~@13", I: "[f#3,a3]@11 ~@13",
  J: "[f#3,a3,c4,e4]@2 ~", K: "[g3,b3]@2 ~", L: "[a#3,d4]@2 ~", M: "[b3,c#4]@11 ~@13",
  N: "[a#3,d4]@8 ~@4 [a#3,d4,f#4]@5 ~@7", O: "a3@2 ~, e4 ~@7", P: "g#3@2 ~, d4 ~@23", Q: "[d4,g4,b4]@2 ~",
  R: "[d4,a4]@2 ~", S: "[d4,g4]@2 ~ [c#4,e4]@2 ~", T: "[d4,e4,g4]@2 ~", U: "[d4,f#4,a4]@3 ~@9 [d4,f#4,a4]@8 ~@4",
  V: "[c#4,f#4]@2 ~", W: "[c4,e4]@2 ~", X: "[b3,d#4]@2 ~", Y: "[b3,d4]@2 ~", Z: "[g3,e4]@2 ~", AA: "[f#3,a3]@2 ~",
  AB: "[e4,c#5]@2 ~", AC: "[f#4,b4,e5]@3 ~@5 [d4,f#4,b4]@11 ~@5", AD: "~@8 [f#4,a4,d5]@3 ~ [d4,f#4,b4]@5 ~@7",
  AE: "[g4,b4]@11 ~@13", AF: "[e4,c#5]@11 ~@13", AG: "[d4,f#4,b4]@5 ~@7 [c#4,e4,b4]@8 ~@4", AH: "[b3,d4]",
  AI: "[g3,e4]", AJ: "[g3,b3]", AK: "[f#3,a3]", AL: "[f#3,a3,d4]",
})).s("gm_piano").gain(0.4)

// chords · synth strings 2 · "sinth"
const synth_strings_2 = note(`<
  A B C D E F G H ~@16 I J K L M N M N O P ~@16 I J K L M N M N O P Q R Q R S Q T U I J K L M N M N M V O P I J K L M N
  M N I J K L M N M N I J K L M N M N O P ~
>`.pickRestart({
  A: "[a3,d4,f#4]@23 ~", B: "[f#3,a3,c#4]@23 ~", C: "[c4,e4,f#4]@23 ~", D: "[a3,d#4,f#4]", E: "[b3,d4]@2 ~",
  F: "[c#4,e4]@8 ~@4 [c#4,e4]@5 ~@7, g3@23 ~", G: "[g3,b3,d4,f#4]", H: "[f#3,a3,d4]@7 ~@5", I: "[d4,f#4,a4]",
  J: "[d4,e4,a4]", K: "[a3,c4,e4]", L: "[b3,d#4,f#4]", M: "[b3,e4,g4]", N: "[a3,c#4,e4]", O: "[b3,d4,g4]",
  P: "[a3,d4,f#4]", Q: "[f#3,a3,c#4]", R: "[f#3,b3,d4]", S: "[g3,b3,d4]", T: "[g3,b3,e4] [f#3,a3,c#4]",
  U: "[e3,g3,b3,e4]", V: "[c#4,e4,a4]",
})).s("gm_synth_strings_2").gain(0.48).pan(0.7)

// other · clarinet · "background"
const clarinet = note(`<
  A B C D E F D G H I ~ J G ~ H K ~ J G L ~@3 M N O@2 P Q R@2 S T U H I ~ J G ~ H K ~ J G L ~@3 M N O@2 P Q R@2 S T U
  ~@8 N O@2 P Q R@2 S V S W X N O@2 P Q R@2 S N O@2 P Q R@2 S N O@2 P Q R@2 S T U ~
>`.pickRestart({
  A: "~@21 e4 d4 ~", B: "c#4@2 ~", C: "b4@8 ~@4 a4@5 ~@3 g4@3 ~", D: "f#4@2 ~", E: "a4@8 ~@4 g4@5 ~@3 f#4@3 ~",
  F: "e4@5 ~@3 d4@3 ~ e4@3 ~ d4@3 ~ e4@3 ~", G: "d4@11 ~@13", H: "~@16 d4@3 ~ f#4@3 ~", I: "a4@5 ~@3 c5@11 ~@5",
  J: "a#4@8 ~@4 g4@5 ~@3 f#4@3 ~", K: "a4@5 ~@3 d5@11 ~@5", L: "~@8 g#4@3 ~ b4@3 ~ e5@5 ~@3",
  M: "~@12 b4@3 ~ b4@3 ~ b4@3 ~", N: "a4@3 ~@9 a4@8 ~@4", O: "f#4@3 ~ g4@3 ~ a4@3 ~ b4@3 ~ a4@3 ~@5",
  P: "b4@3 ~ a4@3 ~ g4@3 ~ f#4 ~ e4 ~ d#4@5 ~@3", Q: "a4@4 g4@4 ~@8 a4@3 ~ a4@3 ~",
  R: "[e4 ~ d4 ~ c#4@3 ~ c#4@3 ~ c#4@3 ~ d4@3 ~ e4@11 ~@9 a4@3 ~ a4@3 ~]/2",
  S: "e4 ~ d4 ~ c#4@3 ~ c#4@3 ~ c#4@3 ~ d4@3 ~ e4@3 ~", T: "e4@8 ~@2 d4 ~ e4@8 ~@2 d4 ~",
  U: "f#4 ~ e4 ~ d4 ~@3 d4@5 ~@11", V: "~@16 a4@3 ~ a4@3 ~", W: "e4@8 ~@2 d4 ~ e4@8 ~@2 f#4 ~", X: "e4 ~ d4@8 ~@14",
})).s("gm_clarinet").gain(0.27)

// chords · synth strings 1 · "pad"
const synth_strings_1 = note(`<
  A B C D E F G H I J K L M N H I O P Q R S T U V W X Y Z AA AB AC AB AC T I J K L M N H I O P Q R S T U V W X Y Z AA AB
  AC AB AC T AD Q AD Q AC AD U AE W X Y Z AA AB AC AB S AF AG AH W X Y Z AA AB AC AB W X Y Z AA AB AC AB W X Y Z AA AB
  AC AB AC T AI
>`.pickRestart({
  A: "[a4,d5,f#5]@23 ~", B: "[f#4,a4,c#5]@23 ~", C: "[c5,e5,f#5]@23 ~", D: "[a4,d#5,f#5]", E: "[b4,d5]@2 ~",
  F: "[c#5,e5]@8 ~@4 [c#5,e5]@5 ~@7, g4@23 ~", G: "[g4,b4,d5,f#5]", H: "[f#4,a4,d5]@7 ~@5", I: "[f#4,d5]",
  J: "[f#4,a4]", K: "[g4,b4]", L: "[g4,a#4]", M: "[d4,a4]", N: "[f#4,a4,c5,e5]", O: "[g#4,b4,c#5]", P: "[d4,a#4]",
  Q: "[f#4,b4,d5]", R: "[g#4,b4,e5]", S: "[g4,b4,e5]", T: "[f#4,a4,d5]", U: "[g4,b4,e5] [f#4,a4,c#5]", V: "[e4,g4,b4]",
  W: "[f#4,a4,d5]@2 ~", X: "[e4,a4,d5]@2 ~", Y: "[c4,e4,a4]@2 ~", Z: "[f#4,b4,d#5]@2 ~", AA: "[g4,b4,e5]@2 ~",
  AB: "[a4,c#5,e5]", AC: "[g4,b4,d5]", AD: "[f#4,a4,c#5]", AE: "[e4,g4,b4,e5]", AF: "[a4,c#5,e5]@2 ~",
  AG: "[g4,b4,d5]@2 ~", AH: "[a4,d5,f#5]@2 ~", AI: "[d4,d5]",
})).s("gm_synth_strings_1").gain(0.12)

// bass · electric bass finger · "bass"
const bass = note(`<
  A@2 B C D E F G H I A J H K L J M N O P Q R S T A U V W X E X Y A Z H I A J H K L J M N O P Q R S T A U V W X E X Y A
  AA AB AC AD AE AF AG AH T A U V W X E X Y AI AJ U AK A U V W X E X Y A U V W X E X Y A U V W X E X Y A AA K
>`.pickRestart({
  A: "d2@2 ~", B: "d2@11 ~@5 a2@3 ~ f#2@3 ~", C: "b2@11 ~@5 f#2@5 ~@3", D: "e2@11 ~@5 b2@3 ~ e2@3 ~", E: "a2@2 ~",
  F: "d2@16 ~@4 d2@3 ~", G: "d2@8 ~@4 a2@3 ~@9", H: "d2@16 ~@4 f#2@3 ~", I: "d2@2 ~ d3@2 ~",
  J: "d2@11 ~@5 f#2@3 ~ a2@3 ~", K: "d2", L: "d2@5 d2", M: "c#3@5 ~@3 g2@5 ~@3 c#2@5 ~@3", N: "f#2@2 ~ c#3@2 ~",
  O: "b2@3 ~ f#2@3 ~ b2@8 ~@4 d2@3 ~", P: "e2@11 ~@5 d2@3 ~ e2@3 ~", Q: "e2@3 ~ b2@3 ~ e3@8 ~@4 e2@3 ~",
  R: "f#2@3 ~ d3@3 ~ f#3@11 ~@5", S: "e2@3 ~ b2@3 ~ e3@3 ~ f#2@3 ~ c#3@3 ~ f#3@3 ~",
  T: "a2@3 ~ e3@3 ~ a3@5 ~@3 a2@3 ~ a2@3 ~", U: "d2@16 ~@4 a2@3 ~", V: "d2@8 ~@4 a2@5 ~@3 g2@3 ~",
  W: "b2@8 ~@4 f#2 ~ b2 ~ f#2@3 ~ f#2@3 ~", X: "e2@11 ~@5 e3@3 ~ e2@3 ~", Y: "a2@2 ~ e2@2 ~",
  Z: "d2@8 ~@4 a2@3 ~ d3@3 ~ a2@3 ~", AA: "d2@3 ~ d3@3 ~ a2@3 ~ d3@3 ~ a2@3 ~ g2@3 ~", AB: "f#2@8 ~@4 c#3@5 ~@3 c3@3 ~",
  AC: "b2@3 ~ f#2@3 ~ d2@3 ~ b2@3 ~ a2@3 ~ g2@3 ~", AD: "f#2@8 ~@4 c#3 ~ f#3 ~ c#3@3 ~ c3@3 ~",
  AE: "b2@8 ~@4 f#2 ~ b2 ~ f#2@5 ~@3", AF: "g2@3 ~ b2@3 ~ g3@5 ~@3 d3@3 ~ g2@3 ~",
  AG: "f#2@8 ~@4 c#3 ~ f#3 ~ c#3@3 ~ f#2@3 ~", AH: "e2@8 ~@4 f#2@3 ~ c#3@3 ~ f#3@3 ~",
  AI: "e2@8 ~@4 e3@3 ~ b2@3 ~ e2@3 ~", AJ: "a2@8 ~@4 e3 ~ b3 ~ e3@5 ~@3", AK: "d2@8 ~@4 d3@3 ~ d2@3 ~ d3@3 ~",
})).s("gm_electric_bass_finger").gain(0.48)

// drums · kick
const kick = s("bd").struct("<[x ~ x!2 ~@2]!106 ~>").gain(0.44)

// drums · snare
const snare = s("sd").struct("<[x ~@4 x]!7 x [x ~@4 x]!15 [x ~@7 x!4] [x ~@4 x]!25 [x ~@7 x!4] [x ~@4 x]!56 ~>")
  .gain(0.44)

// drums · hihat
const hihat = s("hh").struct(`<
  [x ~@3 x ~@3 x ~@3 x ~@2 x!2 ~@3 x ~@3]!7
  [x!4 ~@2]
  [x ~@3 x ~@3 x ~@3 x ~@2 x!2 ~@3 x ~@3]!98
  ~
>`).gain(0.44)

// drums · ride
const ride = s("rd").struct("<~@7 [~ x] ~@99>").gain(0.44)

stack(piano, synth_strings_2, clarinet, synth_strings_1, bass, kick, snare, hihat, ride)

More by Mariah Carey