Strudelify

Whenever You Call

Mariah Carey

KeyB♭ majorTempo64 bpm
0:00/0:00
// Whenever You Call — Mariah Carey
// 64 bpm, 4/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 70 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(64/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.

// bass · fretless bass · "Bass"
const bass = note(`<
  ~@20 A B C D E F C G H F I D J F K D L M E N O P A Q P R S T U I D J F V W X Y Z AA AB@2 AC@5 ~@2 AD@2
>`.pickRestart({
  A: "eb2", B: "bb2", C: "bb2@5 ~ bb2 ~ bb2@8", D: "g2@5 ~ g2 ~ g2@8", E: "eb2@6 eb2 ~ eb2@8", F: "f2@5 ~ f2 ~ f2@8",
  G: "g2@6 g2 ~ g2@8", H: "eb2@5 ~ eb2 ~ eb2@8", I: "bb2@7 ~ bb2@4 a2@4", J: "eb2@5 ~ eb2 ~ eb2@6 g2@2",
  K: "bb2@5 ~ bb2 ~ bb2@4 a2@4", L: "eb2@5 ~ eb2 ~ eb2@7 ~", M: "c2@5 ~ c2 ~ c2@8", N: "bb2@7 ~ bb2@2 c3@2 bb2@4",
  O: "db2", P: "ab2", Q: "bb2@15 ~", R: "db2@7 ~ db2@8", S: "gb2@8 gb2@5 ~ gb2@2", T: "f2@3 f2 c3@3 f2", U: "a2@7 ~",
  V: "~ b2@3", W: "b2@4 ab2@11 ~", X: "ab2@4 e2@11 ~", Y: "e2@4 gb2@11 ~", Z: "gb2@2 ab2@2 b2@11 ~",
  AA: "b2@3 ~ ab2@11 ~", AB: "[ab2@3 ~ e2@16 gb2@12]/2",
  AC: "[ab2@4 e2@6 b2@8 e2@2 b2@6 gb2@3 ~ b2@6 e2@6 b2@2 gb2@8 b2@16 ~@12]/5", AD: "[~@4 b2@15 ~@13]/2",
})).s("gm_fretless_bass").gain(0.19)

