Strudelify

I'm Loving Every Moment With You

Celine Dion

KeyC minorTempo74 bpm
0:00/0:00
// I'm Loving Every Moment With You — Celine Dion
// 74 bpm, 4/4, key C minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: bank select 127 (Roland MT-32 map) read through the MT-32 patch table: ch 5 "Rhythm Guitar (MT-32)" Elec Gtr 2 -> overdriven guitar
// note: Full arrangement: all 100 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(74/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.

// other · piano · "Keyboard 1"
const piano = note("<A@4 B C D@3 ~@14 E@3 ~@13 F G ~@25 H@2 ~@14 F G ~@16>".pickRestart({
  A: "[g4@24 ab4@2 bb4@2 g4@2 f4 ~@9 d5@3 c5@5 ~@6 ab4@8 g4@2, ~@31 g4@7 g4@16 ~@10, ~@9 e4 ~@6]/4",
  B: "g4 ~@2 c5, ~@4 bb4@11 ~", C: "g3@15 ~",
  D: "[g3@12 eb3@2 f3 ~ ab3@15 ~ ab4 ~@2 c5@8 ~@5, ~@15 g3@16 g4@2 eb5@2 ~@13, ~@17 bb4 ~@6]/3",
  E: "[f3@12 ~ [f3,f4]@2 [g3,g4]@2 f3@10 ~@5 ab4 ~ bb4 c5@9 ~@4, ~@12 [eb3,eb4]@2 ~@3 ab4@7 ~@7 g4@2 eb5@2 ~@13]/3", // F G Eb
  F: "~@12 bb4@3 ab4", G: "[g4,bb4]@9 ~@7",
  H: "[f3@12 ~ [f3,f4]@2 [g3,g4]@2 f3@10 ~@5, ~@12 [eb3,eb4]@2 ~@3 ab4@7 ~@8]/2", // F G Eb
})).s("gm_piano").gain(0.32).pan(0.9)

// chords · epiano1 · "Keyboard 2"
const epiano1 = note("<~@5 A B@3 ~@91>".pickRestart({
  A: "g3@15 ~", B: "[g3@12 eb3@2 f3 ~ ab3@15 ~ ab4 ~@2 c5@8 ~@5, ~@15 g3@16 g4@2 eb5@2 ~@13, ~@17 bb4 ~@6]/3",
})).s("gm_epiano1").gain(0.28).pan(1)

// chords · overdriven guitar · "Rhythm Guitar (MT-32)"
const overdriven_guitar = note("<A B C D ~ E F G H I J K ~@10 E F G H I J K ~@36 E F G H I J K ~@28>".pickRestart({
  A: "~ [e4,g4] ~ [e4,g4] ~@2 [e4,g4] ~@2 [e4,g4] ~ [e4,g4] ~ [e4,g4]!2 ~", // Em
  B: "~ [eb4,g4] ~ [eb4,g4] ~@2 [eb4,g4] ~@2 [eb4,g4] ~ [eb4,g4]!2 ~ eb4 [e4,g4]", // Eb Em
  C: "~ [e4,g4] ~ [e4,g4] ~@2 [e4,g4] ~@2 [e4,g4] ~ [e4,g4] ~@2 [e4,g4]!2", // Em
  D: "~ [eb4,g4] ~ [eb4,g4] ~@2 [eb4,g4] ~@2 [eb4,g4] ~ [eb4,g4] ~ [eb4,g4]!2 ~", // Eb
  E: "[c4,eb4]!2 d4 [c4,eb4] ~ c4 [c4,eb4] ~@9", F: "[ab3,c4,eb4]!2 d4 [ab3,c4,eb4] ~ c4 [ab3,c4,eb4] ~@9",
  G: "[c4,eb4]!2 d4 [c4,eb4] ~ d4 [c4,eb4] ~@9", H: "[c4,eb4] c4 ~ eb4 ~@12",
  I: "[c4,eb4] eb4 ~ [c4,eb4] ~ d4 [c4,eb4] ~@9", J: "[ab3,c4,eb4]!2 ~ [c4,eb4] ~ d4 [c4,eb4] ~@9",
  K: "[c4,eb4]!2 ~ eb4 ~@12", // Cm
})).s("gm_overdriven_guitar").gain(0.09).pan(0.8)

// chords · acoustic guitar steel · "Lead Guitar"
const acoustic_guitar_steel = note("<A ~@4 B C D ~@14 E C D ~@40 E C D ~@32>".pickRestart({
  A: "~ e4 ~ e4 ~ d4 ~ e4@9, d4 ~@7", B: "~@11 f3 g3 bb3 ~ c3, ~@7 c4", C: "f3@3 ~@9 g3 bb3 c4 c3, ~@11 f3@2 ~@3",
  D: "f3 ~@15", E: "~@11 f3 [g3,eb4,c5] bb3 ~ c3, ~@9 d5@2 ~@5, ~@5 eb4 ~ [c4,eb4,g4]",
})).s("gm_acoustic_guitar_steel").gain(0.24).pan(0.8)

