Strudelify

And You Don't Remember

Mariah Carey

KeyB♭ majorTempo80 bpm
0:00/0:00
// And You Don't Remember — Mariah Carey
// 80 bpm, 6/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (6/4 at bar 1, 3/4 at bar 4, 6/4 at bar 5, 3/4 at bar 25, ...) are rendered on a constant 6/4 grid of one bar per cycle
// note: Full arrangement: all 54 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(80/6)

// 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 M N O P Q R S T U V W X Y@2 Z AA AB AC AD AE AF AG AH AI AJ@3 AK AL AM AN AO AP Q R S T U V
  AQ@3
>`.pickRestart({
  A: "~@6 f4 g4 bb4 ~ c5 ~ [f4,bb4,d5]@8 ~@2 d5 ~", // Bb
  B: "[f4,a4,c5]@4 ~@2 f4 g4 bb4 ~ c5 ~ d4@8 g4 ~ bb4 ~, ~@12 bb4@5 ~@7", // F
  C: "eb5@3 ~ d5@3 ~ c5@3 ~ bb4@4 ~@2 [bb3,e4,g4] ~ [d4,f4] ~ [c4,e4] ~, eb4@7 ~@5, bb4 ~@2", // Edim Dm C
  D: "f3@8 ~@4 [bb2,d3]@5 ~ c4 ~ f3 ~ bb3 ~, d4@5 ~@19", E: "f3@8 ~@4 [a2,f3]@5 ~ c4 ~ f3 ~ c4 ~, c4 ~@5",
  F: "[bb3,d4]@5 ~@7 [g2,d3]@5 ~ bb3 ~ c4 ~ bb3 ~", G: "eb4@4 ~@14 bb3 ~ eb4 ~ bb3 ~, ~@3 gb2@2 ~",
  H: "f3@8 ~@4 [bb2,d3]@5 ~ d4 ~ f3 ~ bb3 ~, d4@5 ~@19", // Bb
  I: "[bb3,d4,f4]@4 ~@2 [bb3,d4]@3 ~ [bb3,d4]@5 ~@3 f4 ~ bb3 ~ d4 ~", J: "bb3@2 ~ [g2,eb3,bb3]@2 ~, eb4@5 ~@19",
  K: "bb3 ~@2, eb4 ~@5", L: "[g3,a3]@2 ~ [gb3,a3]@2 ~",
  M: "[bb3,d4,g4]@4 ~@2 [c4,gb4,a4]@4 ~@2 bb4@4 ~@2 bb4 ~ a4 ~ g4 ~, ~@3 d4@2 ~", // Gm Gbdim
  N: "[g4,bb4]@2 ~ [eb4,bb4]@2 ~, eb5 ~@7", O: "[g4,bb4]@8 ~@10 f4 g4 bb4 ~ c5 ~, eb5 ~@2 eb4@2 ~",
  P: "[f4,bb4,d5] ~ [f4,bb4,d5]@11 ~@5 f4 g4 bb4 ~ c5 ~", Q: "[f4,a4,c5,d5] ~ [f4,a4,c5,d5]@11 ~@5 f4 g4 bb4 ~ c5 bb4",
  R: "[f4,ab4,d5]@8 ~@4 ab4@6 ab4@2 c5 ~ c5 ~, ~@3 [d4,c5]@2 ~, ~@18 f4 ~@5", // Ddim D7
  S: "[eb4,c5]@4 ~@2 [eb4,g4]@4 ~@2 bb4@4 ~@2 f4 g4 bb4 ~ c5 ~, ~@3 eb4@2 ~", // Cm Eb
  T: "[bb4,d5,f5] ~ [f4,bb4,d5]@11 ~@5 f4 g4 bb4 ~ c5 ~", // Bb
  U: "[f4,a4,c5,d5] ~ [f4,a4,c5,d5]@3 ~ [c4,f4,a4]@8 ~@4 f4 g4 bb4 ~ c5 ~", // Dm7 F
  V: "[f4,ab4]@6 [c4,f4,ab4]@8 ~@4 [f4,ab4] ~ d5 ~ d5 ~, d5 ~@2", W: "[eb4,g4]@4 ~@2 [eb4,gb4]@2 ~ [d4,gb4]@2 ~",
  X: "[eb4,g4]@2 ~ [d4,f4,bb4]@2 ~", // Eb Bb
  Y: "[~@12 [bb3,d4,f4]@4 ~@2 [bb3,d4]@3 ~ [bb3,d4]@5 ~@3 f4 ~ bb3 ~ d4 ~ bb3@8 ~@4, ~@36 eb4@5 ~@7]/2", // Bb
  Z: "[g2,eb3,bb3]@2 ~ bb3@2 ~, ~@3 eb4 ~@2", AA: "~@3 [g3,a3]@2 ~",
  AB: "[gb3,a3]@4 ~@2 [bb3,d4,g4]@2 ~ [c4,gb4,a4]@2 ~", // Gbm Gm Gbdim
  AC: "bb4@4 ~@2 bb4 ~ a4 ~ g4 ~ [g4,bb4]@8 ~@4, d4@8 ~@4 eb5@3 ~@9", AD: "[eb4,bb4]@2 ~ [g4,bb4]@2 ~, ~@3 eb5 ~@2",
  AE: "~@6 f4 g4 bb4 ~ c5 ~ [f4,bb4,d5] ~ [f4,bb4,d5]@10, eb4 ~@2", // Bb
  AF: "~@6 f4 g4 bb4 ~ c5 ~ [f4,a4,c5,d5] ~ [f4,a4,c5,d5]@10", AG: "~@6 f4 g4 bb4 ~ c5 bb4 [f4,ab4,d5]@8 ~@4",
  AH: "ab4@6 ab4@2 c5 ~ c5 ~ [eb4,c5]@4 ~@2 [eb4,g4]@4 ~@2, [d4,c5] ~@2, ~@6 f4 ~@17", // Cm Eb D7
  AI: "bb4@4 ~@2 f4 g4 bb4 ~ c5 ~ [bb4,d5,f5] ~ [f4,bb4,d5]@10, eb4 ~@2", // Bb
  AJ: "[~@6 f4 g4 bb4 ~ c5 ~ [f4,a4,c5,d5] ~ [f4,a4,c5,d5]@3 ~ [c4,f4,a4]@8 ~@4 f4 g4 bb4 ~ c5 ~ [f4,ab4]@6 [c4,f4,ab4]@8 ~@4 [f4,ab4] ~ d5 ~ d5 ~ [eb4,g4]@8 ~@4, ~@9 d5@2 ~@7]/3", // Dm7 F Fm Eb
  AK: "[eb4,gb4]@4 ~@2 [d4,gb4]@4 ~@2 bb4@4 ~@2 c5 ~ bb4 ~ a4 ~", AL: "[c4,g4]@2 ~ c4@2 ~, ~@4 gb4 ~@3",
  AM: "[d4,g4]@2 ~ [d4,g4]@2 ~", AN: "[g4,bb4]@2 ~ [g4,bb4]@2 ~ [g4,bb4]@2 ~ [g4,bb4]@2 ~",
  AO: "[g4,bb4,eb5,f5]@2 ~ [g4,bb4,eb5,f5] ~@2", AP: "[f4,bb4,d5] ~ [f4,bb4,d5]@11 ~@11",
  AQ: "[[c4,eb4]@8 ~@4 d4@4 ~@2 [c4,eb4]@11 ~@8 [bb1,bb2,d4,f4,bb4]@18 ~@17]/3", // Cm Bb
})).s("gm_piano").gain(0.4)

// bass · fretless bass · "bass"
const bass = note(`<
  A B C D E F G D H I J K L M N O P Q R S P T U@2 V W X Y Z AA AB AC AD AE AF AG AH AI AJ AK AL AM AN AO S P Q R S P T
  AP@3
