0:00/0:00
// Something in Common — Whitney Houston
// 105 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 99 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(105/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 B C D E F G H E I J K E F G H E I J K L M N O P Q R S E F G H E I J K E F G H E I J K L M N O P Q R T U V W X Y V
Z AA AB AC AD AE AB AF R T ~@8 L M N O P Q AG AH AI AJ AK AL P Q AG AH AI AJ AK AL P AM
>`.pickRestart({
A: "f1 ~@6 f1!4 ~ b0@2 c1@2", B: "d1 ~ d1 ~ d1 ~ e1@2 ~ e1!2 ~@3 e1@2", C: "d1 ~@6 d1!4 ~ d1 ~ g1 ~",
D: "~@2 f#1@2 f1 ~ e1 ~@3 c1@2 d1@2 e1 ~", E: "f1 ~@3 f1 ~@2 f1!4 ~@3 f1@2", F: "e1 ~@3 e1 ~@2 e1!4 ~@3 e1@2",
G: "a1 ~@3 a1 ~@2 a1!4 ~@3 a1@2", H: "g1 ~@3 g1 ~@2 g1 c1!3 ~@3 c1@2", I: "e1 ~@3 e1@2 ~ e1!4 ~@3 e1@2",
J: "~@2 d1 ~ d1@3 ~@3 d1 ~ d2@2 d1 ~", K: "~@2 g1@2 f#1@2 f1 ~@3 d1@2 e1 ~ e1 ~",
L: "f1 ~ f1 ~ f1 ~@3 f1@2 a1@2 a#1@2 b1 ~", M: "~@4 b1 ~ b1 ~ e1 ~@3 e1@2 e1 ~",
N: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1@2 g1 ~", O: "g1 ~ g1 ~ g1 ~ g1@2 c1 ~ c1@2 d1@2 e1 ~",
P: "f1 ~@3 f1 ~@2 f1!3 a1@2 a#1@2 b1@2", Q: "~@4 b1 ~ b1@2 e1 ~ e1@2 e1@2 e1@2",
R: "d1 ~@3 d1 ~@2 d1!2 ~ d1@2 d2@2 g1 ~", S: "~@2 f#1@2 f1@2 e1 ~@3 c1@2 d1@2 e1 ~",
T: "~@2 f#1@2 f1@2 e1 ~@3 d3 d2 c3 d2 b2 ~", U: "b1@15 ~", V: "e1", W: "a1@5 ~ a1 ~@7 a1 ~",
X: "a1@5 ~ a1 ~@3 a1@4 a#1@2", Y: "b1", Z: "d1@6 d1 ~@3 d1@4 g1 ~", AA: "~@2 f#1@2 f1@2 e1 ~@3 d2 e1 c2@2 a1 ~",
AB: "f1 ~ f1 ~ f1 ~ f1 ~ f1 ~ f1 ~ a1 ~ a#1 ~", AC: "b1 ~ b1 ~ b1 ~ b1@2 e1 ~ e1 ~ e1 ~ e1@2",
AD: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1@2", AE: "g1 ~ g1 ~ g1 ~ g1 ~ c1 ~ c1 ~ d1@2 e1 ~",
AF: "b1 ~ b1 ~ b1 ~ b1 ~ e1 ~ e1 ~ e1 ~ e1 ~", AG: "d1 ~@3 d1 ~@2 d1!2 ~ d1@2 d2@2 d1 ~",
AH: "g1 ~ f#1 ~ f1@2 e1@4 d2 g1 c2 ~ a1 ~", AI: "f1@2 ~@2 f2 ~@2 f1!4 ~ a1 ~ a#1@2",
AJ: "b1 ~ d2@2 b1 ~ b1@2 e2@3 ~ e2@2 ~@2", AK: "a1 ~@3 a1!3 ~ a1!3 ~ a1!3 ~", AL: "g1!3 ~ g1!3 ~ c1@3 ~ d1@2 e1 ~",
AM: "~@4 b1 ~ b1@2 e1 ~ e1@2 e1@2 ~@2",
})).s("gm_synth_bass_2").gain(0.45)
// chords · epiano2
const epiano2 = note(`<
A B@3 C D@4 E@2 F@2 D@4 E@2 G@7 H@2 C D@4 E@2 F@2 D@4 E@2 G@7 H@2 C I@2 J@2 I@2 K@7 H@2 C L ~@6 M@8 N@8 O@7
>`.pickRestart({
A: "a2 b2 c3 e3, e4",
B: "[[a3,c4,e4,g4]@12 ~@2 [g#3,b3,d4,f4]@6 ~@2 [e3,g#3,b3,e4]@7 ~ [e3,a3,c4,e4]@7 ~ [d3,f#3,a3,d4]@8 [a3,c4,e4,g4] ~]/3", // Am7 G#dim E Am D Am7
C: "~@2 [d3,f#3,a3,c4] ~ f4 ~ [d3,e3,g#3,b3]@7 ~ [d3,e3,g#3,b3] ~, ~ f#4 ~@6", // D7 E7
D: "[[f3,a3,c4,e4]@13 ~ [e3,a3,b3,d4]@7 ~ [e3,g#3,b3,d4]@7 ~ [e3,g3,a3,c4]@15 ~ [d3,f3,a#3,d4]@7 ~ [c3,f3,a#3,c4]@9 ~]/4", // Fmaj7 Esus4 E7 Am7 A# Fsus4
E: "[[f3,a3,c4,e4]@13 ~ [e3,a3,b3,d4]@17 ~]/2", // Fmaj7 Esus4
F: "[[d3,g3,a3,c4]@5 ~ [d3,f#3,a3,c4]@6 ~@2 [g3,a3,c4,e4]@7 ~ [f#3,a3,c4,e4] ~@3 [e3,g#3,b3,d4]@4 ~@2]/2", // Dsus4 D7 Am7 F#m7b5 E7
G: "[[d3,g3,a3,c4]@5 ~ [d3,f#3,a3,c4]@6 ~@2 [g3,a3,c4,e4]@7 ~ [f#3,a3,c4,e4] ~@3 [e3,g#3,b3,d4]@3 ~ [a3,c4,e4,g4]@15 ~ [a3,b3,d4,f4]@7 ~ [g#3,b3,d4,e4]@7 ~ [a3,c4,e4,g4]@15 ~ [g3,a#3,d4,f4]@8 [g3,a#3,c4,e4]@8 [a3,c4,e4,g4]@15 ~ [g#3,b3,d4,f4]@2]/7", // Dsus4 D7 Am7 F#m7b5 E7 Am7 Bm7b5 E7 …
H: "[~@6 [e3,g#3,b3,e4]@7 ~ [e3,a3,c4,e4]@7 ~ [d3,f#3,a3,d4]@8 [a3,c4,e4,g4] ~]/2", // E Am D Am7
I: "[[g#3,b3,d4,f4]@13 ~ [g#3,b3,d4,e4]@16 ~@2]/2", J: "[g3,b3,d4]@6 [a3,c4,e4] ~@9",
K: "[[d3,g3,a3,c4]@5 ~ [d3,f#3,a3,c4]@6 ~@2 [g3,a3,c4,e4]@7 ~ [f#3,a3,c4,e4] ~@3 [e3,g#3,b3,d4]@4 [a3,c4,e4,g4]@15 ~ [a3,b3,d4,f4]@7 ~ [g#3,b3,d4,e4]@7 ~ [a3,c4,e4,g4]@15 ~ [g3,a#3,d4,f4]@8 [g3,a#3,c4,e4]@8 [a3,c4,e4,g4]@15 ~ [g#3,b3,d4,f4]@2]/7", // Dsus4 D7 Am7 F#m7b5 E7 Am7 Bm7b5 E7 …
L: "[a3,c4,e4,g4]", // Am7
M: "[~@14 [a3,c4,e4,g4]@15 ~ [a3,b3,d4,f4]@7 ~ [g#3,b3,d4,e4]@7 ~ [a3,c4,e4,g4]@15 ~ [g3,a#3,d4,f4]@8 [g3,a#3,c4,e4]@8 [a3,c4,e4,g4]@15 ~ [g#3,b3,d4,f4]@6 ~@2 [e3,g#3,b3,e4]@7 ~ [e3,a3,c4,e4]@7 ~ [d3,f#3,a3,d4]@8 [a3,c4,e4]@2]/8", // Am7 Bm7b5 E7 Am7 Gm7 C7 Am7 G#dim …
N: "[~@6 [g3,b3,d4,e4]@8 [a3,c4,e4,g4]@15 ~ [a3,b3,d4,f4]@7 ~ [g#3,b3,d4,e4]@7 ~ [a3,c4,e4,g4]@15 ~ [g3,a#3,d4,f4]@8 [g3,a#3,c4,e4]@8 [a3,c4,e4,g4]@15 ~ [g#3,b3,d4,f4]@6 ~@2 [e3,g#3,b3,e4]@7 ~ [e3,a3,c4,e4]@7 ~ [d3,f#3,a3,d4]@8 [a3,c4,e4]@2]/8", // Em7 Am7 Bm7b5 E7 Am7 Gm7 C7 Am7 …
O: "[~@6 [g3,b3,d4,e4]@8 [a3,c4,e4,g4]@15 ~ [a3,b3,d4,f4]@7 ~ [g#3,b3,d4,e4]@7 ~ [a3,c4,e4,g4]@15 ~ [g3,a#3,d4,f4]@8 [g3,a#3,c4,e4]@8 [a3,c4,e4,g4]@15 ~ [g#3,b3,d4,f4]@6 ~@2 [e3,g#3,b3,e4]@7 ~@3]/7", // Em7 Am7 Bm7b5 E7 Am7 Gm7 C7 Am7 …
})).s("gm_epiano2").gain(0.39)
// chords · clavinet
const clavinet = note(`<
~@5 A B C D E F G H I J K L I J M N A F C D E F G H A B C D E F G H I J K L I J M N A F C D E F G H O@2 P@2 O@2 P Q A
F C D E F G H ~@8 A F C D E F G H A F C D E F G H A F C D E R
>`.pickRestart({
A: "~@3 f3 [a3,c4] ~ f3 [a3,c4] ~ f3 [c4,e4] ~ [a3,c4] ~@3", B: "~@4 [b3,e4] ~ [b3,e4] [a3,c4]",
C: "~@3 e3 [a3,c4] ~ e3 [a3,c4] ~ e3 [c4,e4] ~ [a3,c4] ~@3", D: "~@8 [a3,d4]@3 ~ d4@2 c4@2, ~@3 a3",
E: "~@3 f3 [a3,c4] ~ f3 [a3,c4] ~ f3 [c4,d4,e4] ~ [a3,c4] ~@3", F: "~@8 [b3,e4]@3 ~ [b3,e4]@2 [a3,c4]@2",
G: "~@5 [a3,c4] ~@2", H: "~ a3!2 ~ a3 ~ a3 ~ a3 ~ e3 ~ d3 ~ c3 ~", I: "~@3 a2 c3 ~ a2 c3 ~ a2 e3 ~@5",
J: "~@3 a2 c3 ~ a2 c3 ~@2 d3 ~@5", K: "~@3 a2 c3 ~ a2 c3 ~ a2 d3 ~@5", L: "~@2 c3!3 ~ c3!2 e3 ~ e3 ~ d3 ~ c3 ~",
M: "~@2 c3!3 a2 c3 d3 c3 ~ c3!3 a2 c3 d3", N: "g3 ~ f#3 ~ f3 ~ e3 ~ e3 ~ c3 ~ d3 ~ e3 ~",
O: "~@4 [b3,d4] ~ e3 [b3,d4] ~@2 [d4,f4] ~@3 [b3,d4] ~", P: "~@4 [a3,c4] ~ e3 [a3,c4] ~@2 [c4,e4] ~@3 [a3,c4] ~",
Q: "~@4 g3!2 g#3!2 a3!2 e3!2 d3 ~ c3 ~", R: "~@8 [b3,e4]@3 ~ [b3,e4]@2 ~@2",
})).s("gm_clavinet").gain(0.27).pan(0.7)
// other · string ensemble 1
const string_ensemble_1 = note(`<
~ A@2 B C ~@14 D E F G ~ H F G D I ~@14 D E F G ~ H F G D J K@3 L M@2 N O ~@6 B E ~@7 D F G ~ H F G ~ P F G ~ H F G ~
P F G ~ H F G
>`.pickRestart({
A: "[g5@3 ~@3 g5@3 ~ f5 ~ e5 ~ c5@4 d5 ~ e5 ~ d5@3 ~ c5@2 ~@4]/2", B: "~@7 g5",
C: "~@2 f#5@2 f5 ~ e5@2 ~@2 c5 ~ d5 ~ g5 ~", D: "~@14 g5 ~", E: "~@2 f#5@2 f5@2 e5 ~@3 c5@2 d5 ~ g5 ~",
F: "~@4 g5 ~ g5 ~ g5@2 f5 ~ e5 ~ c5@2", G: "~@2 d5 ~@13", H: "~@10 c5@2 d5 ~ g5 ~",
I: "~@2 f#5@2 f5 ~ e5 ~@3 c5@2 d5 ~ g5 ~", J: "~@2 f#5@2 f5 ~ e5 ~@3 a4@2 a#4 ~ b4 ~",
K: "[d4@12 e4@2 d4@14 c4@2 b3@7 a3@2 ~@9]/3", L: "b3@3 a3 ~@2 b3 c4", M: "[d4@6 e4 d4@7 c4 d4]/2", N: "e4@13 ~ g4@2",
O: "~@2 f#4@2 g4@2 g#4@2 ~@2 e4@2 a4@2 a4 ~", P: "~@10 c4@2 d4 ~ [g4,g5] ~",
})).s("gm_string_ensemble_1").gain(0.21)
// other · pad new age
const pad_new_age = note(`<
A B@3 C ~@8 D@7 E F@4 G H@2 C ~@8 D@7 E F@4 G H@2 I ~@6 J K L@7 M ~@7 N F@4 G O@2 P F@4 G O@2 P F@4 G Q
>`.pickRestart({
A: "a5@3 ~ b5@3 ~ c6@3 ~ e6@3 ~", B: "[g6@9 ~ f6 ~ e6 ~ c6@4 d6 ~ e6 ~ d6@4 c6 ~ d6 ~ e6@8 d6@8 g6 ~]/3",
C: "~@2 f#6 ~ f6 ~ e6@2 ~@2 c6@2 d6@2 g6 ~",
D: "[e4@13 ~ d4@15 ~ c4@14 a4 ~ g4@6 d4@2 c4@4 d4@2 e4 ~ g4@16 d4@15 ~ c4@15 ~ g5@2]/7",
E: "~@2 f#5 ~ f5 ~ e5@2 ~@2 c5@2 d5@2 g6 ~",
F: "[~@4 g6 ~ g6 ~ g6@2 f6 ~ e6 ~ c6@4 d6 ~ e6 ~ d6@3 ~ c6 ~ d6 ~ e6@8 d6@7 ~ f6@6 g6 ~ e6@4 c6@2 d6 ~ g6 ~]/4",
G: "~@4 g6 ~ g6 ~ g6@2 f6 ~ e6 ~ c6@2", H: "[~@2 d6 ~ e6 ~ d6@4 c6 ~ d6 ~ e6@8 d6@8 g6 ~]/2",
I: "~@2 f#6 ~ f6 ~ e6@2 ~@2 a5@2 a#5@2 b5 ~", J: "~@14 g5 ~", K: "~@2 f#5@2 g5 ~ g#5 ~@3 e5@2 a5 ~ a5 ~",
L: "[g6@4 f6@2 e6@2 d6@2 c6@2 d6 ~ g6@6 f6 ~ e6@2 d6@2 c6@2 d6 ~ e6@6 d6@2 c6@2 b5@2 a5@2 b5 ~ f6@6 g6@2 e6@4 d6@2 c6@2 g6@6 f6@2 e6@2 d6@2 c6@2 d6@2 g6@6 f6@2 e6@2 d6@2 c6@2 d6 ~ e6@6 d6@2 c6@2 b5@2 c6@2 b5@2 g6@2]/7",
M: "~@2 f#6 ~ f6@2 e6@2 ~@2 c6@2 d6 ~ g6 ~", N: "~@14 g6 ~", O: "[~@2 d6 ~ e6 ~ d6@4 c6 ~ d6 ~ e6@8 d6@8 ~@2]/2",
P: "a6@5 ~ g6@4 c6 ~ d6 ~ g6@2", Q: "~@2 d6 ~ e6 ~ d6@4 c6 ~ d6 ~@3",
})).s("gm_pad_new_age").gain(0.33).pan(0.8)
// chords · piano
const piano = note("<~@61 A B C D E F G H ~@16 I J K L ~ M ~ N I J K L ~ M>".pickRestart({
A: "~@12 [c6,e6] b5 [a5,b5,d6] ~, ~@6 d6 ~", B: "~@14 d6 e6", C: "c6 a5 ~@12 [d6,e6] ~",
D: "[c6,d6,g6] ~ [c6,d6,a6] ~@7 [e6,f6,g6] [a5,b5,c6,d6] c6 ~ d6 ~", // Csus2 D7 Em D7
E: "[a5,c6,e6] ~ [a5,c6,f6] [a5,c6,e6] ~@8 [c6,e6] ~ [c6,d6] b5, ~@6 a5 ~", // Am F Am C Csus2
F: "[g5,a5,d6]@2 ~@8 [b3,d4,e4,g4]@3 ~ [d6,e6,f6,g6] c6, c6 ~@15", // Gsus2 Em7
G: "[e6,g6] ~ [c6,e6] [g5,b5] [c6,d6,e6] ~ [a5,c6] [e5,g5] [a5,c6] ~ [e5,f5,g5] [c5,d5] [e5,g5] ~ [b4,e5,g5]@2, ~@14 d5 ~", // Em C G C Am Em Am Em …
H: "~@2 f#5 ~ f5 ~ e5 ~@3 c5@2 d5 ~ g5 ~", I: "~@9 g4 a4 ~ d5@2 c5 a4", J: "~@7 e6, ~@14 b5 ~",
K: "b5@2 c6 a5 ~@10 [a5,c6,e6] ~, c6 ~@15", L: "~@4 [a5,c6] e6 ~ g6 ~@6 [a4,c5,e5,g5] ~",
M: "~@8 [e4,a4,d5] ~ [e4,a4,d5] e4 [e4,a4,c5] [a4,d5] e4 ~", N: "~@2 g4 ~ g4 ~ g4 e4 g4 a4 g4 ~ g4 a4 g4 ~",
})).s("gm_piano").gain(0.54)
// drums · kick
const kick = s("bd").struct("<[~@7 x] [x ~@6 x!2 ~ x ~@3 x ~]!75 x [x ~@6 x!2 ~ x ~@3 x ~]!21 [x ~@6 x!2 ~ x ~@5]>")
.gain(0.5)
// drums · clap
const clap = s("cp").struct("<~@69 [~ x ~ x]!7 [~@3 x] [~ x ~ x]!22>").gain(0.5)
// drums · snare
const snare = s("sd").struct(`<
A B@3 C B@7 C B@7 C B@3 C B@3 C B@7 C B@7 C B@3 C B@3 C B@3 C B@3 C B@3 C B@3 C B@3 C B@3 D B@3 C B@3 C B@3 C B@3 C
B@3 C B@2
>`.pickRestart({
A: "x ~@3 x ~@5 x ~ x!2 ~@2", B: "~ x ~ x", C: "~ x!2 ~@3 x ~", D: "~@12 x!2 ~@2",
})).gain(0.5)
// drums · low tom
const low_tom = s("lt").struct("<~@8 A B ~@6 A ~@15 A B ~@6 A ~@31 C ~@3 D ~@22>".pickRestart({
A: "~@15 x", B: "x", C: "~@3 x", D: "x!8",
})).gain(0.4)
// drums · hihat
const hihat = s("hh").struct("<[x!4] [x!5 ~ x!2]!97 [x!5 ~ x ~]>").gain(0.5)
// drums · mid tom
const mid_tom = s("mt").struct("<~@8 A ~@7 B ~@15 A ~@7 B ~@58>".pickRestart({
A: "~@15 x", B: "~@7 x",
})).gain(0.4)
// drums · open hat
const open_hat = s("oh").struct("<~ [~@5 x ~@2]!98>").gain(0.5)
// drums · high tom
const high_tom = s("ht").struct("<~@8 [~@7 x] ~@23 [~@7 x] ~@66>").gain(0.4)
// drums · cowbell
const cowbell = s("cb").struct("<A B@4 ~@16 B@8 ~@16 B@24 ~@8 B@21 C>".pickRestart({
A: "x ~@2 x ~@2 x ~@2 x ~@2 x ~@3", B: "x ~@2 x ~@2 x ~@7 x ~", C: "x ~@2 x ~@2 x ~@9",
})).gain(0.25)
// drums · cowbell · soft notes
const cowbell_soft = s("cb").struct("<[~ x ~@2] ~@4 [x ~@2 x ~@2 x ~@7 x ~]!16 ~@8 [x ~@2 x ~@2 x ~@7 x ~]!16 ~@54>")
.gain(0.15)
// drums · crash
const crash = s("cr").struct(`<
~ A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A
~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~
>`.pickRestart({
A: "x",
})).gain(0.35)
stack(
bass, epiano2, clavinet, string_ensemble_1, pad_new_age, piano, kick, clap, snare, low_tom, hihat, mid_tom, open_hat,
high_tom, cowbell, cowbell_soft, crash
)
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.