// chords · piano
const piano = note("<A@6 B@4 C D@6 E@5 F G B@4 C D@6 H@6 I J K L M N O P Q@3 R S@2 T@8 U@7>".pickRestart({
  A: "[~@3 bb4 ~ a4 ~@5 a4 ~ g4 ~@5 f4 ~ eb4 ~@8 bb4@2 bb4@2 ~@13 d4, bb2@10 bb4@8 g4@2 f4@2 eb4@5 c4@10 d4 bb4 d4 g3@5 d4 bb4@2, ~ bb3@5 a4@2 g3@4 a4@11 f4 g4@4 [a4,c5]@13 d4 bb4 d4 g4@4, ~@2 c5@12 g4 f4 eb3@9 f3@3 f4@4 [bb2,bb3]@16, ~@4 bb4@3 g4@2 bb3@8 g3@9 a3@6 [d4,f4]@2 bb4 d4 f4@12]/6", // Am Bb Dm
  B: "[~@7 eb4 ~@23 d4, eb3@13 c4 g4 c4@8 d4@4 d4 g4@4, ~ d4@2 d4@5 f3@8 [bb2,bb3]@8 eb3@8, ~@2 bb4@3 eb4 bb4@2 ~@2 a4@6 ~@2 bb4@3 d4 bb4@2 ~@2 bb4@3 d4 bb4@2, ~@4 g4@4 ~ c4@2 c4 f4@4 ~ d4@2 d4 f4@4 ~ g3@7]/4", // Bb
  C: "~@7 eb4, eb3, ~ eb4@2 eb4@2 eb4@2 ~, ~ bb4!3",
  D: "[~@11 bb4 ~ a4 ~@2 g3 ~@2 a4 ~ g4 ~@5 f4 ~ eb4 ~@13 bb4 ~ a4 ~ g4, f3@8 bb2 d4@8 g3 bb4@10 f4@2 [g3,eb4]@4 a3@8 c5@2 [bb2,bb4]@2 a4@2, ~ c4@3 c4@3 c4@5 bb2@10 g4 f4 eb3@8 [c3,d4]@16, ~@2 f4@3 f4@5 c5@10 a4@11 f4@5 a4 bb4 c5 bb4 bb2 bb3@7, ~@3 a4@3 a4@2 bb3@4 bb4@2 a4 g4 g2@9 g3 g4@7 f3@15]/6", // Cm Bb Csus2
  E: "[~@3 a4 ~ g4 ~@5 f4 ~ eb4 ~@18 bb2 ~@6 d4, g3@12 g4@2 f4@2 eb3@16 [f3,f4]@10 bb4@2 c5@16 eb4@3 bb4 [bb3,d4,f4]@2 bb2@2 bb3@2 d4@2 f4@2 bb2@2 bb3@4, ~ bb3@8 g3@8 a3@6 bb4 eb3 eb4 g4@14, ~@2 bb4@8 g4@2 f4@2 eb4@4 c4@9 bb4 eb2@12, ~@4 a4@11 g4@5 a4@9 eb3@11]/5", // F Bb
  F: "[f4,bb4]@2 ~@2 bb4@2 d4@2 f4@2 d4@2 bb4@2 d4 ~, [bb2,bb3]@7 ~, d4 ~@15", G: "~ d4 bb4 d4 g4 d4 bb4 d4, g3@7 ~",
  H: "[~@6 a4@2 ~@2 g4@2 ~@10 f4@2 ~@2 eb4@2 ~@36 bb2@2 ~@14 db4@2 db4@2 db4@2 db4@2 db4@2 db4@2 [db4,f4,ab4]@2 db4 ~, g3@12 g4@2 f4@2 eb3@16 [f3,f4]@10 bb4@2 c5@16 eb4@3 bb4 [bb3,d4,f4]@2 bb2@2 bb3@2 d4@2 f4@2 bb2@2 bb3@2 d4@17 ~, ~ bb3@8 g3@8 a3@6 bb4 eb3 eb4 g4@14 [f4,ab4]@2 [f4,ab4]@2 [f4,ab4]@2 ~@2, ~@4 bb4@16 g4@4 f4@4 eb4@8 c4@18 bb4@2 eb2@24 db2@6 db2@9 ~, ~@8 a4@22 g4@10 a4@18 eb3@22 db3@8 db3@7 ~]/6", // Db F Bb Fm
  I: "c4!7 [ab3,c4], ab3@4 ab3@3 ~, ab2@3 ab2@5, [eb4,ab4]!4", // Ab Ab5
  J: "eb4!7 [eb3,eb4], eb3@4 eb3@3 ~, eb2@3 eb2@5, [g4,bb4]!4", // Eb Gm
  K: "d4!3 [bb2,d4] d4!3 [bb3,d4], bb3@4 bb3@3 ~, bb2@3 ~ bb2@2 [bb2,d5]@2, [f4,bb4]!2 [f4,bb4]@2, ~@5 c5@3", // Bb Bb5
  L: "~ c4!6 [ab3,c4], ab3@4 ab3@3 ~, ab2@3 ab2@5, [eb4,ab4]!4", // Ab Ab5
  M: "db4!7 [db3,db4], db3@4 db3@3 ~, db2@3 db2@5, [f4,ab4]!4", // Db Fm
  N: "db4!3 ~@2 db4!2 [gb3,db4], gb3@4 gb3@3 ~, gb2@3 gb2@3 [gb2,gb4,bb4]@2, [gb4,bb4]!3 ~, ~@3 db4@2 ~@3", // Gb5 Gb
  O: "f4!3 [f2,f4] f4!3 [f2,f4], f3!2, f2@3 ~ f2@3 ~, [a4,c5]!4", P: "f4!8, [f2,f3]!2, [a4,c5]!4",
  Q: "[~@2 d4@2 c5@2 bb4 ~ bb4@2 a4 ~ a4@2 ~@2 g2@2 ~@2 bb4@2 a4 ~ a4@2 g4 ~ g4@2 ~@2 eb3@2 ~@2 g4@2 f4 ~ f4 ~ eb4 ~ eb4@2 f4@2, [bb2,bb3]@7 ~ bb2@5 ~ g4@5 ~@11 f4@5 ~@13, ~@16 g3 ~ g3@13 ~@3 g3@10 g3@4]/3", // Bb
  R: "c3@2 f3@2 ~@4 a4@2 bb4@2 c5 ~ bb4@2, d4@7 ~@9, ~@4 a3@9 ~@3",
  S: "[~@2 eb4!2 ~@5 b4 eb4!2 ~@3 eb4, ~@2 b3@3 b2@2 eb4@3 ~@2 eb4@3 ~, ~ b2 eb4 b3@2 ab3@2 ab3, ~@2 [gb4,b4]@2 b4@5 ~ [ab4,b4]@2 [ab4,b4]@4, ~@4 gb4@4 [b2,gb4]@2 ab2@3 ab2@3]/2", // B5 Abm B5
  T: "[~@2 ab4@2 e4@2 ~@14 db4@2 ~@2 gb4@2 ~@8 ab4@2 eb4@2 eb4@2 eb4@2 ~@8 gb4@2 eb4@2 eb4@2 ~@10 b4@2 e4@2 e4@2 ~@10 b4@2 ~@12 bb4@2 gb3 ~ [ab4,b4]@4 ~@10 e4@2 ~@2 eb4@2 eb4@2 eb4@2 eb4@2 eb4@2, [ab2,b4]@4 gb4@8 e3@8 [gb2,gb3,gb4,bb4]@2 db4@4 gb2@10 b2@6 [b2,eb4,bb4]@10 ab2@4 eb4@4 ab3@8 e3@8 e3@8 gb3@6 gb2@9 ~ [e2,e3]@16 [b2,b3]@12, ~@4 e3@6 ab4@16 bb4@5 gb4@5 gb4@10 gb4@2 db4@4 ~@4 ab4@6 eb4@6 ~@4 [e4,ab4]@6 e4@6 gb4@2 db4@6 gb3@6 ~@30, ~@4 [e2,ab4]@4 b4@6 e4@13 ~ gb3@8 b4@4 b4@12 [ab4,b4]@4 b4@8 ab4@4 [ab4,b4]@4 b4@8 e2@4 gb2@4 gb4@6 db4@5 ~@5 [ab4,b4]@4 [ab4,b4]@4 [ab4,b4]@4 [gb4,b4]@4 [gb4,b4]@4 [gb4,b4]@4, ~@4 b4@2 e4@4 e2@6 gb4@2 [e2,b4]@9 ~@3 db4@2 [db4,bb4]@4 b3@8 [b3,ab4]@8 ab3@6 ab2@10 e2@6 e2@5 ab4@5 bb4@11 gb4@4 ~ e4@6 e4@4 e4@4 ~@14]/8", // Abm Gb Bmaj7 E B E Abm B5 …
  U: "[eb4@2 eb4@2 e4@2 e4@2 e4@2 e4@2 ~@2 db4@2 db4@2 db4@2 eb4@2 ~@4 b4@2 ~@2 bb4@2 ~@4 ab2@2 ~@4 bb4@2 ~@2 ab4@2 ab4@2 ~@2 e3@2 ~@8 e4@2 ~@2 eb4@2 db2@2 ~@12 db4@2 [b2,b3,eb4,gb4,b4]@15 ~@13, [gb4,b4]@2 [e2,e3]@4 [gb2,gb3]@4 [b2,b3,gb4]@6 bb4 ab4@5 bb4@3 gb4@4 ab4 gb4@2 e4@2 db4@3 gb2 gb3@2 ab4@2 ~@14, ~@4 [ab4,b4]@4 [ab4,b4]@4 [gb4,bb4]@4 [gb4,bb4]@4 b4@6 ~@2 b4@8 ~@2 ab2@13 ~ e2@16 ~@2 db2@14 ~@28, ~@22 eb4@14 ab3@15 ~@3 e3@14 db3@16 ~@28, ~@24 db5@12 ~@4 b4@11 ~@5 bb4@12 ~@4 gb4@12 ~@28]/7", // B B5 E Gb B5 Abm Gb
})).s("gm_piano").gain(0.36)

