Strudelify
Honey cover art

Butterfly: 25th Anniversary Expanded Edition

Honey

Mariah Carey

KeyG minorTempo97 bpm
0:00/0:00
// Honey — Mariah Carey
// 97 bpm, 4/4, key G minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 120 bars on a 48-step grid, each part at one level. Source detail keeps the original performance.
setcpm(97/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 · "ELECPIANO"
const epiano2 = note("<A B A B A B A B ~@85 A B A B A B A B ~@16 A C@2>".pickRestart({
  A: "[ab3,c4,eb4,g4,bb4]@15 ~", B: "[bb3,d4,f4,bb4]@15 ~",
  C: "[[bb3,d4,f4,bb4]@43 ~@7 c5@45 ~, ~@43 g3@6 g4@45 ~@2, ~@15 b3@15 ~@2, ~@46 c4@45 ~@5, ~@16 e4@15 ~]/2", // Bb
})).s("gm_epiano2").gain(0.5)

// bass · electric bass finger · "FINGERBAS"
const bass = note(`<
  ~@7 A B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C
  B C B C B C B C B C B C B C B C B C B C B C B C B C B C B ~@7 D C B C B C B C B C B C B C B C B E ~@2
>`.pickRestart({
  A: "bb2@3 ~@9 bb2@3 ~@10 bb2@3 ~@8 bb2@3 ~@9",
  B: "bb2@3 ~ bb1@3 ~@9 eb2 ~ eb3@3 ~ eb2@3 ~@3 eb2 ~ eb3@3 ~ eb2@2 d3@3 ~ d2@2 db3@3 ~ db2@2",
  C: "c3@3 ~ c2@3 ~@9 c2 ~ f3@3 ~ f2@3 ~@15 f2 ~ f3@3 ~ f2@2", D: "~@23 db2", E: "c3@3 ~ c2@3 ~@41",
})).s("gm_electric_bass_finger").gain(0.56)

// other · epiano2 · "ELECPIANO2"
const epiano2_2 = note(`<
  ~@24 A ~@3 B ~@7 A ~@7 A ~@3 A ~@11 A ~@3 C ~@11 A ~@3 C ~@11 A ~@7 A ~@3 C ~@3 A ~@7 A ~@3
>`.pickRestart({
  A: "~@26 g3 ab3 bb3 ~@3 f4@2 ~@2 bb4 [ab3,bb3] [c4,d4] eb4 ~@2 ab4@2 bb4@2 c5 ~, ~@24 eb3@2 ~@4 d4@2 ~@3 ab4@2 ~@4 g4@2 ~@5, ~@25 f3@2 ~@2 c4@2 eb4@2 ~ g4@2 ~@4 f4@2 ~@6", // Absus2 Csus2
  B: "~@36 [ab3,bb3] c4 d4 eb4 g4@2 ~ bb4@2 c5 ~@2, ~@39 f4@2 ~ ab4@2 ~@4", // Absus2
  C: "~@37 [ab3,bb3] [c4,d4] eb4 ~@2 ab4@2 bb4@2 c5 ~, ~@20 f4 ~@3, ~@41 g4@2 ~@5", // Absus2 Csus2
})).s("gm_epiano2").gain(0.5)

// other · synth strings 2 · "SYNSTR2"
const synth_strings_2 = note(`<
  ~@28 A B@2 C@2 B@2 D@2 B@2 C@2 B@2 E F G@2 H@2 G@2 H@2 ~@7 A B@2 C@2 B@2 D@2 B@2 C@2 B@2 E F G@2 H@2 G@2 H@2 ~@15 A
  B@2 C@2 B@2 D@2 B@2 C@2 B@2 E F I@2 ~
>`.pickRestart({
  A: "c5 bb4 d5 c5 eb5 d5 f5 eb5 g5 f5 ab5 g5!2 ab5 bb5 c6", B: "[bb5@27 ~ c6@4]/2", C: "[g5@7 c6]/2", D: "[g5@31 ~]/2",
  E: "g5@15 ~", F: "c5@3 ~ d5@3 ~ eb5@3 ~ eb5@2 f5@2", G: "[g5@27 ~ c6@3 ~]/2", H: "[bb5@27 ~@5]/2", I: "[g5@47 ~]/2",
})).s("gm_synth_strings_2").gain(0.66)

// drums · kick
const kick = s("bd").struct("<~@3 A ~@3 B C@12 D C@7 E C@3 F C@3 G C@15 H C@40 ~@3 A ~@3 B C@16 ~@3>".pickRestart({
  A: "~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2", B: "x!4", C: "x ~@6 x ~@2 x ~@5", D: "x ~@6 x!2 ~ x ~ x ~@3",
  E: "x ~ x ~ x ~@2 x ~@2 x ~ x ~ x ~", F: "x ~@6 x ~@2 x ~@3 x ~", G: "x ~@3 x ~@2 x ~@2 x ~ x ~ x ~",
  H: "x ~@6 x ~@2 x ~ x ~ x ~",
})).gain(0.72)

// drums · clap
const clap = s("cp").struct("<~@20 A ~@7 A ~@3 A ~@19 A ~@67>".pickRestart({
  A: "~@5 x!2 ~",
})).gain(0.72)

// drums · snare
const snare = s("sd").struct("<~@8 [~ x ~ x]!85 ~@8 [~ x ~ x]!16 ~@3>").gain(0.72)

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

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

// drums · ride bell
const ride_bell = s("rd").struct("<~@117 x ~@2>").gain(0.56)

// drums · cabasa
const cabasa = s("cabasa:4").struct(`<
  ~ A ~ B ~ C D ~ 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 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 E F E F E F E F E F E F E F E F E ~ A ~ B ~ C D ~ F E F E F E F E F E F E F E F E
  ~@3
>`.pickRestart({
  A: "~@6 x ~ x!2 ~@6", B: "~@6 x ~ x!2 ~@2 x ~@3", C: "~@7 x", D: "x", E: "~@10 x ~ x!2 ~@2", F: "~@8 x!2 ~@4 x ~",
})).gain(3.24)

// drums · triangle
const triangle = s("triangles:30").struct(`<
  A B C B A B C B D E D E D E D E D E D E D E D E D E D E D E D E D E D E D E D E D E D E D E D E D E D E D E D E D E D
  E D E D E D E D E D E D E D E D E D E D E D E D E D E D E D E D E D A B C B A B C B E D E D E D E D E D E D E D E D
  ~@3
>`.pickRestart({
  A: "x ~ x!2 ~@2 x!2 ~@2 x!2 ~@2 x ~", B: "x ~@5 x!2 ~@2 x!2 ~@2 x ~", C: "~@4 x ~@2 x ~@2 x!2 ~@2 x ~",
  D: "~@3 x ~@3 x", E: "x ~@2 x ~@4",
})).gain(4.88)

// drums · triangle
const triangle_2 = s("triangles:35").struct("<A B C B A B C B D@85 A B C B A B C B D@16 E ~@2>".pickRestart({
  A: "~ x ~ x", B: "~ x!2 ~@3 x ~", C: "x ~@2 x ~@2 x ~@5 x ~@3", D: "~ x ~@3 x ~@2", E: "x",
})).gain(4.88)

// drums · bell tree
const bell_tree = s("marktrees:0").struct("<~@4 A ~@7 B ~@7 B A ~@94 C ~@3>".pickRestart({
  A: "x", B: "~@3 x", C: "~@7 x",
})).gain(3.34)

stack(
  epiano2, bass, epiano2_2, synth_strings_2, kick, clap, snare, hihat, open_hat, ride_bell, cabasa, triangle,
  triangle_2, bell_tree
)

More by Mariah Carey