Strudelify

Mon reve de toujours

Celine Dion

KeyG majorTempo63 bpm
0:00/0:00
// Mon reve de toujours — Celine Dion
// 63 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 69 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(63/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 · "Right"
const piano = note(`<
  ~ A@2 B C D E F G B C D E F G H I@2 J@2 K L J@2 M@2 N B C D E F G H O L J@2 K L J@2 K P@2 L J@2 K L J@2 K Q R@2 S T U
  V W T U V W T X ~@2
>`.pickRestart({
  A: "[~@27 a3@3 b3 ~, g2@11 a3@11 b3@4 g3@5 ~, ~ d3@13 b3@4 g3 c4@12 ~, ~@2 g3@4 b3@4 g3@6 g2@15 ~, ~@3 c4@14 d3@14 ~]/2",
  B: "b4 ~@2 c5 ~@2 d5 ~ d5 e4 g4 c5 ~ b4 a4 g4, [g2,g3] [c3,c4]", // G C
  C: "a4 ~@2 b4 ~@2 c5 f#4 c5 d4 g4 d5 ~ a4 g4 [f#2,f#3,f#4], ~@8 [g2,g3]@7 ~", // F# G
  D: "g4 b3 e4 b4 ~ a4 g4 f#4 g4 b3 d#4 b4 ~ a4 g4 f#4, [e2,e3] d#2", // E
  E: "g4 b3 d4 g4 ~ a4 g4 f#4 g4 d#4 g4 b4 ~ a4 g4 f#4, [d2,d3] [c#2,c#3]", // D C#
  F: "g4 b3 d4 g4 ~ a4 g4 f#4 g4 d#4 g4 b4 ~ a4 g4 f#4, [d2,d3] d#2", G: "g4 b3 e4 g4 ~@4 [f2,f3]@8, [e2,e3]@8 f4 ~@7",
  H: "~@2 g3 ~@7 a3 ~@3 b3@2, g2@8 a3 e3@2 a3@2 c4@3, ~ d3@4 b3@3 a2@8, ~@3 g3@13, ~@3 d3@5",
  I: "[~@2 g3 ~@7 a3 a3@2 c4 b3 ~@4 b3@2 ~@2 g3 ~@3 c4@2 ~@2 a3, b3@5 b3@3 a3 e3@5 ~@2 g1@5 d4@3 ~@5 e4@3, ~ d3@5 d3@8 ~@2 g2@8 ~@8, ~@3 g3@11 ~@4 g3@4 [g1,b3]@2 a1@8, ~@4 a2@8 ~@3 c4]/2", // G
  J: "[~@3 b3@2 ~@2 g3 ~@11 b3@2 ~@2 g3 a3 d3 a3!2 ~ d4 c4 [d2,d3], b2@8 ~ e3@6 g3 g2 d3@4 d4 [g2,b3]@2 ~@8, b1@5 d4@3 ~@3 d4@3 c4@10 ~@8, ~ d3@7 g3@2 g3@3 e4@11 ~@8, ~@2 g3@4 [b1,b3]@2 c2@16 d2@7 ~]/2", // D G B
  K: "c3 e3 g3 c4 ~ e4 c4 g3 d3 f#3 a3 d4 ~ d4 c4 d3, c2@3 c2 d2@4",
  L: "g2 ~ g3 b3 ~ d4 b3 g3 ~@3 c4@2 ~@2 a3, g1@3 g1 a1@4, ~@13 e4@3, ~@7 c4",
  M: "[c3 e3 g3 c4 ~ e4 c4 g3 d3 f#3 a3 d4 ~ d4 c4 ~ g2@4 ~@10 g3 ~, c2@6 c2@2 d2@18 b3@3 a3@2 ~, ~@15 d3@5 g2@11 ~, ~@21 d3@10 ~, ~@22 g3 c4@8 ~]/2",
  N: "g2@2 ~@5 g3, ~@4 g2@9 a3@3, ~@5 d3@11, ~@3 g3@2 b3@3, ~@7 c4@9",
  O: "~@2 g3 ~@7 a3 a3@2 c4 b3 ~, b3@5 b3@3 a3 e3@5 ~@2, ~ d3@5 d3@8 ~@2, ~@3 g3@11 ~@2, ~ a2",
  P: "[~@16 g2@4 d3 g3!2 g3@3 [d3,g3]@3 [g2,d3]@2 ~, g2@13 d3@3 g1@14 ~@2, ~@4 d3@6 g3@10 g2@9 ~@3, ~@5 g3@2 b3@15 c4@8 ~@2, ~@6 c4@15 d3@2 b3@7 ~@2]/2", // G5
  Q: "~@2 g3 b3 ~ d4 b3 g3 ~@3 c4@2 ~@2 a3, ~@13 e4@3, ~@7 c4",
  R: "[~@3 b3@2 ~@2 g3 ~@11 b3@2 ~@2 g3 a3 d3 a3!2 ~ d4 c4 d3, b2@8 ~ e3@8 d3@4 d4 b3@2 ~@8, ~ g3@2 b3 g3 g3@2 c4@5 ~@4, ~@5 d4@3 ~@3 d4@4 g3 g2@8 ~@8, ~@13 e4@11 ~@8]/2",
  S: "d4 [e4,g4] [e4,a4] [g4,a4] [g4,c5] [a4,c5] [a4,e5] [c5,e5] [d5,g5] [e5,f#5] [e5,g5] [f#5,g5] [f#5,a5] [g5,a5] [g5,b5] [a5,b5], c3@2 c4!2 d3@4", // Em A5 Gsus2 C5 Am A5 C G5 …
  T: "[b5,c6] [a5,d6] [g5,b5] g5 [e5,a5] e5 [d5,f#5] d5 [d5,e5] [e5,f#5] [d5,e5] [a4,e5] d5 ~@3, g2@5 ~ g2@2 a2@7 ~", // Cmaj7 D5 G A5 D Dsus2 Esus2 Dsus2 …
  U: "b5 [a5,d6] [g5,b5] g5 [e5,a5] e5 [d5,f#5] d5 [d5,e5] [e5,g5] [d5,e5] [c5,e5] [g4,d5] ~@3, b2@5 ~ b2@2 c3@8", // D5 G A5 D Dsus2 Em Dsus2 C …
  V: "b5 [a5,d6] [g5,b5] g5 [e5,a5] e5 [d5,f#5] d5 [d5,e5] [e5,f#5] [d5,e5] [a4,e5] d5 ~ d2@2, g2@5 ~ g2@2 d2@4 ~@4", // D5 G A5 D Dsus2 Esus2 Dsus2 A5
  W: "d4 [e4,g4] [e4,a4] [g4,a4] [g4,c5] [a4,c5] [a4,e5] [c5,e5] [d5,g5] [e5,f#5] [e5,g5] [f#5,g5] [f#5,a5] [g5,a5] [g5,b5] [a5,b5], c2@5 ~ c2@2 d2@8", // Em A5 Gsus2 C5 Am A5 C G5 …
  X: "b5 [a5,d6] [g5,b5] g5 [e5,a5] e5 [d5,f#5] d5 [d5,e5] e5 d5 ~@5, b2@5 ~@11", // D5 G A5 D Dsus2
})).s("gm_piano").gain(0.31)

