Strudelify
Where Does My Heart Beat Now cover art

1992 · Celine Dion

Where Does My Heart Beat Now

Celine Dion

KeyG minorTempo90 bpm
0:00/0:00
// Where Does My Heart Beat Now — Celine Dion
// 90 bpm, 4/4, key G minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 76 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(90/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 · piano · "Unnamed Track"
const piano = note(`<
  A B A B C D E F G H I J K L M N O P Q R S T U V W C D E F G H X J K L M N O P Q R S T U V W ~@4 Y Z AA@2 AB AC@2 N O P
  Q R S T U V W ~@9
>`.pickRestart({
  A: "[bb3,d4,f4]", B: "[bb3,eb4,f4,g4]", C: "bb4@2 bb4!2 c5@2 d5@2 ~@6 c5 bb4, [d4,f4]",
  D: "c5@3 d5@3 bb4@8 ~@2, [f4,g4]", E: "bb4@2 bb4!2 c5@2 d5@2 ~@3 bb4!2 f5@3, [d4,f4]",
  F: "f5@5 eb5 d5 c5@9, [g4,bb4]", G: "bb4@2 bb4!2 c5@2 d5@2 ~@3 c5@3 bb4@2, [d4,f4]",
  H: "c5@3 d5@3 bb4 f4 [bb3,f4,g4]@6 eb5 bb4, [f4,g4]@3 ~@5", I: "~@4 f5@2 eb5@4 d5@2 c5 bb4 bb4@2, g4, bb4@13 ~@3",
  J: "~@6 c5@2 d5 c5@6 ~, [f4,bb4,d5] [f4,a4]", K: "~@2 f5 eb5@2 d5 c5 ~, [g4,bb4]",
  L: "g5@2 g5 g5@3 f5 ~ [a4,c5]@8, [bb4,d5]@7 f5@8 ~", // Am Bb
  M: "~@2 g4 bb4 bb4@2 bb4 ~@3 a4 g4 ~@4, [bb3,eb4]@7 c5@3 ~@6, ~ [c4,f4]", // Eb5 F5
  N: "d4@2 f4@2 d4@2 bb4@4 c5@4 a4 g4, ~@3 d4@4 ~", O: "[bb3,d4,f4]@4 bb4 c5 bb4 d5, ~ [d4,f4]",
  P: "~ c5 bb4@8 ~@4 bb4 c5, [eb4,g4]", Q: "d5 d5@2 d5@2 c5 ~@2 [f4,a4]@8, ~@3 c5@4 ~",
  R: "d4@2 f4@2 d4@2 bb4@4 c5@4 a4 g4, bb3@3 d4@4 ~", S: "[bb3,d4]@7 f4 bb4@2 c5@2 bb4@2 d5@2, f4@3 ~ [d4,f4]@4",
  T: "~ c5 bb4@8 ~@2 bb4 c5@3, [eb4,g4]", U: "d5@2 d5 d5@2 c5@2 ~ [f4,a4]@8, [f4,bb4]@7 c5@8 ~",
  V: "a4!4 a4@2 bb4 ~@3 d4@6, [c4,f4]@7 g4@3 ~@6, ~ bb3", W: "[c4,f4,a4]@3 [c4,f4,a4]@3 [d4,g4,bb4]@8 ~@2",
  X: "~@4 f5@2 eb5@4 d5@2 c5 ~@3, [g4,bb4]", Y: "d4 ~ f4@2 f4@2 ~ f4@2 ~ f4 ~ f4 g4@3, bb3, ~ d4@5 d4@3 d4@2 d4@5",
  Z: "~@2 bb4@2 bb4@2 bb4 a4 g4 f4@2 g4@4 ~, [bb3,d4] [a3,c4]", // Bb Am
  AA: "[~@2 f4@2 f4@2 f4@2 d4 f4@2 d4 f4 d4 f4 ~@3 g4 bb4 bb4@2 bb4!2 [f4,a4,c5]@8, [g3,bb3]@15 g4@3 ~@14, ~@2 [bb3,d4] ~]/2", // F Gm Bb
  AB: "[g3,bb3,eb4]@3 [a3,c4,f4]@4 ~", AC: "[[g3,bb3,eb4]@3 [g3,bb3,eb4]@3 ~ [a3,c4,f4]@16 ~@9]/2",
})).s("gm_piano").gain(0.41)

