Strudelify

Dreamlover

Mariah Carey

KeyC majorTempo100 bpm
0:00/0:00
// Dreamlover — Mariah Carey
// 100 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: bank select 127 (Roland MT-32 map) read through the MT-32 patch table: ch 3 "#GUITAR 2" Guitar 2 -> acoustic guitar steel
// note: Full arrangement: all 98 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(100/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 · epiano2 · "#EL.PIANO3"
const epiano2 = note(`<
  ~@8 A B A B A B A B A B A B A B A B A B A B A B A B A C A C A C A C A C A B A B A B A B A B A B A B A B ~@2 A C A C A
  C A C A C A C A C A C A C A C A C A C A C A C A C A C A C ~@4
>`.pickRestart({
  A: "[g3,a3,c4,e4]@12 ~@2 [e3,f3,a3,c4] ~", B: "[f3,g3,a#3,d4]@12 ~@2 [f3,g3,a#3,d4] ~",
  C: "~@8 a#4@2 a4@2 g4@2 [f3,g3,a#3,d4] ~, [f3,g3,a#3,d4]@6 ~ f4", // Gm7
})).s("gm_epiano2").gain(0.12).pan(0.3)

// bass · electric bass finger · "FINGERDBAS"
const bass = note(`<
  ~@8 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A C A B A B A B A B A B A B A B D E A B A B A
  B A B A B A B A B A B A B A B A B A B A B A B A B A B A B ~@4
>`.pickRestart({
  A: "f1 ~@6 f1", B: "g1!2 ~@5 g1", C: "g1!2 ~@6", D: "f1 ~@7", E: "~@7 g1",
})).s("gm_electric_bass_finger").gain(0.35)

// chords · alto sax
const alto_sax = note(`<
  ~ A@2 ~@3 B@2 ~@8 C D E F C G@3 H D I F C J K L M N O P Q N O R@2 ~ S T C D E F C G@3 H D I F C J K L M N O P Q N O
  R@2 ~ S T ~@4 U N O P Q N O R@2 ~@3 U N O P Q N O V@3
>`.pickRestart({
  A: "[~@4 c4 d4 f4 g4@9]/2", B: "[c7@3 ~ a6 ~@2 a6@2 ~ a6 ~@2 f6 ~ f6@15 ~@2, ~@7 g6 ~@8]/2",
  C: "~@2 a4 ~ a4@2 a4 ~ a4@2 g4@2 f4@2 g4@2", D: "~@2 a4@3 g4 ~@10", E: "~@2 a4 ~ a4 ~ a4 ~ a4@2 g4@2 f4@2 g4@2",
  F: "~@2 d4@2 c4 a3 c4@3 ~ c4@2 a3 ~@3",
  G: "[~@2 a4@3 ~@2 d4 f4 ~ g4 ~ a4@2 a4@6 f4@2 d4@2 ~@4 g4 ~ g4@4 ~@2 c4@2 a3 ~@9]/3",
  H: "~@2 c5 ~ a4@2 c5 ~ a4@2 g4 ~ f4@2 g4@2", I: "~@2 a4 ~ a4 ~ a4 ~ a4@2 g4 ~ f4@2 g4@2",
  J: "~@2 a4@4 ~@6 f4 g4 a4@2", K: "~@4 f4 g4 a4@3 ~@3 f4 g4 a4@2", L: "~@2 d4 ~ f4@2 d4 ~ a4 ~ g4@2 f4@2 f4@2",
  M: "d4 c4 a3 g3 [f3,f4,a4,c5]@3 ~ [c4,f4,a4]@2 [g4,a#4] ~ [f4,a4,c5]@2 ~@2", // F Gm F
  N: "[d4,g4,a#4]@2 [f4,a4] ~@3 [a3,d4,f4]@2 ~@2 [f4,a4] ~ [d4,g4,a#4] ~ [f4,a4,c5]@2", // Gm F Dm F Gm F
  O: "~@2 [f4,a4] ~ [d4,g4,a#4] ~ [f4,a4,c5]@2 ~@2 [f4,a4] ~ [d4,g4,a#4] ~ [f4,a4,c5]@2", // F Gm F Gm F
  P: "[g4,a#4] ~ [f4,a4,c5]@2 [g4,a#4] ~ [f4,a4,c5]@2 [d4,g4,a#4] ~ [c4,f4,a4] ~ [c4,f4,a4] ~ [d4,f4,a4] [d4,g4]", // Gm F Gm F Gm F Dm G5
  Q: "[c4,f4] ~@3 [f4,a4,c5]@2 ~@2 [c4,f4,a4]@2 [g4,a#4] ~ [f4,a4,c5]@2 ~@2", // F5 F Gm F
  R: "[[g4,a#4] ~ [f4,a4,c5]@2 [g4,a#4] ~ [f4,a4,c5]@2 [d4,g4,a#4] ~ [c4,f4,a4] ~ [c4,f4,a4] ~ [d4,g4,a#4]@8 [f4,a4]@10]/2", // Gm F Gm F Gm F Gm F
  S: "~@4 a6@2 ~@2 f6@2 g6 ~ a6@2 ~@2", T: "g6@2 f6 ~@3 d6@2 ~@8",
  U: "~@4 [f4,a4,c5]@2 ~@2 [c4,f4,a4]@2 [g4,a#4] ~ [f4,a4,c5]@2 ~@2", // F Gm F
  V: "[[g4,a#4] ~ [f4,a4,c5]@2 [g4,a#4] ~ [f4,a4,c5]@2 [d4,g4,a#4] ~ [c4,f4,a4] ~ [c4,f4,a4] ~ [d4,g4,a#4]@8 [f4,a4]@25 ~]/3", // Gm F Gm F Gm F Gm F
})).s("gm_alto_sax").gain(0.56)

