Strudelify
The Colour Of My Love cover art

1993 · The Colour Of My Love

The Colour Of My Love

Celine Dion

KeyF minorTempo58 bpm
0:00/0:00
// The Colour Of My Love — Celine Dion
// 57.7 bpm, 4/4, key F minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 48 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(57.7/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 · "piano"
const epiano2 = note("<A@6 B C D E F G H I J@2 K L M@3 N@8 O@2 P@8 Q@6 R@3>".pickRestart({
  A: "[~@15 ab4@10 ~@5 gb4@12 ~@6 ab4@11 ~@4 gb4@12 ~@12 ab3@5 ~@8 gb4@8 ~@14 ab3@5 ~@32 [db4,f4]@17 [db4,f4]@16, ~@9 db4@16 ~ bb3@17 ~@3 f4@13 ~@2 f4@14 ~@4 eb4@13 ~@16 ab3@9 ab4@11 ~@64, ~@11 eb4@14 ~@17 db4@17 bb3@16 ab3@8 ab4@9 ~@23 f4@13 ~@64, ~@13 f4@12 ~@3 f4@15 ~ eb4@15 ~@18 db4@15 bb3@17 ~ db4@18 ~@10 c4@54, ~@81 f4@11 ~@4 f4@13 ~@3 eb4@15 bb3@14 ~@18 ab3@32 ~]/6", // Db
  B: "ab3 ~@2 ab3 [a3,c4,eb4]@4, [c4,eb4]!2 ~@2, ~ ab3@2 ~@5", // Adim Cm
  C: "~@3 f3 [bb2,f3,bb3,db4]@2 f3!2, [db4,f4]@8 [db4,f4]@7 ~@17, ~ f3@2 ~@3 [ab2,ab3,c4]@2", // Bbm Db Ab
  D: "[gb3,bb3]@2 ~ gb2 [f3,ab3]@2 [f3,ab3,db4]@2, gb2@3 ~ f2@4, ~ [gb3,bb3,eb4] ~@2", // Gb Fm Db Ebm
  E: "~@5 gb4 [gb4,ab4,db5]@10, gb3@4 ab4 bb4@11, ~ bb3@7, ~@3 db4@13, ~ eb4@3", // Gbsus2
  F: "ab3 ~@2 ab3 [db4,f4]@2 ~ bb3, [db4,f4]@4 [db4,f4]@4 bb3 ~@3 [db4,f4]@4, ~ ab3@2 ~ gb2@4", // Db
  G: "~@3 ab3 ~@3 a3, ab2 a2, [c4,eb4]!4, ~ ab3@2 ~@2 a3@2 ~", // Cm
  H: "~@3 bb3 ~ f3!3, bb2@25 ~@7, [db4,f4]@8 [db4,f4]@9 ~@7 [ab2,ab3,c4]@8, ~@4 bb3@8 ~@4 [bb3,db4]@9 ~@7", // Db Ab Bbm
  I: "gb3@2 gb3@2 gb3@2 ~ gb2 ab3@4 ab3@2 ab3@2, gb2@3 gb3 f2@4, bb3@4 [bb3,db4]@4 f3 ~@3 db4@4", // Bbm
  J: "[[db4,eb4]@9 ~@6 ab4@2 ~ [gb4,ab4,bb4,db5]@23 ~@19 bb3@4, ab2@41 ~@7 [eb2,eb3]@16, ab3@4 ~@5 [db4,eb4]@32 ~@7 [db4,eb4,gb4]@8 [db4,eb4,gb4]@8, ~@13 gb4@5 ~@34 bb3@8 ~@4]/2", // Dbsus2 Gb Eb Dbsus2 Ebm7
  K: "c4!2 ~ ab3 c4 ~@2 c4, [ab1,ab2,eb4] [f1,f2], gb4 [c4,gb4] [eb4,ab4]!2, ~@5 c4@2 ~", // Ab5 F Cdim Ab5
  L: "c4@3 ~@25 bb3@4, bb2@4 [db4,eb4,gb4] bb3 [db4,eb4,gb4]@2, eb4@2 db4 bb3 [eb2,eb3]@4, ab4 [f4,ab4]@3, ~ c4@7", // Ebm7 Eb Fm
  M: "[c4@4 c4@4 ~@19 db4@4 db4@4 db4@4 eb4@9 ~@7 db3@8 db3@8 db3@8 ~@12 db4@4 c4, [f2,f3]@16 [gb4,ab4]@3 db4@4 [gb4,ab4]@8 ab2@17 ~@31 db3@16 ~, [eb4,ab4]@8 [c4,eb4]@23 eb4@8 db4@4 ~@53, ~ ab4 [gb2,gb3]@2 ~@8, ~@3 ab3@5 ~@16]/3", // F Gbsus2 Ab5 Cm Gb
  N: "[~@11 ab3@3 ~@29 db4@4 ~@12 c4@4 db4@4 ~@8 db4@3 ~@13 bb3@4 bb3@4 ~@8 ab3@4 ~@8 db4@4 ab3@3 ~@29 bb3@4 c4@4 c4@4 ~@4 ab3@4 c4@4 ~@8 c4@3 c4@3 ~@25 bb3@4 c4@4 c4@4 ~@20 db4@4 [ab2,db4,eb4]@2, ~@7 bb3@7 ~ gb3@32 [f4,ab4]@8 [f4,ab4]@8 bb4@8 [f4,bb4]@7 ~@5 bb3@8 ~@4 ab3@12 ~@8 ab3@8 ~@8 ab3@8 ab3@4 [db4,eb4,gb4]@4 bb3@4 [db4,eb4,gb4]@8 [ab1,ab2,eb4]@17 ~@14 bb2@32 [f2,f3]@16 [gb4,ab4]@4 db4@4 [gb4,ab4]@9 ~, ~@15 [gb4,bb4]@8 [gb4,bb4]@8 [gb4,bb4]@8 [gb4,bb4]@9 ~@3 c4@8 ~@4 [bb2,bb3,ab4]@15 ~ [eb2,eb3]@16 [ab2,db4]@16 [db2,db3,ab4]@15 ~ [f2,f3]@32 gb4@8 ~@8 [eb4,ab4]@8 [eb4,ab4]@7 eb4@8 db4@4 bb3@4 [eb2,eb3]@16 [eb4,ab4]@8 ~@4 ab3@20 ~@2, ~@19 db4@8 db4@8 db4@8 ~@4 [f2,f3]@17 ~@3 db4@8 ~@4 [db4,eb4,gb4]@8 [db4,eb4,gb4]@8 ~@4 bb3@12 ~@16 [db4,f4]@8 db4@8 [eb2,eb3,bb4]@17 ~@15 [f1,f2]@17 ~@2 c4@12 [db4,eb4,gb4]@4 bb3@4 [db4,eb4,gb4]@9 ~@7 [c4,eb4]@24 ~@2, ~@103 [c4,eb4]@8 [db4,f4]@8 f4@7 ~@9 [f4,ab4]@25 ~@7 [c4,gb4]@9 ~@3 c4@8 ~@3 ab4@8 [f4,ab4]@25 ~@7 ab4@8 [gb2,gb3]@16 ~@2]/8", // Absus4 Fm Bb5 Ebm7 Ab5 F Gbsus2 Gb …
  O: "[~@2 db4@4 eb4@9 ~@7 db3@8 db3@8 db3@8 ~@12 db4@4 c4@2, ~@3 db4@2 ~@18 db3@8 ~]/2",
  P: "[~@6 bb3@8 ~@28 c4@4 ~@12 b3@4 c4@4 ~@8 c4@3 ~@13 a3@4 a3@4 ~@8 g3@4 ~@8 c4@4 g3@3 ~@29 a3@4 b3@3 b3@4 ~@4 g3@4 b3@4 ~@8 b3@4 b3@3 ~@25 a3@4 b3@4 b3@4 ~@4 g3@4 ~@12 a3@4 [e2,e3,b3,d4,g4]@3, ~@14 [a3,c5]@32 [e4,g4]@8 [e4,g4]@8 a4@8 [e4,a4]@7 ~@5 a3@8 ~@4 g3@12 ~@8 g3@8 ~@8 g3@8 g3@4 [c4,d4,f4]@4 a3@4 [c4,d4,f4]@8 [g1,g2,d4]@17 ~@14 a2@32 [e2,e3]@17 ~@18, ~@14 [f4,a4]@8 [f4,a4]@8 [f4,a4]@8 [f4,a4]@9 ~@3 b3@8 ~@4 [a2,a3,g4]@15 ~ [d2,d3]@16 [g2,c4]@16 [c2,c3,g4]@15 ~ [e2,e3]@32 f4@7 ~@8 [d4,g4]@8 [d4,g4]@8 d4@8 c4@4 a3@4 [d2,d3]@16 [d4,g4]@8 ~@8 [f2,f3,g4]@17 ~@2, ~@18 c4@8 c4@8 c4@8 ~@4 [e2,e3]@17 ~@3 c4@8 ~@4 [c4,d4,f4]@8 [c4,d4,f4]@8 ~@4 a3@12 ~@16 [c4,e4]@8 c4@8 [d2,d3,a4]@17 ~@14 [e1,e2]@17 ~@3 b3@12 [c4,d4,f4]@4 a3@4 [c4,d4,f4]@9 ~@7 [b3,d4,g4]@10 ~@2 a3@8 ~@7, ~@102 [b3,d4]@8 [c4,e4]@8 e4@7 ~@9 [e4,g4]@25 ~@6 [b3,f4]@9 ~@3 b3@8 ~@4 g4@8 [e4,g4]@25 ~@15 f4@8 [c4,d4,f4]@9 ~@2]/8", // Em7 Am Em A5 Dm7 G5 E F …
  Q: "[~ b3@4 ~@4 g3@4 ~@12 a3@4 b3@4 b3@4 ~@20 c4@4 c4@4 c4@4 d4@8 ~@8 c3@8 ~@8 c3@8 ~@6 g4@10 ~@4 f4@11 ~@13 g3@4 ~@8 f4@9 ~@14 g3@4, ~@5 [b3,d4,g4]@8 [f2,f3,g4]@16 [d4,g4]@8 g4@8 [f2,f3,f4,g4]@4 c4@4 [f4,g4]@9 ~@17 d4@7 ~@7 c3@8 ~@8 c3@24 ~@14 e4@10 a3@17 g3@9 g4@9, ~@13 f4@8 [c4,d4,f4]@9 ~@7 [b3,d4]@24 d4@8 c4@4 ~@4 c4@9 ~@7 a3@13 ~@3 c4@16 a3@15 ~ g3@8 g4@9 ~@22 e4@12, ~@17 a3@8 ~@4 [e2,e3]@32 g2@17 ~@5 g4@10 ~@4 f4@9 ~@7 e4@12 ~@2 e4@13 ~@5 d4@13 ~@3 e4@13 ~@4 d4@14, ~@41 g3@20 ~@20 e4@12 ~@2 e4@11 ~@5 d4@14 ~@18 c4@15 ~@18 c4@16]/6", // G Fsus2 G5 Fsus2 Dm7 Bm E
  R: "[~@33 c4@32 ~@31, a3@7 ~@41, ~@11 b3@54 ~@31]/3",
})).s("gm_epiano2").gain(0.19)