>`.pickRestart({
  A: "~@3 bb2@2 ~", B: "d3@8 ~@2 d3 ~ g3@8 ~@2 g3 ~", C: "gb3@16 ~@4 bb2 ~ f2 ~", D: "bb2@8 ~@2 bb2 ~@13",
  E: "a2@8 ~@2 a2 ~@13", F: "g2@8 ~@2 g2 ~@13", G: "gb2@8 ~@2 gb2 ~ gb2@8 ~@4", H: "ab2@8 ~@2 ab2 ~ ab2@8 ~@4",
  I: "g2@8 ~@2 g2 ~ g2@8 ~@4", J: "gb2@8 ~@2 gb2 ~ gb2@5 ~@3 gb2 ~ gb2 ~", K: "d2@8 ~@2 d2 ~ d2@5 ~@3 d2 ~ gb2 ~",
  L: "g2@4 ~@2 d2@4 ~@2 g2@5 ~@3 g2 ~ g2 ~", M: "c2@8 ~@2 c2 ~ c2@5 ~@3 c2 ~ c2 ~",
  N: "f2@8 ~@2 f2 ~ f2@4 ~@2 f2 ~ f2 ~ f2 ~", O: "bb2@8 ~@2 bb2 ~ bb2@8 ~@4", P: "d2@8 ~@2 d2 ~ d2@8 ~@4",
  Q: "f2@8 ~@2 f2 ~ f2@8 ~@4", R: "eb2@8 ~@2 eb2 ~ gb2@8 ~@4", S: "bb1@8 ~@2 bb1 ~ bb1@8 ~@4",
  T: "d2@8 ~ d2 eb2 e2 f2@4 ~@2 ab2@4 ~@2", U: "[eb2@8 ~@2 eb2 ~ ab2@16 ~@8 bb2@8 ~@2 f2 ~, f2 ~@47]/2",
  V: "bb2@5 ~@7 ab2@8 ~@2 ab2 ~", W: "ab2@8 ~@4 g2@8 ~@2 g2 ~", X: "g2@8 ~@4 gb2@8 ~@2 gb2 ~",
  Y: "gb2@5 ~@3 gb2 ~ gb2 ~ d2@8 ~@2 d2 ~", Z: "d2@5 ~@3 d2 ~ gb2 ~ g2@4 ~@2 d2@4 ~@2",
  AA: "g2@5 ~@3 g2 ~ g2 ~ c2@8 ~@2 c2 ~", AB: "c2@5 ~@3 c2 ~ c2 ~ f2@8 ~@2 f2 ~",
  AC: "f2@4 ~@2 f2 ~ f2 ~ f2 ~ bb2@8 ~@2 bb2 ~", AD: "bb2@8 ~@4 d2@8 ~@2 d2 ~", AE: "d2@8 ~@4 f2@8 ~@2 f2 ~",
  AF: "f2@8 ~@4 eb2@8 ~@2 eb2 ~", AG: "gb2@8 ~@4 bb1@8 ~@2 bb1 ~", AH: "bb1@8 ~@4 d2@8 ~@2 d2 ~",
  AI: "d2@8 ~@4 d2@8 ~ d2 eb2 e2", AJ: "f2@4 ~@2 ab2@4 ~@2 eb2@8 ~@2 eb2 ~, ~@12 f2 ~@11", AK: "ab2@6 ab2@2 ~ ab2@2 ~",
  AL: "d2@5 ~@3 d2 ~ d2 ~ d2@5 ~@3 d2 ~ gb2 ~", AM: "g2@8 ~@2 g2 ~ f2@8 ~@2 f2 ~", AN: "eb2@8 ~@2 eb2 ~ eb2@8 ~@4",
  AO: "f2@5 ~@3 f2 ~ f2 ~ f2@4 ~@2 f2 ~ f2 ~ f2 ~", AP: "[gb2@29 ~@8 bb2@18 ~@17]/3",
})).s("gm_fretless_bass").gain(0.57)

// chords · pad halo · "pad"
const pad_halo = note(`<
  A B C D E F G D@2 H G I J K L D M N O D M P Q R@5 S T@6 U@4 V W F X Y D M N O D M P Z AA@2