// chords · string ensemble 2 · "Strings"
const string_ensemble_2 = note(`<
  ~@12 A@3 B C@2 D B E@2 ~@8 F@3 G H@2 I J K@2 L M N O M P@2 Q@2 R@3 G S@2 T@8 U@2 ~@3 V@2
>`.pickRestart({
  A: "[~ a5 g5 f5 eb5 d5, bb4, d4@2 eb4, [f4,bb5] g4@2]/3", B: "[c4,f4,a4,c5]", C: "[bb5 a5 g5 f5, [d4,bb4], f4 g4]/2",
  D: "[c4,eb4,eb5] [eb4,bb4,d5], g4", E: "[[eb4,g4] [d4,f4], bb4]/2",
  F: "[~ a5 g5 f5 eb5 d5, bb4, d4@32 d2 ~@15, [bb2,bb3,f4,bb5] g4@2, ~@16 [g2,g3]@15 ~ [eb2,eb3,eb4]@16]/3", // Bb5 G Eb
  G: "[f2,f3,c4,f4,a4,c5]", H: "[bb5 a5 g5 f5, [d4,bb4], [bb2,bb3,f4] [g2,g3,g4]]/2",
  I: "[c4,eb4,eb5] [eb4,bb4,d5], [eb2,eb3,g4]", J: "[d2,d3]@3 ~ [f2,f3]@11 ~, [c4,f4,a4,c5]",
  K: "[[eb2,eb3,eb4,g4] [bb2,bb3,d4,f4], bb4]/2", L: "[db2,db3,db4,f4,ab4]@15 ~", M: "[ab2,ab3,c4,eb4,ab4]",
  N: "~ [eb2,eb4]@7, ~ [eb3,g4,bb4]@15", O: "~@2 c5 d5, [bb2,bb3,d4,f4], bb4@11 ~@5",
  P: "[db4 ~@15 [gb2,gb3,gb4,bb4]@16, [db2,db3,f4,ab4] ~, ~ db4@15]/2", Q: "[[f2,f3,f4,a4,c5]@31 ~]/2",
  R: "[~ a5 g5 f5 eb5 d5, bb4, d4@32 d2 ~@15, [f4,bb5] g4@2, ~@16 [g2,g3]@15 ~ [eb2,eb3,eb4]@16]/3", // Bb5 G Eb
  S: "[~ [b2,b3,b4]@4 [ab2,ab3,ab4,b4]@3, ~ [eb4,gb4]@7]/2", // B Abm Ebm
  T: "[~@4 [e2,e3,e4,ab4,b4]@16 [gb2,gb3,db4]@15 ~ [b2,b3,eb4,b4]@16 ~@3 eb4@13 [e2,e3,e4,ab4,b4]@16 [gb2,gb3,db4,gb4,bb4]@16 [e2,e3,e4,ab4,b4]@16 [b2,b3,eb4,gb4,b4]@12, ~@5 [gb4,bb4]@8 [ab2,ab3,ab4,b4]@4 ~@15, ~@53 db4@15 ~@60]/8", // E Gb5 B E Gb E B Gb …
  U: "[~@2 [e2,e3,e4,ab4,b4]@4 [gb2,gb3,db4,bb4]@4 [b3,b4] ~@5, ~@6 gb4@5 ~@5, ~@20 [b2,eb4] ~@11]/2", // E Gb B
  V: "[~@3 b2@7 ~@6, ~ [b3,eb4,gb4,b4]@4 ~@3]/2", // B
})).s("gm_string_ensemble_2").gain(0.17)

