0:00/0:00
// C'est pour toi — Celine Dion
// 64 bpm, 4/4, key D# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: duplicate parts dropped: ch 15 "Clean Guitar" electric guitar clean (copy of ch 14 "Steel String Guitar" acoustic guitar steel)
// note: Full arrangement: all 65 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(64/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.
// bass · fretless bass
const bass = note("<~@12 A B C D A B C D ~@8 E F G H I J K D ~@29>".pickRestart({
A: "eb2", B: "c2", C: "b1 db2", D: "gb1@2 ab1 bb1", E: "db3@13 ~ db3@2", F: "c3@14 c3 ~", G: "b2@8 db3@4 ~@2 f2 ~",
H: "gb2@3 gb2 ab2@2 bb2@2", I: "eb2@13 ~ eb2 ~", J: "c2@13 ~ c2@2", K: "b1@3 b1 db2@4",
})).s("gm_fretless_bass").gain(0.23)
// bass · electric bass finger · "Fingered Bass"
const bass_2 = note("<~@20 A B C D C E F G ~@8 A B C D C E F H C E I J ~@17>".pickRestart({
A: "ab1@7 ab1 db2@4 db2@4", B: "gb2@4 f2@4 eb2@3 eb2 f1@2 gb1@2", C: "ab1@6 ~ ab1 db2@4 db2@4",
D: "gb1@3 gb1 ab1@2 bb1@2", E: "gb2@2 f2@2 eb2@2 ~ eb2", F: "ab1@2 bb1!2", G: "~ eb1, eb2",
H: "eb2@6 bb1@2 eb1@3 bb1 eb2 bb1 eb1@2", I: "ab1@4 ~ ab1 ~ bb1 ~ bb1 bb1@3 ~ bb1@2",
J: "~@2 eb2@3 bb1@3 [eb1,eb2]@8", // Eb
})).s("gm_electric_bass_finger").gain(0.24)
// chords · piano · "Piano 1"
const piano = note(`<
A B C D E B F G H I J K E B F G E B F L M N O P M Q R S E B F G E B F L M N O P M Q R T U Q R S ~@7 V E B W X@3 Y@3
>`.pickRestart({
A: "[eb4,f4,gb4,bb4]!4", B: "[c4,f4,gb4,bb4]!4", C: "[b3,eb4,gb4,bb4]!4", D: "[gb3,ab3,bb3,db4]!4",
E: "[eb4,f4,gb4,bb4]@2 [eb4,f4,gb4,bb4]@2 [eb4,f4,gb4,bb4]@2 eb4!2, ~@3 [f4,gb4,bb4]", // Ebm Gbmaj7
F: "[b3,eb4,gb4,bb4]!2 [db4,gb4,ab4] [db4,f4,ab4]", G: "[ab3,bb3,db4] [gb3,ab3,bb3,db4] [ab3,c4,eb4] [bb3,d4,f4]",
H: "[eb4,f4,gb4,bb4]@2 [eb4,f4,gb4,bb4]@2 [eb4,f4,gb4,bb4]@2 eb4!2, eb3, ~@3 [f4,gb4,bb4]", // Ebm Gbmaj7
I: "[c4,f4,gb4,bb4]!4, c3", J: "[b3,eb4,gb4,bb4]!2 [db4,gb4,ab4] [db4,f4,ab4], b2 db3",
K: "[ab3,bb3,db4] [gb3,ab3,bb3,db4] [ab2,ab3,c4,eb4] [bb2,bb3,d4,f4], gb2 ~", // Bbm7 Gb Ab Bb
L: "[ab3,bb3,db4]@4 [gb3,ab3,bb3,db4]@4 ab3 ~@2 eb4 bb3 ~@2 f4, ~@4 eb4 c4 [d4,f4] d4, ~@9 ab3@3 ~ bb3@3", // Bbm7 Gb Dm
M: "[b3,eb4,gb4]@4 eb4@2 eb4@2 db4@2 ~ ab4 ab3 ~ ab3@2, ~ [gb4,b4] [f4,ab4] ~, ~@5 db4 [db4,f4]@2", // B B5 Fm Db
N: "[bb3,db4,gb4]@4 [bb3,db4,f4]@4 bb3@2 ~ gb4 [bb3,db4,f4]@2 [bb3,db4,gb4]@2, ~@2 [eb4,gb4] ~, ~@5 bb3 ~@2", // Gb Bbm Gb Ebm
O: "[b3,eb4,gb4]@4 eb4@2 ~ b4 db4@2 db4@2 [f4,ab4,db5]@4, ~ [gb4,b4] [f4,ab4] ~, ~@3 eb4 ~@4", // B Db B5 Fm
P: "[db4,gb4,bb4]@2 b5 [gb5,bb5] db5 [bb4,b4] gb4 [bb3,db4] [ab3,eb4,c5]@4 [bb3,f4,d5]@4", // Gb Bmaj7 Bbm Ab Bb
Q: "[bb3,db4,gb4] [bb3,db4,f4] [b3,eb4,gb4]@2", // Gb Bbm B
R: "[b3,eb4,gb4]@5 ~@2 gb4 [bb3,eb4,f4]@4 [bb3,d4,f4]@4, ~@5 b3@3 ~@8, ~@3 eb4 ~@4", // B Bbsus4 Bb
S: "~@2 [ab3,bb3,eb4]@3 [bb3,eb4,ab4]@3 [bb3,eb4,g4]@8", // Absus2 Ebsus4 Eb
T: "~@2 [ab3,bb3,eb4]@3 [bb3,eb4,ab4]@3 [bb3,eb4,g4]@2 [g6,eb7] [bb5,eb6,g6,bb6] [g5,eb6] [bb4,eb5,g5,bb5] [g4,eb5] [eb4,g4,bb4]", // Absus2 Ebsus4 Eb Cm Eb Cm Eb Cm …
U: "[b3,eb4,gb4]@4 eb4@2 eb4@2 db4@2 ~ ab4 ab3 ~ ab3@2, bb3 ~@3 [gb4,b4]@4 [f4,ab4]@4 ~@4, ~@5 db4 [db4,f4]@2", // B B5 Fm Db
V: "~@8 ab3@2 ~ f2 bb3@2 bb3@2, ~@2 [f2,c4,eb4] [bb1,d4,f4], ~@5 ab3 ~@2", W: "[b3,eb4,gb4,bb4]@11 ~@5",
X: "[~@8 [ab3,bb3,db4]@5 [ab3,bb3,db4]@4 [gb3,bb3,db4]@5 [gb3,bb3,db4]@4 [ab3,bb3,db4]@5 [ab3,bb3,db4]@4 [gb3,bb3,db4]@5 [gb3,bb3,db4]@5 [ab3,bb3,db4]@3]/3", // Bbm7 Gb Bbm7 Gb Bbm7
Y: "[~ [ab3,bb3,db4]@5 [gb3,bb3,db4]@4 [gb3,bb3,db4]@5 [ab3,bb3,db4]@4 [ab3,bb3,db4]@5 [gb3,bb3,db4]@5 [gb3,bb3,db4]@5 ~@14]/3", // Bbm7 Gb Bbm7 Gb
})).s("gm_piano").gain(0.22).pan(0.6)
// other · harpsichord
const harpsichord = note("<~@20 A B A C A B D E ~@8 A B A C A B D E A B D ~ F ~ G H ~@13>".pickRestart({
A: "~ eb4 gb4 eb4 b4 gb4 eb4 gb4 ~ f4 ab4 f4 db5 ab4 f4 ab4", B: "~ bb3 db4 gb4 bb4 ab4 gb4 f4 gb4 f4 eb4@6",
C: "gb4 db4 bb3@6 ab3 c4 eb4 ab4 bb4 f4 d4 bb3", D: "~ eb4 gb4 eb4 b4 gb4 eb4 gb4 eb4@3 f4@3 d4@2",
E: "~ ab4 eb4 bb3@9 ~@4", F: "~@8 g4 f4 eb4@6", G: "~@8 f4 eb4 db4@6", H: "~@9 c4 eb4 c4 d4 eb4 f4@2",
})).s("gm_harpsichord").gain(0.14)
// chords · string ensemble 2 · "Slow Strings"
const string_ensemble_2 = note(`<
A B C D@2 ~@7 E F G H E F G I J K L M N O P Q R@2 ~@2 E F G I J K L M N O P Q N O P Q ~@4 S T U V W@2 ~ X@6
>`.pickRestart({
A: "[eb4,bb4,gb5]", B: "[c4,bb4,gb5]", C: "[b3,bb4,eb5]", D: "[db4,bb4,gb5]/2", E: "[eb4,gb4,bb4]", F: "[c4,gb4,bb4]",
G: "[b3,eb4,bb4]@2 [db4,gb4,ab4] [db4,f4,ab4]", H: "[db4,gb4,ab4] [db4,gb4,bb4] [c4,eb4,ab4] [d4,f4,bb4]",
I: "[db4,gb4,ab4] [db4,gb4,bb4] [c4,ab4,eb5] [d4,bb4,f5]", J: "[eb4,eb5,eb6]@2 [gb4,gb5,gb6] [f4,f5,f6]",
K: "[db4,db5,db6]", L: "[eb4,eb5,eb6]@2 [bb4,bb5,bb6] [ab4,ab5,ab6]", M: "[db4,db5,db6]@2 [eb4,eb5,eb6] [f4,f5,f6]",
N: "[eb4,gb5,gb6]@2 [gb4,bb5,bb6] [f4,ab5,ab6]", O: "[gb3,gb4] [f3,f4] [eb3,eb4,b5,b6]@2, [bb5,bb6] ~",
P: "[eb3,eb4]@2 ~ [d5,d6], [eb5,eb6]@3 ~, ~ [bb2,bb3]", Q: "[f5,ab6] [eb5,g6], [eb3,eb4]", R: "[bb4,gb5,eb6]/2",
S: "~@3 [g4,g6]@5", T: "~@3 ab3@13, [ab4,ab6]", U: "[db4,db6]", V: "[gb4,gb6] [f4,f6]", W: "[eb4,eb6]/2",
X: "[~@8 [gb2,gb3,bb4,ab5,db6]@73 ~@15]/6", // Gb
})).s("gm_string_ensemble_2").gain(0.12)
// chords · piano · "Honkey Tonk Piano"
const piano_2 = note("<~@48 A B C D E B C F ~@9>".pickRestart({
A: "[eb3,bb3,eb4,g4]@3 ~ [bb3,eb4,g4]@8 [eb2,eb3,g4,g5] [f2,f3,ab4,ab5] [g2,g3,bb4,bb5]@2, eb2@3 ~, ~@3 eb3@9 ~@4", // Eb Fm Gm
B: "[bb4,g5,bb5]@3 [b4,ab5,b5]@9 [ab2,ab3,ab4,ab5] [gb2,gb3,bb4,bb5] [f2,f3] [eb2,eb3], [ab2,ab3]@6 ~ [b4,b5]", // Eb E Ab Gb F Eb Ab B
C: "[db2,db3,f4,f5]@4 [f2,f3,db4] [eb2,eb3,eb4] [db2,db3,f4]@6 [db2,db3,f4,f5] [eb2,eb3,gb4,gb5] [f2,f3,ab4,ab5]@2", // Db Eb Db Ebm Fm
D: "[ab4,f5,ab5]@3 [bb4,gb5,bb5]@5 ab3@2 ~ f2 bb3@2 bb3@2, [gb2,gb3]@2 [f2,c4,eb4] [bb1,d4,f4], ~@5 ab3 ~@2", // Db Ebm Gb F7 Bb
E: "[eb3,eb4,g4]@3 ~ [bb3,eb4,g4]@8 [eb2,eb3,g4,g5] [f2,f3,ab4,ab5] [g2,g3,bb4,bb5]@2, eb2@3 ~, ~@3 eb3@9 ~@4", // Eb Fm Gm
F: "[ab4,f5,ab5]@3 [bb4,gb5,bb5]@5 ~@8, [gb2,gb3] ~", // Db Ebm Gb
})).s("gm_piano").gain(0.24)
// chords · pad warm · "Warm Pad"
const pad_warm = note("<~@8 A@4 ~@16 A@4 ~@24 B@2 ~@7>".pickRestart({
A: "[eb4@4 c4@4 b3@2 ~ f4 ~ bb4 [c4,eb4,ab4] [d4,f4,bb4], gb4@11 ~ gb4@2 ~@2, bb4@5 db4@2 ~, ~@10 ab4@3 ~@3]/4", // Ab Bb
B: "[eb4 c4, [gb4,bb4]]/2", // Gb
})).s("gm_pad_warm").gain(0.09)
// other · taiko drum
const taiko_drum = note("<~@15 A ~@3 A ~@11 A ~@3 A ~@29>".pickRestart({
A: "~@8 d6 ~@2 d5 ~@4",
})).s("gm_taiko_drum").gain(0.18)
// other · taiko drum · soft notes
const taiko_drum_soft = note("<~@15 A ~@3 A ~@11 A ~@3 A ~@29>".pickRestart({
A: "~@14 d4 ~",
})).s("gm_taiko_drum").gain(0.12)
// other · acoustic guitar steel · "Steel String Guitar"
const acoustic_guitar_steel = note("<~@20 A B C D C E F G ~@8 A B C D C E F H C E I J ~@17>".pickRestart({
A: "ab2@7 ab2 db3@4 db3@4", B: "gb3@4 f3@4 eb3@3 eb3 f2@2 gb2@2", C: "ab2@6 ~ ab2 db3@4 db3@4",
D: "gb2@3 gb2 ab2@2 bb2@2", E: "gb3@2 f3@2 eb3@2 ~ eb3", F: "ab2@2 bb2!2", G: "eb3",
H: "eb3@6 bb2@2 eb2@3 bb2 eb3 bb2 eb2@2", I: "ab2@4 ~ ab2 ~ bb2 ~ bb2 bb2@3 ~ bb2@2", J: "~@2 eb3@3 bb2@3 eb3@8",
})).s("gm_acoustic_guitar_steel").gain(0.06).pan(0.1)
// bass · acoustic bass
const bass_3 = note("<~@12 A B C D A B C D E F G H G I J A K L M N O P Q D E F G H G I J R G I S T ~@17>".pickRestart({
A: "eb2", B: "c2", C: "b1 db2", D: "gb1@2 ab1 bb1", E: "ab1@7 ab1 db2@4 db2@4", F: "gb2@4 f2@4 eb2@3 eb2 f1@2 gb1@2",
G: "ab1@6 ~ ab1 db2@4 db2@4", H: "gb1@3 gb1 ab1@2 bb1@2", I: "gb2@2 f2@2 eb2@2 ~ eb2", J: "ab1@2 bb1!2",
K: "db3@13 ~ db3@2", L: "c3@14 c3 ~", M: "b2@8 db3@4 ~@2 f2 ~", N: "gb2@3 gb2 ab2@2 bb2@2", O: "eb2@13 ~ eb2 ~",
P: "c2@13 ~ c2@2", Q: "b1@3 b1 db2@4", R: "eb2@6 bb1@2 eb1@3 bb1 eb2 bb1 eb1@2",
S: "ab1@4 ~ ab1 ~ bb1 ~ bb1 bb1@3 ~ bb1@2", T: "~@2 eb2@3 bb1@3 eb2@8",
})).s("gm_acoustic_bass").gain(0.06)
// drums · rim
const rim = s("rim").struct("<~@28 [~@3 x]!3 [~ x ~ x]!4 ~@30>").gain(0.5)
// drums · rim · soft notes
const rim_soft = s("rim").struct("<~@28 [~@3 x]!3 [~ x ~ x]!4 ~@30>").gain(0.25)
// drums · kick
const kick = s("bd").struct(`<
~@12 A B C D A B C E F@3 G F H B C B@2 I J@3 C E F@3 G F H B K L H M N ~@17
>`.pickRestart({
A: "x", B: "x ~@6 x", C: "x!2", D: "x ~@7 x ~@2 x!2 ~@3", E: "x ~@6 x!2 ~ x!2 ~@4", F: "x ~@6 x!2 ~@3 x ~@3",
G: "x ~@6 x!2 ~ x!3 ~@3", H: "x ~@2 x!2 ~ x!2", I: "x ~@3 x ~@2 x", J: "x ~@2 x!2 ~@3", K: "x ~@3 x ~@2 x ~@8",
L: "x ~@6 x!2 ~@3 x ~ x ~", M: "x ~@4 x ~ x ~ x!2 ~ x ~ x ~", N: "x ~ x ~@2 x ~@2 x ~@7",
})).gain(0.45)
// drums · snare
const snare = s("sd").struct("<~@19 A B@3 C B@2 D ~@8 A B@3 C B@2 D E B@3 F ~@17>".pickRestart({
A: "~@4 x ~@4 x ~@2 x ~@3", B: "~ x ~ x", C: "~@4 x ~@4 x ~@2 x ~ x!2", D: "~ x", E: "~ x!2 ~", F: "~ x ~@2",
})).gain(0.45)
// drums · hihat
const hihat = s("hh").struct("<~@12 A@3 B A@3 C D@6 ~@2 A@3 E A@3 C D@6 ~ D@4 F ~@17>".pickRestart({
A: "x!4", B: "x!3 ~", C: "x ~ x ~ x ~@2 x", D: "x!8", E: "x ~ x ~@2 x!3", F: "x!4 ~@4",
})).gain(0.45)
// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@20 A B A@3 B ~@2 C@3 D C@3 E A B A@3 B ~@2 A B F G ~@17>".pickRestart({
A: "~ x ~ x ~@3 x ~ x ~ x ~ x ~ x", B: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x", C: "~ x ~ x ~ x ~ x",
D: "~@2 x ~@3 x!2 ~@7 x", E: "~ x ~ x ~ x ~@2", F: "~ x ~ x ~@5 x ~ x ~ x ~ x", G: "~ x ~ x ~ x ~ x ~@8",
})).gain(0.2)
// drums · low tom
const low_tom = s("lt").struct("<~@19 [~@15 x] ~@15 [~@15 x] ~@7 [~@10 x!2 ~@3 x] ~@21>").gain(0.4)
// drums · mid tom
const mid_tom = s("mt").struct("<~@19 [~@7 x] ~@15 [~@7 x] ~@7 [~@10 x!2 ~@2 x ~] ~@21>").gain(0.4)
// drums · open hat
const open_hat = s("oh").struct("<~@15 A ~@3 A B ~ B@3 ~@6 C ~@3 D B ~ B@3 ~@3 B ~ E ~@18>".pickRestart({
A: "~@3 x", B: "~@5 x ~@10", C: "~@8 x ~@4 x ~@2", D: "~@5 x ~@7 x ~@2", E: "~@5 x ~ x ~@8",
})).gain(0.45)
// drums · high tom
const high_tom = s("ht").struct("<~@43 [~@12 x!2 ~@2] ~@21>").gain(0.4)
// drums · crash
const crash = s("cr").struct("<~@12 A ~@7 A ~@3 A ~@11 A ~@2 B C ~@3 A ~@2 B ~@17>".pickRestart({
A: "x", B: "~ x", C: "x!2 ~@2",
})).gain(0.4)
// drums · tambourine
const tambourine = s("tb").struct(`<
~@20
[~ x ~ x ~ x ~ x]!6
~@10
[~ x ~ x ~ x ~ x]!6
~@2
[~ x ~ x ~ x ~ x]!3
[~ x ~ x ~@4]
~@17
>`).gain(0.45)
// drums · cabasa
const cabasa = s("cabasa:4").struct(`<
~@26
[x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2]
[x!2 ~@2 x!2 ~@2 x ~@7]
~@14
[x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2]
~@22
>`).gain(1.01)
// drums · shaker
const shaker = s("sh").struct("<~@20 A@6 B C ~@8 A@6 B ~ A@3 D ~@17>".pickRestart({
A: "~@3 x ~@7 x ~@4", B: "~ x ~ x ~ x ~ x", C: "~ x ~ x ~@4", D: "~@3 x ~@12",
})).gain(0.3)
// drums · shaker · soft notes
const shaker_soft = s("sh").struct("<~@20 [~@3 x]!6 ~@10 [~@3 x]!6 ~@2 [~@3 x]!3 ~@18>").gain(0.2)
// drums · triangle
const triangle = s("triangles:30").struct(`<
~@20
[~@4 x ~@4 x!2 ~@4 x]!7
[x ~@2 x ~@12]
// … 25 more lines
More by Celine Dion
Not in the database
That song isn't here.
Nothing in the database matches this link. It may have been renamed, or the address was mistyped. The closest songs to :
Real transcriptions · Editable patterns · Instrumental
Type a song.
Get Strudel code.
Chords, structure, melody, bass and drums compiled from open transcriptions into Strudel live-coding patterns. Play it here, scrub through the bars, then open it in strudel.cc and start hacking.
Smells Like Teen SpiritNirvana
The JokerSteve Miller Band · 1973
Love Me DoThe Beatles · 1964
I Don't MindJames Brown · 1961
- Real transcriptionsMcGill chord charts, Lakh MIDI and quality-filtered PDMX scores. The library includes alternate transcriptions of some songs.
- One bar, one cycleEvery layer follows the same bar timeline, keeping the code, playback and song structure aligned.
- Instrumental by designDetected vocal parts are removed. Guitar riffs, harmonica and other instrumental leads stay.