// other · pad new age · "Synth"
const pad_new_age = note(`<
  A@4 B ~@3 C@2 ~@3 D E@2 F D E@2 G H I ~ J@3 ~@3 D E@2 G D E@2 G ~@9 D E@2 G D E@2 G ~ D E@2 G D E@2 G H I ~ J@3 ~@3 D
  E@2 G D E@2 G ~@9 D E@2 G D E@2 G ~@2
>`.pickRestart({
  A: "[g4@24 ab4@2 bb4@2 g4@2 f4 g4@23 ab4@8 g4@2]/4", B: "g4@4 bb4@11 ~", C: "[~@10 ab4 bb4 g4 ~ f4 g4@12 ~@5]/2",
  D: "~@2 b3 ~ b3!4 b3@2 c4 ~ a3 ~ b3 ~", E: "[~@2 g3 ~ g3 ab3!3 ab3@2 bb3 ~ g3 ~ f3 g3@5 ~@4 f4@2 e4 e4@3 f4 ~]/2",
  F: "g4@3 f4 e4@4 ~@8", G: "g4@3 f4 e4@7 ~@5", H: "[bb3,g4] [b3,eb4]", I: "c4@9 ~@7",
  J: "[~@16 ab4 ~ bb4 ~@7 ab4 bb4 g4 ~ f4 g4@12 ~@5, ~@15 g4@2 eb5@2 c5@9 ~@20]/3",
})).s("gm_pad_new_age").gain(0.4).pan(0.1)

// other · pad poly · "Solo (starts at bar 47)"
const pad_poly = note("<~@46 A B C D E F G H I J K ~@43>".pickRestart({
  A: "~@9 g4@2 ~@3 d5 g5, ~@11 a4@3 ~@2, ~@3 c5", B: "g5 a5@5 g5@8 g5!2",
  C: "g5@2 f5@3 ~ eb5 c5 f5 eb5 [c5,f5] eb5 [c5,f5] eb5 [c5,f5] eb5", D: "c5@2 ~ c5 a5@2 g5@4 f5 ~ e5@2 d5 c5",
  E: "d5 a4 c5@4 bb4 g4 f4@2 f4@5 ~", F: "~@3 g4 d5@2 c5@4 g5@4 f5 [c5,eb5], ~@4 c5 ~@11",
  G: "c6 ~ c6@2 bb5@2 [f5,g5] g5@3 f5@4 ~@2, ~@7 f5 ~@8", H: "~@3 g5 [g5,a5] ~ a5 g5 d6@2 b5@4 g5 e5, ~@2 b5 ~@5",
  I: "g5 ~@10 f5 e5@4, a5@3 ~, ~@5 g5 ~@2", J: "~@13 e5 ~ b5, ~@12 c5@3 ~", K: "~ b5@2 g5@12 ~",
})).s("gm_pad_poly").gain(0.56).pan(0.9)

// chords · epiano2 · "Harmonic Pad (keyboard)"
const epiano2 = note(`<
  A B A B C D E F@2 D E F G H I J K L I M N O P E F@2 D E F G H I J K L I M N Q R S T U V W X Y H I J K L I M N G H I J
  K L I M N O P E F@2 D E F G H I J K L I M N Q R S T U V W X Y H I J K L I M N O ~
>`.pickRestart({
  A: "[c3,g3,b3,d4,e4,g4]", B: "[bb2,ab3,c4,eb4,g4] eb2", C: "[d2,c4,e4,g4] ab4 bb4 c5, ~ [db2,c4,f4]@3",
  D: "[c2,bb3,c4,eb4,g4]", E: "[f2,ab3,c4,eb4,g4]", F: "[bb2,ab3,c4,eb4,g4]",
  G: "[c4,eb4,g4]@2 [g3,c4,g4] [g2,a3,c4,f4], bb2@3 ~", H: "[c3,b3,e4,g4] [a2,b3,e4,g4]",
  I: "[bb2,c4,eb4,g4] [eb3,c4,eb4,ab4], ab3 ~ bb3 ~", J: "[c3,b3,e4,g4]@2 a2 g2, ~ [b3,e4,g4]",
  K: "[f2,c4,e4,a4]@2 [ab2,eb4,g4,bb4] [g2,d4,f4,a4]", L: "[c3,b3,c4,e4,g4] [a2,b3,e4,g4]",
  M: "c3 b2 a2 e2, [d4,g4], b3 c4", N: "[f2,a3,c4,e4]", O: "[ab2,bb3,c4,eb4] [g2,ab3,db4,f4]", P: "[c2,g3,c4,eb4,g4]",
  Q: "c3@2 d2 e2", R: "[f2,ab3,c4,eb4]", S: "[g2,bb3,eb4]", T: "[ab3,bb4] ab4, [db3,eb4,g4]",
  U: "[c3,eb4,g4,d5] [bb2,eb4,g4,c5], c4", V: "[ab2,c4,eb4,g4,d5] [ab2,c5]", W: "[db2,ab3,f4,c5] bb4",
  X: "[f2,ab3,eb4,g4,bb4] f2", Y: "[bb2,ab3,c4,eb4,g4] [g2,a3,c4,f4]",
})).s("gm_epiano2").gain(0.25)