// chords · alto sax · soft notes
const alto_sax_soft = note(`<
  ~@6 A ~@10 B ~@7 B ~@3 C ~@2 D E@2 F G E@2 H I ~@4 B ~@7 B ~@3 C ~@2 D E@2 F G E@2 H I ~@7 D E@2 F G E@2 H I ~@3 D E@2
  F G E@2 H J@2
>`.pickRestart({
  A: "~@3 a#6 ~ a#6 ~@3 g6 ~ [f6,g6] d6 ~@3", B: "~@6 f4 d4 ~@8", C: "~@6 g4 e4 ~@8", D: "~@10 d4 ~@5",
  E: "~@2 c4 ~@7 c4 ~@5", F: "d4 ~@3 d4 ~@10 c4", G: "a3 ~@9 d4 ~@5", H: "d4 ~@3 d4 ~@11", I: "~@3 c4@5",
  J: "[~@6 c4@25 ~]/2",
})).s("gm_alto_sax").gain(0.32)

// other · glockenspiel · "GLOCKENSPL"
const glockenspiel = note(`<
  A B A B A B A B A B A B A B A B ~@8 A B ~@6 A B A B A B A B A B A B ~@8 A B ~@6 A B A B A B A B ~@8 A B A B A B A B A
  B A B A B A B A B ~@4
>`.pickRestart({
  A: "~@2 c7@2 a#6 a6 g6 f6", B: "g6 ~",
})).s("gm_glockenspiel").gain(0.48)

// other · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2 = note("<A@4 B C B D ~@23 E F@8 ~@19 G@8 H ~@7 E I@16 J@2 ~@4>".pickRestart({
  A: "[[f5,a5]@12 [e5,g5]@17 [c5,c6]@2 [a4,a5], c5@29 ~@3]/4", B: "[e5,e6]", C: "[f5,f6] [a5,a6]",
  D: "[c5,c6] [d5,d6] [a#4,a#5]@2", E: "~@15 c6",
  F: "[~@7 g4, c5@16 g4@16 c5@16 g4@16 c5@16 g4@16 c5@17 ~@15, ~@15 g5@16 c6@16 g5@16 c6@16 g5@16 c6@16 g5@17]/8",
  G: "[~@112 c5@15 g5, ~@7 f5@4 g5@4 c6@16 g5@16 c6@16 g5@16 c6@16 g5@16 c6@17, ~@8 f4@4 g4@4 c5@16 g4@16 c5@16 g4@16 c5@16 g4@17 ~@15]/8",
  H: "g4",
  I: "[~@112 g4@15 c6, c5@16 g4@16 c5@16 g4@16 c5@16 g4@16 c5@17 ~@15, ~@15 g5@16 c6@16 g5@16 c6@16 g5@16 c6@16 g5@17]/8",
  J: "[~ g4, c5@17 ~@15, ~@15 g5@17]/2",
})).s("gm_string_ensemble_2").gain(0.32)

