Strudelify

I've Been Thinking About You

Mariah Carey

KeyC minorTempo105 bpm
0:00/0:00
// I've Been Thinking About You — Mariah Carey
// 105 bpm, 4/4, key C minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 110 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(105/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 · baritone sax · "brass"
const baritone_sax = note("<A B@3 A B@2 C ~@25 D@2 ~@25 D@2 ~@9 D@2 ~@12 E ~@21 D@2 F>".pickRestart({
  A: "[c4,eb4,g4,c5] ~ c4 ~@3 eb4!2 ~ eb4!2 ~ eb4@3 ~", B: "c4 ~ c4 ~@3 eb4!2 ~ eb4!2 ~ eb4@3 ~", C: "c4 ~ c4 ~@13",
  D: "[~@14 [b3,eb4,g4]@5 ~ [b3,eb4]@3 ~@3 [b3,eb4] ~@3 [b3,eb4] ~]/2", // Baug B
  E: "[b3,eb4,f4]@3 ~ [b3,eb4,f4]@3 ~@3 [b3,eb4,f4] ~@3 [b3,eb4,f4] ~", F: "[c4,eb4,g4] ~@3",
})).s("gm_baritone_sax").gain(0.5)

// bass · electric bass finger · "bass"
const bass = note(`<
  A@8 ~@8 B C D E B F G H I J I J K L M L M N O P Q R S R S R S B C D E B F G H I J I J K L M L M N O I J I J K L M L M
  N O T U V W X U Y Z AA AB AC N AD I J K L I J K L I J K L M L I J K L M L M N O AE
>`.pickRestart({
  A: "c3 ~ c3 ~@13", B: "d3 ~ d3 ~@4 d3 ~ ab2 d3@3 ~ ab2 ~", C: "g2 ~ g2 ~@3 f3 g3 ~ d3 g2@3 ~ bb2 b2",
  D: "c3 ~ c3 ~@3 bb2 c3 ~ g2 c3@3 ~ eb3 e3", E: "f3 ~ f3 ~@4 f3 ~ c3 f2@3 ~ c3 f2",
  F: "g2 ~ g2 ~@3 f3 g3 ~ d3 g2@3 ~ f2 g2", G: "ab2 ~ ab2 ~@4 ab2 ~ ab2 ab2@3 ~ ab2!2", H: "bb2 ~ bb2 ~@13",
  I: "ab2 ~ ab2 ~@3 ab3 ab2 ~ ab2!2 ~ bb2!2 ~ bb2", J: "c3 ~ c3 ~@3 bb2 c3 ~ c3!2 ~@2 eb3 ~ f3",
  K: "d3 ~ d3 ~@4 g2 ~ g3 g2 ~@3 bb2 b2", L: "c3 ~ c3 ~@4 f2 ~ f2!2 ~@3 c3 f2",
  M: "bb2 ~ bb2 ~@4 eb2@2 ~ eb2 ~@3 eb2 ~", N: "ab2 ~ ab2 ~ ab2 ~ ab2 ~ ab2 ~ ab2 ~ ab2 ~ ab2 ~",
  O: "g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ f3 eb3 c3 bb2", P: "ab2 ~ ab2 ~@4 ab2 ~ ab2!2 ~ bb2!2 ~ bb2",
  Q: "c3 ~ c3 ~@4 c3 ~ bb2 c3 ~ g3 f3 eb3 ~", R: "ab2 ~ ab2 ~@3 ab3 ab2 ~ ab2 bb2 ~ bb2!2 ~ bb2",
  S: "c3 ~ c3 ~@4 c3!4 ~ eb3 f3 g3 ~", T: "ab2 ~ ab2 ~@3 f3 ab2 ~ ab2!2 ~@4 ab2",
  U: "g2 ~ g2 ~@3 g3 g2 ~ g2!2 ~@3 bb2 b2", V: "c3 ~ c3 ~@3 c4 c3 ~ c3!2 ~@3 c3 ~",
  W: "f2 ~ f2 ~@3 f3 f2 ~ f2!2 ~ g2 ~ g2 ~", X: "ab2 ~ ab2 ~@3 ab3 ab2 ~ ab2!2 ~@3 ab2 ~",
  Y: "c3 ~ c3 ~@3 c4 c3 ~ c3!2 ~@3 eb3 e3", Z: "f3 ~ f3 ~@3 f3!2 ~ f3!2 ~@3 eb3 f3",
  AA: "d3 ~ d3 ~@4 g2 ~ g2!2 ~@3 bb2 b2", AB: "c3 ~ c3 ~@3 c3 f2 ~ f2!2 ~@3 c3 f2",
  AC: "bb2 ~ bb2 ~@4 eb2 ~ eb2!2 ~@3 eb2 f2", AD: "g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ f3 eb3 c3 ~", AE: "c3 ~@3",
})).s("gm_electric_bass_finger").gain(0.6)