// chords · synth strings 2 · "Synth1"
const synth_strings_2 = note("<~@2 A B C@3 D@4 E ~@10 C@3 D@4 E ~@40>".pickRestart({
  A: "[eb4,g5,bb5]", B: "[c5,eb5,f5,a5]", C: "[f4@16 ~@16 eb4@15 ~, bb4@47 ~, d4@31 ~@17, ~ g4@2]/3",
  D: "[[c4,a4]@16 ~@32 eb4@15 ~, f4 g4, ~@16 bb4@47 ~, ~@16 d4@31 ~@17]/4", E: "g4 a4@15, [f4,c5]",
})).s("gm_synth_strings_2").gain(0.07)

// other · string ensemble 1 · "Strings2"
const string_ensemble_1 = note("<~@40 A B C@2 D@2 E F@2 G H I J K L M N@2 O P Q R@4 ~@5>".pickRestart({
  A: "[db5,db6]", B: "[ab4,ab5]", C: "[~ [bb4,bb5], [eb4,eb5]]/2",
  D: "[ab4@8 db4 db4@7, ab5@5 ~@3, ~ db5, ~@4 c4 ~@3]/2", E: "[gb4,gb5]", F: "[f4,f5]/2", G: "c6!2 bb5 a5",
  H: "g5 bb5 a5 g5", I: "f5 g5 f5 eb5", J: "d5@4 c5@11 ~", K: "~@4 db6@3 ~ db6@4 b5@4", L: "bb5 ab5 b5 bb5",
  M: "ab5@4 f5@2 gb5 ~ ab5@4 gb5@4", N: "[e5@2 db5@8 ~@2 c6@2 db6 bb5]/2", O: "~ b5 bb5@2 b5@2 bb5@2",
  P: "ab5 gb5 ab5 gb5", Q: "e5 db5@2 gb5", R: "[ab5 e5@4 b5@4 e5@2 gb5@2 ~@3]/4",
})).s("gm_string_ensemble_1").gain(0.15)