// chords · epiano2 · "piano" · soft notes
const epiano2_soft = note("<~@4 A@2 B C ~@2 D ~ E F G@2 ~@3 H ~@4 I ~@4 J ~@4 K ~@6 L ~@4 M ~>".pickRestart({
  A: "[~@3 [gb2,gb3,bb3], ~@31 [db2,db3]@32 ~]/2", B: "ab2 a2", C: "[bb2,bb3]@15 ~@17", D: "db3@17 ~@3 bb3@8 ~@4",
  E: "~@8 f3 ~@7", F: "~@5 f3@3", G: "[~ ab3@9 ~@6]/2", H: "~@11 db4@4 [db2,ab3,db4,f4]@9 ~@8, ~@15 db3@3 ~@14",
  I: "~@27 db4@3 ~@2", J: "~@10 db4@4 [db2,ab3,db4,f4]@9 ~@9, ~@14 db3@3 ~@15", K: "~@26 c4@3 ~@3",
  L: "~@9 c4@4 [c2,c3,g3]@9 ~@10, ~@13 e4@4 ~@15", M: "~ [c2,c3,g3,e4]@31",
})).s("gm_epiano2").gain(0.13)

// chords · pad new age
const pad_new_age = note("<A@3 B@3 ~@35 C@4 D@2 ~>".pickRestart({
  A: "[~@13 db6@4 ~@4 f5@4 ~@5 db6@8 ~@2 eb5@2 ~@4 ab5@4 ~@4 db5@4 ~@15 eb4@2 ~@4 ab4@4 db5@4 f4@5 gb4@4, ~@9 ab5@16 ~ gb5@13 ~@3 f5@17 db5@15 ~@22, ~@17 db6@8 ~@13 db5@4 ~@8 ab5@9 ~@8 gb5@7 ~@22, ~@71 db4@4 f4@8 ~@13]/3",
  B: "[~@8 db4@2 ab4 ~@5 db5@5 ~@5 f4@5 gb4@11 ab4@25 ~@29, eb5@12 ab4@9 db5@8 ~@67]/3",
  C: "[~@17 c6@4 ~@4 e5@4 ~@4 c6@8 ~@2 d5@2 ~@4 g5@4 ~@4 c5@4 ~@14 d4@2 ~@4 g4@4 c5@4 e4@4 f4@4 ~@9 c4@2 g4 ~@5 c5@5 ~@5 e4@4, ~@13 g5@16 f5@13 ~@3 e5@16 c5@12 c4@4 e4@8 ~@25 g4@10 ~@8, ~@21 c6@8 ~@12 c5@4 ~@8 g5@9 ~@7 f5@7 ~@21 d5@12 ~@10 c5@8 ~]/4",
  D: "[f4@11 ~@22 c4@31, ~@11 g4@25 ~@28]/2",
})).s("gm_pad_new_age").gain(0.15)

