0:00/0:00
// My Love Is Your Love — Whitney Houston
// 80 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 86 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(80/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 · synth bass 2
const bass = note(`<
~ A@5 B C D E F A@4 B C D E F A@4 G H G H G H G I A@4 B C D E F A@4 B C D E F A@3 G H G H G H G I J K L M L N L O P H
G H G H G I G H G H A@4 ~
>`.pickRestart({
A: "c2@2 c2!2 c2@4 g1@2 g1@2 g1@4", B: "a1@2 a1!2 a1@4 a1@2 a1@6", C: "d2@2 d2!2 d2@4 c2@2 c2@2 c2@4",
D: "b1@2 b1!2 b1@4 g1@2 g1@6", E: "c2@2 c2!2 c2@4 b1@2 b1@2 b1@4", F: "a1@2 a1!2 a1@4 f1@2 f1@2 f1@4",
G: "c2@2 a1 g1 c2@4 g1@2 g1@2 ~@2 g1@2", H: "a1@2 a1 e1 a1@4 f1@2 f1@2 ~@2 f1@2",
I: "a1@2 a1!2 a1@2 a1!2 f1@2 f1!2 f1@2 f1@2", J: "g1@2 g1!2 c2@2 e2@2 b1@2 b1 d2 ~ d2 f2@2",
K: "c2@2 c2!2 e2@2 g2@2 c3@3 g2 c2@4", L: "g#1@2 g#1!2 c2@2 d#2@2 a#1@2 a#1 d2 ~ d2 f2@2",
M: "c2@2 c2!2 c2@2 c2!2 c2@2 c2!2 c2@2 c2!2", N: "c2@2 c2!2 e2@2 g2@2 d3@2 ~ c3@3 g2@2, ~@8 c3 ~@7",
O: "g1@2 g1!2 g1@2 g1!2 g1@2 g1!2 g1@2 g1!2", P: "c2@2 c2 g1 c2@4 g1@2 g1@2 ~@2 g1@2",
})).s("gm_synth_bass_2").gain(0.45).pan(0.6)
// chords · epiano2
const epiano2 = note(`<
~ A@5 B C D E F G A@3 B C D E F G A@3 H I H I H I H I A@4 B C D E F G A@2 J K C D E F G A@2 H L H L H L H I M N O P O
N O Q H L H R H L H S H L H L A@5
>`.pickRestart({
A: "[g3,c4,e4]@2 [g3,c4,e4]!2 [g3,c4,e4]@4 [g3,a#3,d4]@2 [g3,a#3,d4]@2 [g3,d4]@4, ~@6 a#3 ~", // C Gm G5
B: "[a3,c4,e4]@2 [a3,c4,e4]!2 [a3,c4,e4]@4 [c4,e4,a4]@2 [c4,e4,a4]@4 [e3,e4]@2", // Am E
C: "[d3,a3,d4,f4]@2 [d3,a3,d4,f4]!2 [d3,a3,d4,f4]@4 [g3,c4,e4]@2 [c3,g3,c4,e4]@2 [c3,g3,c4,e4]@3 c3", // Dm C
D: "[b2,g3,b3,d4]@2 [b2,g3,b3,d4]!2 [b2,g3,b3,d4]@4 ~@2 a3 [c4,e4] [b3,d4]@4, ~@2 [g2,g3,d4] ~", // G C Bm G5
E: "[c3,g3,c4,e4]@2 [c3,g3,c4,e4]!2 [c3,g3,c4,e4]@4 [g3,b3,d4]@2 [g3,b3,d4]@2 [b2,g3,b3,d4]@4", // C G
F: "[a2,e3,a3,c4]@2 [a2,e3,a3,c4]!2 [a2,e3,a3,c4]@4 [f2,f3,a3,c4]@2 [f2,f3,a3,c4]@2 [f2,f3,a3,c4]@4", // Am F
G: "[c3,g3,c4,e4]@2 [c3,g3,c4,e4]!2 [c3,g3,c4,e4]@4 [g3,b3,d4]@2 [g3,b3,d4]@2 [g3,d4]@4, ~@6 b3 ~", // C G G5
H: "[e3,g3,c4]@2 [e3,g3,c4]!2 [e3,g3,c4]@4 [d3,g3,b3]@2 [d3,g3,b3]@2 [d3,g3,b3]@2 [d3,g3,b3]@2", // C G
I: "[e3,a3,c4]@2 [e3,a3,c4]!2 [e3,a3,c4]@4 [e3,a3,c4]@2 [e3,a3,c4]@2 [e3,a3,c4]@4", // Am
J: "[g3,c4,e4]@2 [g3,c4,e4]!2 [g3,c4,e4]@4 [g3,b3,d4]@2 [g3,b3,d4]@2 [g3,d4]@4, ~@6 b3 ~", // C G G5
K: "[a3,c4,e4]@2 [a3,c4,e4]!2 [a3,c4,e4]@4 [c4,e4,a4]@2 [c4,e4,a4]@4 ~ e2, ~@7 [e3,g4]", // Am Em
L: "[e3,a3,c4]@2 [e3,a3,c4]!2 [e3,a3,c4]@4 [f3,a3,c4]@2 [f3,a3,c4]@2 [f3,a3,c4]@4", // Am F
M: "[g#3,c4,d#4]!2 [g#3,c4,d#4]@2 [a#3,d4,f4]!2 [d4,f4]@2, ~@6 a#3 ~", // G# A# Dm
N: "[g3,c4,d#4]!2 [g3,c4,d#4]@2 [g3,c4,d#4]!2 [g3,c4,d#4]@2", // Cm
O: "[g#3,c4,d#4]!2 [g#3,c4,d#4]@2 [a#3,d4,f4]!2 [a#3,d4,f4]@2", // G# A#
P: "[g3,c4,e4]!2 [g3,c4,e4]@2 [g3,c4,e4]!2 [g3,c4,e4]@2", Q: "[f3,c4,d4,f4]!2 [g3,c4,d4,f4]!2 [a3,c4,d4,f4]!4",
R: "[e3,a3,c4]@2 [e3,a3,c4]!2 [e3,a3,c4]@4 [f3,a3,c4]@2 [f3,a3,c4]@2 c4@2 c4@2, ~@3 [f3,a3]", // Am F
S: "[e3,a3,c4]@2 [e3,a3,c4]!2 [e3,a3,c4]@4 [e3,a3,c4]@2 [e3,a3,c4]@2 c4@2 c4@2, ~@3 [e3,a3]", // Am A5
})).s("gm_epiano2").gain(0.26)
// other · string ensemble 1
const string_ensemble_1 = note("<~@23 A ~@4 A ~@23 A ~@4 A ~@5 B C D E D F ~@4 G H ~@2 I@8 ~>".pickRestart({
A: "g4 f4 g4 f4 g4 f4 g4 f4 g4 f4 g4 f4 g4 f4 g4 f4", B: "e4 d4", C: "c4", D: "d#4 d4", E: "d#4",
F: "[g3,f4]!4 [g3,a4]!4", G: "f4 g4 f4 g4 f4 g4 f4 g4 f4 g4 f4 g4 f4 g4 f4 g4", H: "f4 ~@15", I: "c5/8",
})).s("gm_string_ensemble_1").gain(0.21).pan(0.8)
// chords · electric guitar jazz
const electric_guitar_jazz = note(`<
~@5 A ~@2 B@2 ~@2 C@2 A D E F@2 ~@2 G@2 ~@10 H@2 ~@2 I ~ J ~ K@2 L M@2 N@2 ~@2 O ~@3 P@2 ~@14 Q@2 ~@14
>`.pickRestart({
A: "c5 c5@7 ~@8, ~ d5@3 ~@12", B: "[~@16 g4@9 ~@7, ~@7 g4 ~@8, ~@15 a4@4 ~@13]/2",
C: "[~@16 [e4,c5]@9 ~@7, ~@13 [f4,d5]@5 ~@14]/2", D: "~@8 c5@3 d5@3 e5@2",
E: "e5!2 ~@2 e5@4, f5@2 e5 ~@5, ~@5 f5@5 ~@6", F: "[d5@9 ~@7 g4@9 ~@7, ~@7 g4 ~@8, ~@15 a4@4 ~@13]/2",
G: "[~@16 [g4,c5]@11 ~@5, ~@13 [g4,a4,c5,d5]@2 [a4,d5]@3 ~@14, ~@7 [g4,c5] ~@8]/2", // C5 Gsus4 D5 C5
H: "[~@7 g4@2 g4@11 ~@12, ~@5 [g4,c5]@2 ~@25, ~@6 d5@9 ~@17, ~@3 a4@2 ~@11]/2", // C5
I: "~@3 e5@2 ~ f5@7 ~@3, ~ d5@4 e5@2 ~@9", J: "e5@2 e5 ~@2 c5@3 d5@6 ~@2, ~ f5 d5 ~@5, ~@3 e5@3 ~@10",
K: "[~@10 g4 [g4,a4]@3 a4@6 ~ c5 c5@7 ~@3, ~@7 g4 ~@3 d5 ~@4]/2", L: "~@5 c5 c5@7 ~@3, ~@3 d5 ~@4",
M: "[~ c5@4 c5 d5@2 ~@3 d5@10 ~@8 c5@3, ~ g4@8 ~@23, ~@6 c5@7 ~@19]/2",
N: "[d5@3 e5@2 e5@2 e5@2 ~@4 e5@8 d5@9 ~@2, ~@5 f5@4 e5@2 ~@21, ~@10 f5@5 ~@17]/2", O: "~@9 g3@3 ~@4",
P: "[~@7 a3@2 ~@7, ~@7 g3 ~@8]/2", Q: "[~@7 g3@5 ~@4]/2",
})).s("gm_electric_guitar_jazz").gain(0.1).pan(0.8)
// chords · piano
const piano = note("<~@25 A@2 ~@2 B C ~@7 D ~@8 E ~@38>".pickRestart({
A: "[~@12 g5 ~ g5 ~@3 c5@11 ~@3, ~@12 c5@5 e5@12 ~@3, ~@13 a5@2 g5@14 ~@3]/2", B: "~@14 g5 a5",
C: "g5@2 ~ c5@11 ~@2, ~ e5@6 ~", D: "~@5 g5 c6 ~ g5@2 ~ e5@3 ~@2",
E: "~@8 [g5,b5] d5 g5 [a4,d6,a6,c7]@2 [d6,g6,b6] ~@2, ~@8 [g6,b6]@2 ~@3 b4@2 ~", // G D7 G
})).s("gm_piano").gain(0.34).pan(0.3)
// chords · epiano2
const epiano2_2 = note(`<
~@4 A ~@6 B C D ~@6 B C D ~@10 A ~@7 B E D ~@6 B C D ~ F G ~ H F I@3 ~@5 J@2 K L@3 H ~@4 M@2 ~@6
>`.pickRestart({
A: "~@6 [e4,a4,c5]@2 [g4,a#4] ~ [a#3,g4]@2 [d4,f4] ~@3, ~@10 e4 ~@5", B: "~@5 [c4,e4,g4]@7 ~@4",
C: "~@5 [g3,a#3,d4]@7 ~@4", // Gm
D: "~@5 e4 [a4,c5]@2 [g4,a#4] ~ [a#3,e4,g4]@2 [d4,f4] ~@3, ~@5 [g3,c4]@7 ~@4, ~@3 e4@2 ~@3", // Am Gm Edim Dm C5
E: "~@6 [e4,a4,c5]@2 [g4,a#4] ~ [a#3,g4]@2 [d4,f4] ~@3, ~@5 [g3,d4]@7 ~@4, ~@5 a#3@5 e4 ~@5", // Am Gm D# Dm G5
F: "~@7 g3 a3@2 [c3,g3]@2 ~ [c3,a3]@2 ~, ~@7 c3@3 ~@6", G: "[c3,g3]@5 ~@11", H: "~@12 c5 ~@3, ~@11 [e4,a4,d5]@3 ~@2",
I: "[[c3,g3]@5 ~@5 b5@2 c6@2 d6 c6@2 a5@2 g5@3 ~ a5@3 c6 b5@2 a5@2 [d#5,g#5,c6]@7 ~@10]/3", // C5 G#
J: "[~@16 [c4,d4] [f3,f4] ~@2 [c4,d4] [g3,f4] ~@2 c4 a3 ~@2 c4 a3@2 ~, ~@7 [c4,d4] ~ [c4,d4] ~ [c4,d4] d4 [c4,d4] d4 ~, ~@15 [f3,f4]@2 ~@2 [g3,f4]@2 ~@2 [a3,f4]@2 f4@2 [a3,f4]@2 f4 ~@2]/2", // Csus2 F Csus2 G7 Csus2 F G7 Dm
K: "~@3 e6@4 d6@2 ~ d6@2 c6@2 ~@2",
L: "[~ b5 c6 b5@4 g3 a3@2 [c3,g3]@2 ~ b5 c6 ~@3 g5@4 ~@4 b5@2 c6@2 d6 c6@2 g5@3 ~@12, ~@7 c3@3 ~@3 [c3,a3]@2 b5@2 ~@31, ~@16 [c3,g3]@5 ~@27]/3", // C5 F C5
M: "[~@6 g3 a3@2 [c3,g3]@2 ~ [c3,a3]@2 ~ [c3,g3]@5 ~@10 c6@2, ~@6 c3@3 ~@23]/2", // C5 F C5
})).s("gm_epiano2").gain(0.14).pan(0.3)
// other · pan flute
const pan_flute = note(`<
~ A B A C ~@7 A@2 ~@7 A@3 D E F G D E F G A@4 ~@6 A@2 ~@7 A@2 D E F G D E F G ~@8 D E F G D E F G D E F G D E F G ~
>`.pickRestart({
A: "~@2 c5 ~ c5@2 a#4@4 g4@2 a#4@4", B: "~@2 c5@2 c5 ~ a#4@4 g4@2 a#4@4", C: "~@2 c5 ~ c5@2 a#4@4 g4@2 a#4@3 ~",
D: "c5@2 ~ g4@2 ~ c5@2 d5@3 c5@3 d5 ~", E: "c5@2 ~ c5@2 ~ d5 ~ a4@3 g4@3 ~@2",
F: "~@2 d5 e5!4 d5 ~ d5@2 d5 b4@2 a4@2", G: "~@2 c5 a4 c5 a4 c5 a4 c5@2 c5 a4 g4@2 a4 ~",
})).s("gm_pan_flute").gain(0.4)
// drums · kick
const kick = s("bd").struct("<~ A@22 B A@28 B A@8 C@8 A@16 ~>".pickRestart({
A: "x ~ x!2 ~@4 x ~ x ~@5", B: "x ~ x!2 ~ x ~ x!2 ~ x!2 ~@4", C: "x ~ x!2 ~@4 x ~ x!2 ~@2 x ~",
})).gain(0.61).pan(0.4)
// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@23 A B@8 ~@20 A B@8 C@8 B@16 ~>".pickRestart({
A: "~ x ~@4 x ~@2 x ~@4 x ~", B: "~@3 x ~@3 x", C: "~@6 x ~@6 x ~@2",
})).gain(0.2).pan(0.4)
// drums · rim
const rim = s("rim").struct("<~ A@61 B A B A C A B A@16 D>".pickRestart({
A: "~ x ~ x", B: "~@4 x ~@5 x!2 ~@3 x", C: "~@4 x ~@5 x!2 ~@2 x!2", D: "~@3 x",
})).gain(0.61).pan(0.4)
// drums · clap
const clap = s("cp").struct("<~@77 [~ x ~ x]!8 ~>").gain(0.41).pan(0.4)
// drums · snare
const snare = s("sd").struct("<[~@3 x] ~@85>").gain(0.61).pan(0.4)
// drums · hihat
const hihat = s("hh").struct("<A B@22 C@8 D B@20 C@8 E F@8 G C@6 E G C@7 ~>".pickRestart({
A: "x ~ x ~ x ~ x!2", B: "x!8", C: "~@2 x!2 ~@2 x!2", D: "~ x!7", E: "~@4 x ~ x ~@5 x ~ x!2",
F: "x ~ x!3 ~ x!3 ~ x ~ x ~ x!2", G: "x ~ x!2 ~@2 x!2",
})).gain(0.41).pan(0.4)
// drums · tambourine
const tambourine = s("tb").struct("<~@61 [~ x ~ x ~@5 x ~ x ~@4]!8 ~@17>").gain(0.27).pan(0.4)
// drums · shaker
const shaker = s("sh").struct("<~ [x ~ x!3 ~@3 x ~ x ~ x ~@3]!59 [x!4]!25 [~@3 x]>").gain(0.61).pan(0.4)
// drums · shaker · soft notes
const shaker_soft = s("sh").struct("<~@60 [~@2 x!2 ~@6 x ~@5]!25 ~>").gain(0.41).pan(0.4)
stack(
bass, epiano2, string_ensemble_1, electric_guitar_jazz, piano, epiano2_2, pan_flute, kick, kick_soft, rim, clap,
snare, hihat, tambourine, shaker, shaker_soft
)
More by Whitney Houston
Greatest Love of AllA major · 64 bpmSaving All My Love For YouA major · 100 bpm1 Moment in TimeC major · 78 bpmDidn't We Almost Have It AllC major · 69 bpmI Wanna Dance With Somebody (Who Loves Me)D♭ major · 118 bpmI Will Always Love YouA major · 67 bpmI Have NothingG major · 51 bpmAll the Man That I NeedF minor · 76 bpm
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.