// other · timpani
const timpani = note("<~@47 [~@10 bb2!6] [bb2!16] [bb2 ~@15] ~@20>").s("gm_timpani").gain(0.14)

// drums · kick
const kick = s("bd").struct("<~@22 A@8 B@7 C D@9 E F B@4 G H@6 I J K L ~@6>".pickRestart({
  A: "x", B: "x ~@3 x!2 ~@2", C: "x!2", D: "x ~@2 x!2 ~@3", E: "x ~@2 x!2 ~ x!2", F: "~ x ~@6", G: "~@6 x!2",
  H: "~@2 x ~@3 x!2", I: "~ x ~ x", J: "~@2 x ~@2 x!2 ~", K: "~ x!2 ~@5", L: "~ x ~@2",
})).gain(0.48)

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

// drums · snare
const snare = s("sd").struct("<~@48 [~@6 x!2] ~@21>").gain(0.48)

// drums · low tom
const low_tom = s("lt").struct("<~@43 [~@13 x ~@2] ~@4 [~@7 x ~ x!2 ~@5] ~@13 [~@15 x] [x!3 ~@13] ~@6>").gain(0.48)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@43 [~@10 x!3 ~@3] ~@4 [~@6 x!3 ~@7] ~@13 [~@7 x] ~@7>").gain(0.48)

// drums · open hat
const open_hat = s("oh").struct("<~@38 [~@3 x]!2 ~@7 [~@5 x ~@2] [x!2 ~@2] ~@13 [x ~@2 x ~@4] ~@7>").gain(0.48)

// drums · crash
const crash = s("cr").struct(`<
  ~@4 A ~@7 A ~@9 A ~@7 A ~@3 A ~@3 A@5 ~ A ~@4 A ~@3 B ~@3 B ~@3 B ~ B@2 ~@5
>`.pickRestart({
  A: "x", B: "~ x ~@2",
})).gain(0.54)

stack(
  bass, piano, string_ensemble_2, synth_strings_2, string_ensemble_1, timpani, kick, rim, snare, low_tom, hihat,
  mid_tom, open_hat, crash
)

More by Mariah Carey