// chords · acoustic guitar nylon · "NYLON GTR"
const acoustic_guitar_nylon = note(`<
  A B C D A B A B ~@4 E F E F G H G H G H G H G H G H G H G H E F E F E F E F E F E F G H G H G H G H G H G H G H G H E
  F E F E F E F E F E F E F E F E F E F E F E F E F E F E F E F E F ~@4
>`.pickRestart({
  A: "[f3,c4,g4]@5 ~ a3 ~", B: "[g3,a#3,c4,f4]@8 [a3,a#3] ~ a3 ~ f3@2 d3 ~", C: "[f3,c4,e4]@5 ~ a3 ~",
  D: "[a#3,d4,f4]@8 [a3,a#3] ~ a3 ~ f3@2 d3 ~", E: "[f3,a3,c4,e4]@6 ~ [f3,g3,a3,c4]",
  F: "[f3,g3,a#3,d4]@11 a3 a#3@2 a3@2", G: "[g3,c4] e3 [g3,c4]@4 [a3,c4] f3",
  H: "[a#3,d4]@2 f3@2 [a#3,d4]@7 a3 a#3@2 a3@2", // A#
})).s("gm_acoustic_guitar_nylon").gain(0.4).pan(0.6)

// chords · rock organ · "ORGAN 3"
const rock_organ = note(`<
  ~@3 A B@2 C D E F ~@2 G F ~ H I ~@14 J K ~@7 L M ~ N O ~@6 P Q ~@2 R S ~@11 T U V W@2 X Y Z AA ~@2 AB AC ~@17
>`.pickRestart({
  A: "~@14 [b4,c5] [d5,e5,f5]", B: "[[a5,c6,e6]@2 d6 [d6,a6], g5@25 ~@7, ~ [a#5,f6]]/2", C: "[g5,a5,c6,e6]",
  D: "[f5,a5,c6]@4 [g5,a#5,d6]@4 ~@6 d5 [g5,a5,b5], ~ [g5,a#5]", // F Gm G Gm
  E: "[a5,c6,d6,e6] [f5,g5] [d5,e5] ~ g5@2 ~@2 f5@2 g5 ~ f5@2 ~@2", F: "g5 ~@7", G: "~@4 a5@2 ~@2 f5@2 g5 ~ f5@2 ~@2",
  H: "~@6 c6 ~ [c6,c#6] d6 f6 ~ g6@2 f6 ~, ~@12 f6 ~@3", I: "c7 a6 [b5,c6,d6,e6,f6,g6] a5 ~@12",
  J: "~@4 [c6,c#6,d6] ~ [e6,f6] ~ [f6,f#6] ~ f6 ~ g6@2 g6 ~, ~@8 g6@2 ~@2 f6 ~@3", K: "c7 a6 [e6,f6,g6] ~@13",
  L: "~@4 a6@2 ~@2 g6@2 f6 ~ d6@2 ~@2", M: "~ d#6 f6@2 ~@12, d6@2 e6 ~@13", N: "~@14 [g6,c7] f6",
  O: "[a6,c7]@2 [d6,e6,f6] c6 ~@12", P: "~@8 [a#5,f6]@3 ~ [a#5,f6]@4, ~ a5, ~@8 d6@2 ~ d6@4 ~",
  Q: "[c6,a6]@2 [d6,e6] [a5,b5] ~@12", R: "~@6 c6 ~ [c6,c#6] ~ f6 ~ g6@2 f6 ~, ~@8 d6@2 ~@2 f#6 ~@3",
  S: "a6@2 [c6,d6,e6,f6] b5 ~@12, g6 ~@15", T: "~@4 [d6,g6] ~@3 g6@2 f6 ~ f6@2 d6 c6, ~@8 f#6 ~@3 e6 ~@3",
  U: "[d6,f6] ~ [c6,f6]@2 ~@2 [d6,f6]@2 ~@6 c5 ~", // Dm F5 Dm
  V: "[g5,g#5] ~ c6 ~ a5@3 c6 [f6,g#6,a6] ~ c7 ~ [f6,a6]@2 g6 ~, a5@2 ~@2 g5 ~@7 g#6 ~@3", // G#maj7 F
  W: "[[d6,e6,f6] ~ [d6,f6]@2 ~@2 [d6,f6]@2 [f5,g5,a5,b5] ~@5 [a6,a#6,b6] ~@3 a#6 c7 [a6,c7]@2 g6 ~ [c6,f6] ~ d6@2 [c6,c#6] d6 f6 ~, ~@6 c6 ~@7 c7@4 ~@2 g#6 ~@5 a#5 ~ a5@2 ~@2]/2", // Dm G7 Am F5 C#maj7
  X: "~@4 [g5,g#5,a5] ~ c6 ~ d6 ~ f6 ~ g6@2 f6 ~, ~@12 f#6 ~@3",
  Y: "[f6,g6] ~@3 [f6,g6] ~@3 f6 ~ [f#6,g6] ~ [e6,f6] ~ d6 ~, a6@3 ~ a6@3 ~@5 a6@2 ~@2", // Fsus2 Gmaj7 Fmaj7
  Z: "[a5,c6,f6] ~ [a5,c6,f6]@2 ~@2 [a5,c6,f6]@2 b5 [c5,d5,e5,f5,g5,a5] [d4,e4,f4,g4,a4,b4] [d3,e3,a3,b3,c4] [b2,c3,c#3,d3,d#3,f3,g3] [f#3,g#3,a3,a#3,b3,c4,c#4,d4,e4,f4] [d#4,g4,g#4,a4,a#4,b4,c5,d5,e5,f5,g5] [c#5,d#5,f#5,g#5,a5,a#5,b5,c6,d6]", // F Dm7 Em7 Am G7
  AA: "[g6,a#6] ~@15, c7@3 ~", AB: "[c6,f6]@2 d6 ~ [c6,f6]@2 d6 ~ [c6,d6]@4 [c6,c#6] ~ f6 g6, ~@4 f6@3 ~, ~@6 d6 ~",
  AC: "f6 ~@15",
})).s("gm_rock_organ").gain(0.27)