// bass · fretless bass · "base"
const bass = note("<~@2 A@4 ~@4 B C D E F@2 G H@4 I@8 J@2 K@7 L@7 M@3>".pickRestart({
  A: "[~@11 db1@17 bb1@15 ~@10 bb1@10 [ab1,ab2]@37 ~@28, ~@11 f1@3 ~@18]/4", B: "db1 gb1", C: "ab1 a1",
  D: "bb1@6 [f1,f2] [c2,c3] [bb1,bb2]@4 ab1@4", E: "gb1@6 ~ gb1 f1@4 [bb1,bb2]@4, ~@3 eb1 ~@4",
  F: "[ab1@18 ab1@29 ~ eb1@14 ab2 [bb1,bb2], ab2@47 ~@17]/2", G: "ab2@3 gb2 f2@4, ab1 ~@7",
  H: "[~@8 bb1@8 ~@16 f1@16 ~@15 ab2@16 [db1,db2]@35 ~@9 db2@4 c2, bb2@15 ~ eb1@35 ~@77, ~@24 gb1@9 ~@31]/4", // Db
  I: "[~@7 bb1@4 ab1@4 gb2@32 f2@12 ab2@4 bb2@16 ~@13 ab2 bb2 ~@14 gb2@3 f2@13 ~ gb2 ab2@17 ~@14 ab2 [bb1,bb2] ab2@12 gb2@4 f2@16 ~@8 bb1@8 ~@15 f1@16 gb1@16 ab2@2, ~@79 eb2@15 ab2@17 ~@13 f2@4 ~@15 eb1@16 ab1@4 ~@28 bb2@15 ~ eb1@35 ~@14]/8", // Bb
  J: "[~@14 db2@14 db2@3 db2@15 db2 db2@11 db2@4 c2@2, ~@14 db1@31 ~@19]/2",
  K: "[~@6 bb1@4 ~@4 f2@32 e2@12 g2@4 a2@16 ~@13 g2 a2 ~@14 f2@3 e2@13 ~ f2 g2@17 ~@14 g2 [a1,a2] g2@12 f2@4 ~@23 a1@8 d1@16 e1@3, ~@78 d2@15 g2@17 ~@13 e2@4 ~@15 d1@16 g1@4 ~@12 e2@18 ~@32, ~@189 a2@15 ~@20]/7", // A
  L: "[~@13 d2@16 e1@16 ~@16 e1@16 f1@16 g2@16 c2@14 c2@2 c2@15 ~ c2@14 c2@2 c2@16 c1@16 a1@15 ~@11 a1@9, ~@45 f1@20 ~@44 c1@31 ~@66 e1@12 ~@6]/7",
  M: "[~@11 c1@12 ~@9, [g1,g2]@37 ~@59, ~@11 c2@11 ~@10]/3", // G
})).s("gm_fretless_bass").gain(0.19)