// chords · piano · "Right" · soft notes
const piano_soft = note(`<
  ~@2 A B C D ~ D ~ B C D ~ D ~ E F G ~ H ~ I ~ H ~@3 B C D ~ D ~ E F I ~ H ~ I ~ H ~@3 I ~ H ~ I ~ H ~ I J H ~@10 K L ~
>`.pickRestart({
  A: "~@15 d4", B: "~ d4 g4 ~ d4 g4 ~@10", C: "~ d4 f#4 ~ d4 f#4 ~@10, [d2,d3] ~", D: "~ d#3", E: "g3 ~@7",
  F: "[g2,b2]@7 ~", G: "~ d3@7 ~@2 a3@5 ~, ~ a2, ~@9 e3@7", H: "~@2 g3@5 ~@9", I: "~ d3 ~@8 a3@5 ~, ~ a2, ~@9 e3@7",
  J: "~ d3@7 ~@8", K: "~@6 b2@2 ~ g5 e5 [c5,e5] [g4,d5] ~@3, ~ c3",
  L: "b5 [a5,d6] [g5,b5] g5 [e5,a5] e5 [d5,f#5] d5 [d5,e5] [e5,f#5] [d5,e5] [a4,e5] d5 ~ d2@2, g2@5 ~ g2@2 d2@4 ~@4", // D5 G A5 D Dsus2 Esus2 Dsus2 A5
})).s("gm_piano").gain(0.15)

// other · whistle
const whistle = note(`<
  ~@15
  [g5 ~ g5 ~ g5 ~ g5 ~@3 a5 ~ a5 ~ a5 ~]
  [~@2 b5 ~ b5 ~ b5 ~@3 a5 ~ a5 ~ a5 ~]
  ~@16
  [g5 ~ g5 ~ g5 ~ g5 ~@3 a5 ~ a5 ~ a5 ~]
  [~@2 b5 ~ b5 ~ b5 ~@3 a5 ~ a5 ~ a5 ~]
  ~@34
>`).s("gm_whistle").gain(0.31)

// bass · acoustic bass
const bass = note(`<
  ~@3 A B C D E F A B C D E F G H G I J K G I J K L@2 A B C D E F G H G I J K G I J K L@2 G I J K G I J K G I M N G I M
  N G I M N G ~@3
>`.pickRestart({
  A: "g2 c3", B: "~ g2", C: "e2 d#2", D: "d2 c#2", E: "d2 d#2", F: "e2 f2", G: "g1 a1", H: "b1 a1", I: "b1 c2",
  J: "g1 d2", K: "c2 d2", L: "g1!2", M: "g1 d1", N: "c1 d1",
})).s("gm_acoustic_bass").gain(0.26)