// chords · rock organ · "ORGAN 3" · soft notes
const rock_organ_soft = note("<~@3 A ~@3 B C ~@7 D ~@15 E ~@11 F ~@7 G ~@2 H I ~@12 J ~ K ~@3 L M ~@21>".pickRestart({
  A: "~@14 a4 ~", B: "~@15 [e5,f5]", C: "~ b5 c5 ~@13", D: "~ b6 ~@14", E: "~ b6 d6 ~@13", F: "~@2 g6 [a5,b5] g5 ~@11",
  G: "~@2 [f6,g6] [g5,c6] ~@12", H: "~@12 f6 ~@3", I: "f6 g6 ~ a5 ~@12", J: "~@2 d#6 ~@13", K: "~@7 c6 ~ e5 ~@6",
  L: "~@15 [c#6,e6]", M: "f6 ~@15",
})).s("gm_rock_organ").gain(0.13)

// chords · tenor sax
const tenor_sax = note(`<
  ~@8 A B C D A B C D ~@24 A B E F ~@9 G C D ~@12 A H ~@2 A H A H ~@8 I J K B L ~@9
>`.pickRestart({
  A: "~@4 [f4,a4,c5]@2 ~@2 [c4,f4,a4]@2 [d4,g4,a#4] ~ [f4,a4,c5]@2 ~@2", // F Gm F
  B: "[d4,g4,a#4]@2 [c4,f4,a4] ~@3 [a3,d4,f4]@2 c4@2 d4 ~ f4 ~ [a#4,d5]@2, ~@14 f4 ~", // Gm F Dm A#
  C: "[e4,a4,c5]@13 ~ [d4,f4,g4,a#4]@2", D: "~ [d4,f4,g4,a#4]@5 ~@2",
  E: "~@4 f4@2 f4 ~ d5@2 c5 ~ a4 ~ c5@2, [e4,a4,c5]@7 ~@9", F: "~@2 a4 g4 f4 d4 f4@4 a4@3 c5 ~@2",
  G: "~@8 c4@2 d4 ~ f4 ~ [a#4,d5]@2, ~@14 f4 ~", H: "[d4,g4,a#4]@2 [c4,f4,a4] ~@3 [a3,d4,f4]@2 ~@8",
  I: "~@4 a6@2 ~@2 f6@2 g6 ~ a6@2 ~@2", J: "g6@2 f6 ~@3 d6@2 c4@2 d4 ~ f4 ~ [a#4,d5]@2, ~@14 f4 ~",
  K: "[e4,a4,c5]@4 [f4,a4,c5]@2 ~@2 [c4,f4,a4]@2 [d4,g4,a#4] ~ [f4,a4,c5]@2 ~@2", L: "[e4,a4,c5]@7 ~@9",
})).s("gm_tenor_sax").gain(0.48)