// bass · fretless bass · "base" · soft notes
const bass_soft = note("<~@2 A@2 ~@9 B ~ C ~ D E ~ F@2 ~@3 G H@3 ~ I@2 ~@3 J K@5 ~@2 L@2 ~@3>".pickRestart({
  A: "[~@28 bb2@15 ~@21]/2", B: "~@7 gb2 f2@4 ~@4, ~@3 eb2 ~@4", C: "~@8 eb2@7 ab1", D: "bb1@3 ~@5 eb2@8", E: "f2 gb2",
  F: "[~@27 db3@4 c3@8 bb2@4 ab2@4 gb1@4 ~@13]/2", G: "~@15 eb2@14 ab1@2 ~",
  H: "[~@31 bb1@6 ~@25 f2@16 gb2@16 ~@2, ~@47 eb2@18 ~@31]/3", I: "[~@26 db3@4 c3@8 bb2@5 ~@3 f1@4 ~@14]/2",
  J: "~@7 d2@7 g1 ~", K: "[~@29 a1@6 ~@10 d2@16 e2@10 ~@22 e2@16 f2@16 e2@16 f2@16 ~@3]/5", L: "[~@29 a2@15 ~@20]/2",
})).s("gm_fretless_bass").gain(0.1)

// other · oboe
const oboe = note("<~@15 A B C@4 D@2 E@5 ~@3 F@2 G@5 H@2 ~@8>".pickRestart({
  A: "~@8 bb4@6 c5 db5", B: "bb5@12 c5@4 ab5@12 c5@3 ~",
  C: "[c5@4 db5@4 eb5@4 f5@3 ~ f5@2 gb5@2 ~@12 eb5@4 c6@8 bb5@7 ab5@8 gb5@4 bb4@4 ~@12 db5@27 ~@22, ~@20 db6@15 ~@32 f5@16 ~@45]/4",
  D: "[~@15 gb4@16 gb5@16 ~@17]/2", E: "[~@3 c5@4 db5@4 f5@4 gb5@28 ab4@4 f5@64 eb5@21 ~@7 c5@4 db5@16 ~]/5",
  F: "[~@7 f4@8 f5@8 ~@9]/2", G: "[~@2 b4@4 c5@4 e5@4 f5@28 g4@4 e5@64 d5@21 ~@6 b4@4 c5@16 ~@3]/5",
  H: "~@13 c5@16 ~@3",
})).s("gm_oboe").gain(0.16)