// chords · string ensemble 2 · "String Pad"
const string_ensemble_2 = note(`<
  A B A C D ~@7 E F G H E F G I J K L ~@6 E F G H E F G I J M N O@2 P@2 Q R@2 F G H E F G I J S F G H E F G I J K L ~@6
  E F G H E F G I J M N O@2 P@2 Q R@2 F G H E F G I J K ~
>`.pickRestart({
  A: "[g3,b3,e4]", B: "[ab3,c4,eb4,f4]", C: "eb4 [g3,eb4], c4@15 ~, ab3@13 ~@3", D: "[c4,e4] [f3,c4,f4]@3, g3",
  E: "~@2 [g3,g4] [a3,f4]", F: "b3@3 a3, e4", G: "[c4,eb4]", H: "[b3,e4]@15 ~", I: "~@2 e5 g5 d6 c6!2 d6, [b3,e4]@15 ~",
  J: "e6", K: "eb6 f6", L: "g6", M: "eb6@2 [f3,c4] [g3,c4], ~ f6", N: "[ab3,c4,g6]",
  O: "[[bb3,c4]@7 ~ bb3@5 c4 [bb3,g5] c4 [bb3,bb5]@8 [ab3,ab5]@8, ~@7 c4@2 ~@6 c6@2 ~@15]/2", // Bbsus2 Eb Bb Ab
  P: "[d6@8 c6@6 ~ d6@9 c6@8, g3@7 eb5 ~@8]/2", Q: "c6 bb5", R: "[bb5@26 g5@3 ~@3]/2", S: "eb6@2 [g3,g4] [a3,f4]",
})).s("gm_string_ensemble_2").gain(0.36).pan(0.9)

// other · string ensemble 1 · "Additional Strings"
const string_ensemble_1 = note("<~@26 A@3 ~@9 B C@4 D E F G ~@22 H@3 ~@9 B C@4 D E F G ~@10>".pickRestart({
  A: "[~@9 c3 eb3 c3 f3 eb3 bb3 g3@5 ~@5 c3 eb3 c3 f3 eb3 bb3 g3@6 ~@11]/3", B: "~@2 d3 e3",
  C: "[f3@24 ~@8 bb3@4 ab3 bb3 ~ ab3@4 ~ ab3 bb3 ab3 ~@4 eb3 d4@2 c4@5 eb3 d4@2 c4@2, ~@24 eb3@23 g3@17]/4",
  D: "d4@4 [bb3,c4] c4 ~ c4@5 bb3@2 c4 ~", E: "c4", F: "~@2 bb3 ~ bb3@3 ab3 bb3 ~ bb3 ab3 bb3 c4 bb3 ab3",
  G: "bb3@3 ~@5", H: "[~@9 c3 eb3 c3 f3 eb3 bb3 g3@5 ~@5 c3 eb3 c3 f3 eb3 bb3 g3@9 ~@8]/3",
})).s("gm_string_ensemble_1").gain(0.4).pan(0.4)