// drums · kick
const kick = s("bd").struct("<~@8 [x!2 ~@2 x!2 ~@2]!35 x [x!2 ~@2 x!2 ~@2]!14 x [~@7 x] [x!2 ~@2 x!2 ~@2]!34 ~@4>")
  .gain(0.48)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@8 [~@7 x ~@8]!35 ~ [~@7 x ~@8]!14 ~@2 [~@7 x ~@8]!34 ~@4>").gain(0.32)

// drums · snare
const snare = s("sd").struct("<~@7 A B@23 C B@11 D B@14 ~ E B@15 C B@11 C B@6 ~@4>".pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~@4 x ~@7 x ~ x!2", D: "~@5 x!2 ~", E: "~@10 x ~ x ~@2 x",
})).gain(0.56)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@8 A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A D A B A C A B A C A B A C A B D E A B A C A
  B A C A B A C A B A C A B A C A B A C A B A C A B A C A B ~@4
>`.pickRestart({
  A: "x!8", B: "x!3 ~ x ~ x!2", C: "x!3 ~ x!3 ~", D: "x", E: "~@7 x",
})).gain(0.48)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@9 A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~@3 A ~ B ~ A ~ B ~ A ~ B ~ A ~@3 A ~ B ~ A ~ B
  ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~@4
>`.pickRestart({
  A: "~@3 x ~ x ~@2", B: "~@6 x ~@2 x ~@6",
})).gain(0.32)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@11 A ~@3 A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~@3 A ~@3 A ~@3 A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ B ~@3 A ~@3 A ~@3 A ~@3 A
  ~@3 A ~@3 A ~@3 A ~@3 A ~@6
>`.pickRestart({
  A: "~@7 x", B: "~@15 x",
})).gain(0.4)

// drums · crash
const crash = s("cr").struct("<~@8 A ~@23 A ~@7 A ~@19 A ~@27 A ~@9>".pickRestart({
  A: "x",
})).gain(0.4)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@8 A@3 B A@3 B C@16 A@3 B A@3 B A@3 D C@14 ~@2 A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@2 ~@4
>`.pickRestart({
  A: "x!8", B: "x ~ x ~ x ~ x ~ x!3 ~ x ~ x ~", C: "~@3 x", D: "x",
})).gain(0.24)

stack(
  epiano2, bass, alto_sax, alto_sax_soft, glockenspiel, string_ensemble_2, acoustic_guitar_nylon, rock_organ,
  rock_organ_soft, tenor_sax, kick, kick_soft, snare, hihat, hihat_soft, open_hat, crash, tambourine
)

More by Mariah Carey