// chords · epiano1 · "keyboard 1"
const epiano1 = note(`<
  ~@8 A B A B A B A B C D B E C D A@3 B A B A B F G H I@2 A B A B A B A B C D B E C D A@3 B A B A B F G H I@2 A B A B A
  B F G H I@2 A D B E A D B E J K L M N A B A B A B A B A B A B F G A B A B F G H I@2 O
>`.pickRestart({
  A: "[ab3,c4,eb4]@11 ~@5", B: "[g3,c4,eb4]@11 ~@5", C: "[ab3,c4,f4]@11 ~@5", D: "[g3,b3,d4]@11 ~@5",
  E: "[a3,c4,f4]@11 ~@5", F: "~@8 [g3,b3,d4]@5 ~@3, [ab3,c4,f4]@11 ~@5", G: "[g3,c4,eb4]@5 ~@3 [a3,c4,f4]@5 ~@3",
  H: "[bb3,db4,f4]@5 ~@3 [bb3,eb4,g4]@5 ~@3", // Bbm Eb
  I: "[[ab3,c4,eb4]@11 ~@3 b3@2 b3@4 b3@6 [b3,eb4] ~@3 [b3,eb4] ~, ~@14 [eb4,g4]@5 ~ eb4@3 ~@9, ~@16 [g3,d4]@11 ~@5]/2", // Ab B Eb G5
  J: "[ab3,d4]@5 ~@3 [b3,d4]@5 ~@3", K: "[c4,eb4]@5 ~@3 [c4,f4]@5 ~@3", L: "[bb3,db4,f4]@5 ~@3 [db4,f4,g4]@5 ~@3",
  M: "[c4,eb4,ab4]@5 ~@3 [c4,eb4,ab4]@5 ~@3", // Ab
  N: "[b3,eb4,f4]@3 ~ [b3,eb4,f4]@3 ~@3 [b3,eb4,f4] ~@3 [b3,eb4,f4] ~, bb4@11 ~@5", O: "[c4,eb4,g4] ~@3",
})).s("gm_epiano1").gain(0.66)

// chords · synth strings 1 · "sinth"
const synth_strings_1 = note(`<
  ~@16 A B C D A B E@3 C E C E C F G H I B J K J K J K J K A B C D A B E@3 C E C E C F G H I B E C E C E C F G H I B E B
  C D E B C D F G L M B E C E C E C E C E C E C F G E C E C F G H I B N
>`.pickRestart({
  A: "[f4,ab4,c5]", B: "[g4,b4,d5]", C: "[g4,c5,eb5]", D: "[f4,a4,c5]", E: "[ab4,c5,eb5]", F: "[f4,ab4,c5] [g4,b4,d5]",
  G: "[g4,c5,eb5] [f4,a4,c5]", H: "[f4,bb4,db5] [g4,bb4,eb5]", I: "[eb4,ab4,c5]", J: "[ab3,c4,eb4]", K: "[g3,c4,eb4]",
  L: "[db4,f4,bb4] [eb4,g4,bb4]", M: "[eb4,ab4,c5]!2", N: "[c4,eb4,g4] ~@3",
})).s("gm_synth_strings_1").gain(0.16)