// chords · acoustic guitar nylon · "Unnamed Track" · Bb5 Bb Am Bb5 Bb Am Bb5
const acoustic_guitar_nylon = note(`<
  ~@46
  [d4@4 f4@4 eb4@3 d4@3 c4 ~, [f3,bb3]]!3
  [[bb3,d4] [a3,c4]]
  ~@17
  [d4@4 f4@4 eb4@3 d4@3 c4 ~, [f3,bb3]]!3
  [[bb3,d4] [a3,c4]]
  [d4@4 f4@4 eb4@3 d4@3 ~@2, [f3,bb3]]
  ~@4
>`).s("gm_acoustic_guitar_nylon").gain(0.51)

// chords · acoustic guitar nylon · "Unnamed Track" · soft notes · Bb5 Bb Am
const acoustic_guitar_nylon_2 = note("<~@71 [~@14 c4 ~] [d4@4 f4@4 eb4@3 d4@3 c4 ~, [f3,bb3]]!2 [[bb3,d4] [a3,c4]] ~>")
  .s("gm_acoustic_guitar_nylon").gain(0.2)

// other · piano · "Unnamed Track"
const piano_2 = note("<~@46 A B C D ~@17 A B C D E ~@4>".pickRestart({
  A: "bb2@8 bb2@6 bb2 a2", B: "g2@6 ~ g2 g2@4 f2@4", C: "eb2@4 eb3@2 f2 g2", D: "f3@6 ~ f3!2 c3 f2@4 f2@2",
  E: "bb2@4 bb2@3 ~",
})).s("gm_piano").gain(0.51)

// other · piano · "Unnamed Track" · soft notes
const piano_soft = note("<~@71 [~@14 bb2 a2] [g2@6 ~ g2 g2@4 f2@4] [eb2@4 eb3@2 f2 g2] [f3@6 ~ f3!2 c3 f2@4 f2@2] ~>")
  .s("gm_piano").gain(0.15)

// chords · synth strings 2 · "Unnamed Track"
const synth_strings_2 = note("<A B A B A B A B A B@2 C B D E ~@61>".pickRestart({
  A: "[bb4,d5,f5]", B: "[eb4,g4,bb4]", C: "[f4,bb4,d5] [f4,a4,c5]", D: "[f4,bb4,d5,f5] [f4,a4,c5]",
  E: "[eb4,g4,bb4,d5] [f4,a4,c5]", // Ebmaj7 F
})).s("gm_synth_strings_2").gain(0.16)

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

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@32 [~@7 x] ~@37 x [x ~@4 x ~@2]!3 x ~>").gain(0.15)

// drums · snare
const snare = s("sd").struct(`<
  ~@9 A B@4 ~ B@3 C B@4 ~ D E B@4 C B@3 F ~ B@3 C E B@3 ~ D B@3 ~ B@3 C E B@5 C B@4 ~ D B@3 ~ B@3 ~@2
>`.pickRestart({
  A: "~@5 x!3", B: "~ x ~ x", C: "~@4 x ~@5 x ~ x!3 ~", D: "~@10 x ~ x!3 ~", E: "~@3 x", F: "~@7 x",
})).gain(0.41)

// drums · crash
const crash = s("cr").struct("<~@4 A ~ A ~ A ~@26 B ~@4 C ~@13 C ~@6 C ~@14>".pickRestart({
  A: "x", B: "x!2", C: "~ x ~@2",
})).gain(0.51)

// drums · ride
const ride = s("rd").struct("<~ [~@3 x] ~@74>").gain(0.2)

stack(
  piano, acoustic_guitar_nylon, acoustic_guitar_nylon_2, piano_2, piano_soft, synth_strings_2, kick, kick_soft, snare,
  crash, ride
)

More by Celine Dion