>`.pickRestart({
  A: "~ [f4,bb4,d5]", B: "[f4,a4,d5] [g4,bb4,d5]", C: "[eb4,gb4,bb4]@8 ~ [eb4,g4,bb4]@3", D: "[f4,bb4,d5]",
  E: "[f4,a4,c5]", F: "[g4,bb4,d5]", G: "[gb4,bb4,eb5]", H: "[g4,bb4,eb5]", I: "[d4,gb4,a4]@2 ~ [d4,gb4,a4]@2 ~",
  J: "[d4,g4,bb4]@2 ~ [d4,gb4,a4]@2 ~ [d4,g4,bb4]@2 ~@4", K: "[eb4,g4,c5]@2 ~", L: "[eb4,g4,bb4]@2 ~", M: "[f4,a4,d5]",
  N: "[f4,ab4,c5]", O: "[eb4,g4,bb4] [eb4,gb4,bb4]", P: "[f4,ab4,d5]", Q: "[eb4,g4,bb4] [eb4,ab4,c5]",
  R: "[~@3 [f4,bb4,d5]@6 [f4,bb4,d5]@6 [g4,bb4,eb5]@6 [gb4,bb4,eb5]@6 [d4,gb4,a4]@2 ~]/5", // Bb Eb Ebm D
  S: "[d4,gb4,a4]@4 ~@2 [d4,g4,bb4]@2 ~ [d4,gb4,a4]@2 ~", // D Gm D
  T: "[[d4,g4,bb4] ~@2 [eb4,g4,c5]@4 ~@2 [eb4,g4,bb4]@4 ~@2 [f4,bb4,d5]@6 [f4,a4,d5]@6 [f4,ab4,c5]@6 [eb4,g4,bb4]@3]/6", // Gm Cm Eb Bb Dm Fm Eb
  U: "[[eb4,gb4,bb4] [f4,bb4,d5]@2 [f4,a4,d5]@2 [f4,ab4,d5]@2 [eb4,g4,bb4]]/4", V: "[eb4,ab4,c5]", W: "[gb4,a4,d5]",
  X: "[e4,g4,bb4]", Y: "[eb4,g4,bb4]", Z: "[eb4,gb4,bb4]", AA: "[~@13 [f4,bb4]@18 ~@17]/2",
})).s("gm_pad_halo").gain(0.17)

// other · string ensemble 2 · "strings high"
const string_ensemble_2 = note("<A B C ~@37 D E F G H D I J K D@2 L ~@2>".pickRestart({
  A: "~ [bb4,bb5]", B: "[d5,d6] [g4,g5]", C: "[eb4,eb5]@3 [eb4,eb5]", D: "[d4,d5]", E: "[g4,g5]", F: "[e4,e5]",
  G: "[eb4,eb5]@2 ~", H: "[bb3,bb4]@2 ~", I: "[f4,f5]", J: "[eb4,eb5]", K: "[bb3,bb4]", L: "eb5",
})).s("gm_string_ensemble_2").gain(0.3).pan(0.7)

// other · string ensemble 1 · "strings low"
const string_ensemble_1 = note("<A B C ~@21 D ~@15 E F G H I E J K L E@2 M ~@2>".pickRestart({
  A: "~ [bb3,bb4]", B: "[d4,d5] [g3,g4]", C: "[eb3,eb4]@3 [eb3,eb4]", D: "~@6 d4 eb4 d4 ~ eb4 ~@13", E: "[d3,d4]",
  F: "[g3,g4]", G: "[e3,e4]", H: "[eb3,eb4]@2 ~", I: "[bb2,bb3]@2 ~", J: "[f3,f4]", K: "[eb3,eb4]", L: "[bb2,bb3]",
  M: "eb4",
})).s("gm_string_ensemble_1").gain(0.5).pan(0.3)

// drums · kick
const kick = s("bd").struct("<[~@6 x ~@4 x] [x ~@4 x!2 ~@4 x] [x ~@4 x ~@3 x!3] [x ~@4 x!2 ~@4 x]!49 ~@2>").gain(0.55)

// drums · snare
const snare = s("sd").struct("<~@2 [~@9 x!3] [x!2]!49 ~@2>").gain(0.44)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@2 [~@11 x] ~@51>").gain(0.44)

// drums · high tom
const high_tom = s("ht").struct("<~@2 [~@9 x!2 ~] ~@48 [~@11 x] ~@2>").gain(0.44)

// drums · china
const china = s("cr").struct("<A B C D ~@7 D ~@3 D ~@7 E A ~@2 A ~@3 A ~@8 D ~ D ~@9 F ~>".pickRestart({
  A: "~ x", B: "x ~@4 x!2 ~@5", C: "x ~@4 x ~@6", D: "x", E: "~@5 x ~@6", F: "~ x ~@22",
})).gain(0.44)

stack(piano, bass, pad_halo, string_ensemble_2, string_ensemble_1, kick, snare, hihat, mid_tom, high_tom, china)

More by Mariah Carey