// chords · string ensemble 2 · "sinth 2"
const string_ensemble_2 = note(`<
  ~@4 A@4 ~@16 B C B C B C D E F G H ~@8 I H C J I H B@3 C B C B C D E F G H B C B C B C D E F G H B H C J B H C J D E K
  L H B C B C B C B C B C B C D E B C B C D E F G H M
>`.pickRestart({
  A: "[[c3,eb3,g3]@55 ~@9]/4", B: "[ab3,c4,eb4]", C: "[g3,c4,eb4]", D: "[f3,ab3,c4] [g3,b3,d4]",
  E: "[g3,c4,eb4] [f3,a3,c4]", F: "[f3,bb3,db4] [g3,bb3,eb4]", G: "[eb3,ab3,c4]", H: "[g3,b3,d4]", I: "[f3,ab3,c4]",
  J: "[f3,a3,c4]", K: "[db3,f3,bb3] [eb3,g3,bb3]", L: "[eb3,ab3,c4]!2", M: "[c4,eb4,g4] ~@3",
})).s("gm_string_ensemble_2").gain(0.57)

// chords · string ensemble 2 · "strings"
const string_ensemble_2_2 = note(`<
  ~@24 A B A B A B C D E F G ~@16 A B A B A B C D E F G A B A B A B C D E F G ~@13 A B A B A B A B A B A B C D A B A B C
  D E F G H
>`.pickRestart({
  A: "[ab4,c5,eb5]", B: "[g4,c5,eb5]", C: "[f4,ab4,c5] [g4,b4,d5]", D: "[g4,c5,eb5] [f4,a4,c5]",
  E: "[f4,bb4,db5] [g4,bb4,eb5]", F: "[eb4,ab4,c5]", G: "[g4,b4,d5]", H: "[c4,eb4,g4] ~@3",
})).s("gm_string_ensemble_2").gain(0.33).pan(0.7)

// drums · kick
const kick = s("bd").struct("<[x ~ x ~@4 x!2 ~ x ~@5]!8 ~@16 [x ~ x ~@4 x!2 ~ x ~@5]!85 ~>").gain(0.66)

// drums · clap
const clap = s("cp").struct("<~@16 [x!4]!8 ~@19 [x!4]!8 ~@59>").gain(0.66)

// drums · snare
const snare = s("sd").struct("<[~ x ~ x]!8 ~@15 [~@10 x!3 ~@3] [~ x ~ x]!26 [~@4 x ~@5 x!3 ~@3] [~ x ~ x]!58 ~>")
  .gain(0.66)

// drums · pedal hat
const pedal_hat = s("hh").struct("<[x ~ x ~ x ~@2 x!2 ~ x!3 ~@3]!8 ~@16 [x ~ x ~ x ~@2 x!2 ~ x!3 ~@3]!85 ~>").gain(0.66)

// drums · open hat
const open_hat = s("oh").struct("<[~@7 x]!8 ~@16 [~@7 x]!85 ~>").gain(0.66)

// drums · mid tom
const mid_tom = s("mt").struct("<~@22 [~@5 x ~@2] ~@26 [~@5 x ~@2] ~@60>").gain(0.66)

// drums · high tom
const high_tom = s("ht").struct("<~@22 [~@8 x!2 ~@6] ~@26 [~@8 x!2 ~@6] ~@60>").gain(0.66)

// drums · china
const china = s("cr").struct("<~@22 [x ~@10 x ~@4] [~@13 x ~@2] ~@25 [x ~@10 x ~@4] [~@13 x ~@2] ~@59>").gain(0.66)

// drums · bongos
const bongos = s("bongo:4").struct("<[~ x ~@3 x ~@2]!8 ~@16 [~ x ~@3 x ~@2]!85 ~>").gain(1.73)

// drums · congas
const congas = s("conga:33").struct("<[x!4]!8 ~@16 [x!4]!85 ~>").gain(2.1)

stack(
  baritone_sax, bass, epiano1, synth_strings_1, string_ensemble_2, string_ensemble_2_2, kick, clap, snare, pedal_hat,
  open_hat, mid_tom, high_tom, china, bongos, congas
)

More by Mariah Carey