// bass · acoustic bass · soft notes
const bass_soft = note("<~@4 A ~@5 A ~@17 A ~@37 B C ~>".pickRestart({
  A: "d2 ~", B: "b1 c2", C: "g1 d1",
})).s("gm_acoustic_bass").gain(0.15)

// chords · string ensemble 2 · "Treble Chords"
const string_ensemble_2 = note(`<
  ~@9 A B C D E F G H I J K L I J K L M@2 A B C D E F G H I J K L I J K L M@2 I J K L I J K L N O P Q N O P Q N O P Q N
  O P ~
>`.pickRestart({
  A: "[d3,g3,b3] [e3,g3,c4]", B: "[d3,f#3,a3] [d3,g3,b3]", C: "[b2,e3,g3] [b2,d#3,g3]", D: "[b2,d3,g3] [c#3,e3,g3]",
  E: "[d3,g3,b3] [d#3,g3,c4]", F: "[e3,g3,b3] [c3,f3,a3]", G: "[b3,d4,g4,b4,d5,g5] [c4,e4,a4,c5,e5,a5]",
  H: "[d4,g4,b4,d5,g5,b5] [c4,e4,a4,c5,e5,a5]", I: "[d3,g3,b3,d4,g4,b4] [e3,a3,c4,e4,a4,c5]",
  J: "[g3,b3,d4,g4,b4,d5] [g3,c4,e4,g4,c5,e5]", K: "[g3,b3,d4,g4,b4,d5] [d3,f#3,a3,d4,f#4,a4]",
  L: "[c3,e3,g3,c4,e4,g4] [d3,f#3,a3,d4,f#4,a4]", M: "[d3,g3,b3]/2", N: "[b3,d4,g4] [c4,e4,a4]",
  O: "[d4,g4,b4] [e4,g4,c5]", P: "[d4,g4,b4] [d4,f#4,a4]", Q: "[c4,e4,g4] [f#3,a3,d4]",
})).s("gm_string_ensemble_2").gain(0.2)

// drums · kick
const kick = s("bd").struct(`<
  ~@9 A ~@6 A B@3 C B@3 C D@2 A ~@6 A B@3 C B@3 C D@2 B@3 C B@3 C B@3 C B@3 C B@3 C B E ~@2
>`.pickRestart({
  A: "x", B: "x ~@2 x!2 ~@3", C: "x ~@5 x ~ x!8", D: "x!4", E: "~ x",
})).gain(0.2).pan(0)

// drums · kick · soft notes
const kick_soft = s("bd").struct(`<
  ~@17 A@3 ~ A@3 ~@11 A@3 ~ A@3 ~@3 A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A B C ~
>`.pickRestart({
  A: "~@14 x!2", B: "x ~@5 x ~@7 x!2", C: "x ~@2 x!2 ~@2 x",
})).gain(0.15).pan(0)

// drums · snare
const snare = s("sd").struct(`<
  ~@13 A@4 B@3 C B@3 C ~@6 A@4 B@3 C B@3 C ~@2 B@3 C B@3 C B@3 D B@3 C B@3 E B@3 ~
>`.pickRestart({
  A: "~ x", B: "~ x ~ x", C: "~ x ~@2", D: "~@4 x ~ x ~ x!8", E: "~@4 x ~ x ~ x ~ x!6",
})).gain(0.2).pan(0)

// drums · low tom
const low_tom = s("lt").struct("<~@13 A ~@12 B ~@4 A ~@12 B ~@24>".pickRestart({
  A: "~@13 x ~ x", B: "~@7 x",
})).gain(0.41).pan(0)

// drums · pedal hat
const pedal_hat = s("hh").struct("<~@17 [~@3 x ~@12]!8 ~@10 [~@3 x ~@12]!8 ~@2 [~@3 x ~@12]!23 ~>").gain(0.2).pan(0)

// drums · mid tom
const mid_tom = s("mt").struct("<~@14 A ~ B ~@9 C ~@5 A ~ B ~@9 C ~@24>".pickRestart({
  A: "~@5 x ~ x", B: "~@10 x ~@2 x!2 ~", C: "~@10 x ~@2 x ~@2",
})).gain(0.31).pan(0)

// drums · splash
const splash = s("cr").struct("<~@17 A ~@3 A ~@13 A ~@3 A ~@5 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3>".pickRestart({
  A: "x",
})).gain(0.41).pan(0)

stack(
  piano, piano_soft, whistle, bass, bass_soft, string_ensemble_2, kick, kick_soft, snare, low_tom, pedal_hat, mid_tom,
  splash
)

More by Celine Dion