// chords · acoustic guitar nylon
const acoustic_guitar_nylon = note("<~@23 A@3 ~ B ~ C@3 ~ D@3 ~ E ~@10>".pickRestart({
  A: "[~@3 c4@4 db4@4 f4@4 ~@24 c4@4 ab3@4 ab3@26 ~@23, ~@15 gb4@28 ~@53]/3",
  B: "~@5 db4 eb4 ~@8 bb3@15 ~@2, ~@7 f4@13 ~@12, ~@13 db4@8 ~@11",
  C: "[~@15 ab4@6 ~@9 db4 ~@2 db4@2 ~@9 ab3@2 ~@2 f4@25 ~@23, ~@14 ab2@15 ab3@2 ab2@17 ~@48, ~@14 db4@6 ~ db4@4 db4@5 eb4@4 ~ eb4 gb4@3 ab3 ab4@7 ~@49, ~@15 [ab3,f4]@12 f4@4 ab3@6 eb4@11 ~@48, ~@23 ab4@8 gb4@5 db4@6 gb4@5 [db2,db3,ab3,db4]@26 ~@23]/3", // Db Db5
  D: "[~ b3@2 c4@2 e4@2 ~@12 b3@2 g3@2 g3@13 ~@12, ~@7 f4@14 ~@27]/3", E: "~@3 c4 d4 ~@6 c4@8 ~@13, ~@5 e4@13 ~@14",
})).s("gm_acoustic_guitar_nylon").gain(0.12)

// drums · low tom
const low_tom = s("lt").struct("<~@21 [~@4 x!12 ~@16] ~@9 [~@2 x!13 ~@17] ~@16>").gain(0.1)

// drums · low tom · soft notes
const low_tom_soft = s("lt").struct("<~@20 [~@29 x!3] [x!4 ~@28] ~@8 [~@28 x!4] [x!2 ~@30] ~@16>").gain(0.03)

// drums · mid tom
const mid_tom = s("mt").struct("<~@21 [~@3 x!13 ~@16] ~@9 [~@2 x!13 ~@17] ~@16>").gain(0.06)

// drums · mid tom · soft notes
const mid_tom_soft = s("mt").struct("<~@20 [~@29 x!3] [x!3 ~@29] ~@8 [~@28 x!4] [x!2 ~@30] ~@16>").gain(0.03)

stack(
  epiano2, epiano2_soft, pad_new_age, bass, bass_soft, oboe, acoustic_guitar_nylon, low_tom, low_tom_soft, mid_tom,
  mid_tom_soft
)

More by Celine Dion