// bass · slap bass 1 · "Bass"
const bass = note(`<
  ~@4 A B C D E F G H I J K L M J K N O P Q C D E F G H I J K L M J K N R S T@2 U V W X Y Z J K L M J K N AA I J K L M J
  K N O P Q C D E F G H I J K L M J K N R S T@2 U V W X Y Z J K L M J K N R ~@2
>`.pickRestart({
  A: "~@3 c2", B: "c2 ~@2 c2 ~@3 g1 c2 ~@4 c1 g1 c1", C: "f1!2 ~ f1 ~@3 c1 f1 ~@5 f1 g1",
  D: "bb1!2 ~ bb1 ~@3 f1 bb1 ~@6 f1", E: "bb1!2 ~ bb1 ~@3 f1 bb1 ~@3 bb1@3 ~", F: "c2!2 ~ c2 ~@3 g1 c1 ~@6 c1",
  G: "f1 ~@2 f1 ~@3 c1 f1@2 ~@4 f1 g1", H: "bb1@2 ~ bb1 ~@3 f1 bb1 ~@6 f1", I: "bb1@2 ~ bb1 ~@3 f1 bb1@2 ~@2 g1@4",
  J: "c2@4 ~ c3 a2 c2 a1@4 ~ a1 c2 a1", K: "bb1@4 ~@3 bb1 eb2!2 bb1 g1 ~ g1 ab1 g1, ~@6 eb1 ~",
  L: "c2@5 c2 g1 a1@4 ~ g1@4", M: "f1@5 c2 f1 g1 ab1@4 g1@4", N: "c2@5 c2 g1 a1@4 ~ e1@4", O: "f1@5 ~@5 c2!3 d2@2 c2",
  P: "ab1@3 ~@2 g2 eb2 c2 ab1@2 ~@2 g2@4", Q: "c2!2 ~ c2 ~@3 g1 c2 ~@4 c1 g1 c1", R: "f1@5 ~@4 c2!4 d2@2 c2",
  S: "ab1@5 g2 eb2 c2 d1@4 e1@4", T: "[f1@5 ~@2 f1 f1@5 f1 ~ g1@5 ~@3 g1 g1@4 g1 ~ bb1 c2]/2",
  U: "db2@5 db2 ab1 db1@4 ~ ab1@2 ~ ab1, ~@7 db2", V: "c2@6 ~ c2 bb1@4 bb1 ~ g1 bb1, ~@3 g1 ~@4",
  W: "ab1@6 ~ eb1 ab1@5 eb1 ab1 eb1", X: "db1@4 ~ db1 ab1!2 db2@2 ~ db2@4 e1", Y: "f1@3 ~@4 f1 f1@3 ~@3 c2 g1",
  Z: "bb1@5 ~ f1 ab1 ~@4 g2@2 e2@2, ~@8 g1@7 ~", AA: "f1@5 ~@11",
})).s("gm_slap_bass_1").gain(0.46)

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

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

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

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@12 A ~@7 B ~@8 A ~@6 B@2 ~@7 B@2 ~@7 B A ~@7 B ~@8 A ~@6 B@2 ~@7 B@2 ~@6 B@2 ~@2
>`.pickRestart({
  A: "~@7 x", B: "~@15 x",
})).gain(0.21)

// drums · mid tom
const mid_tom = s("mt").struct("<~@38 [~@9 x ~@2 x ~@2 x] ~@42 [~@9 x ~@2 x ~@2 x] ~@18>").gain(0.21)

// drums · open hat
const open_hat = s("oh").struct("<~@13 A@7 ~@10 A@6 ~@3 A@6 ~@2 A@7 ~@2 A@7 ~@10 A@6 ~@3 A@6 ~@2 A@6 ~@4>".pickRestart({
  A: "~ x ~ x",
})).gain(0.21)

// drums · high tom
const high_tom = s("ht").struct("<~@38 [~@13 x!2 ~] ~@42 [~@13 x!2 ~] ~@18>").gain(0.21)

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

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~ A B ~@10 C D C D C D C E A ~@8 C D C D C D E@2 F D C D C D C E@2 C D C D C D C E ~ C D C D C D C E A ~@8 C D C D C D
  E@2 F D C D C D C E@2 C D C D C D E@2 A ~
>`.pickRestart({
  A: "~@14 x!2", B: "x", C: "~ x", D: "~@4 x ~@2 x ~@4 x ~@3", E: "~ x ~ x", F: "~@13 x ~ x",
})).gain(0.21)

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

// drums · congas
const congas = s("conga:13").struct(`<
  ~@13 A@7 B C ~@8 A@6 B@2 C A@6 B@2 A@7 B ~ A@7 B C ~@8 A@6 B@2 C A@6 B@2 A@6 B@2 C ~
>`.pickRestart({
  A: "~@7 x ~@5 x ~ x", B: "~@2 x ~ x ~@3 x ~@2 x ~@3 x", C: "~@2 x ~@4 x ~@7 x",
})).gain(0.67)

// drums · cabasa
const cabasa = s("cabasa:4").struct(`<
  A B C ~ D E@7 F G@7 H I E@7 F G@6 H@2 F G@6 H@2 G@7 H F G@7 H I E@7 F G@6 H@2 F G@6 H@2 G@6 H@2 I ~
>`.pickRestart({
  A: "~@15 x", B: "x ~@12 x ~ x", C: "x ~@8 x ~ x!5", D: "~@13 x!3", E: "~@10 x ~@2 x ~@2", F: "~@5 x ~@2",
  G: "~@2 x ~@2 x ~@4 x ~@3 x ~", H: "~@7 x ~@2 x ~@2 x ~@2", I: "~@10 x ~ x ~ x!2",
})).gain(1.06)

stack(
  piano, epiano1, overdriven_guitar, acoustic_guitar_steel, pad_new_age, pad_poly, epiano2, string_ensemble_2,
  string_ensemble_1, bass, kick, snare, hihat, low_tom, mid_tom, open_hat, high_tom, crash, tambourine, ride, congas,
  cabasa
)

More by Celine Dion