0:00/0:00
// Thinking About You — Whitney Houston
// 122 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 164 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(122/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 · piano · "THINKING"
const piano = note(`<
~@32 A ~@5 B@2 C D@2 ~@12 E F ~@23 A ~@5 B@2 C D@2 ~ G H ~@7 I ~ J@3 ~@8 K@2 ~@2 L@2 M@2 ~@2 C D@2 ~ G H ~@7 I ~ E F
~@14 N O ~@7
>`.pickRestart({
A: "~@8 d#5@7 ~", B: "[f#5@2 c#5@4 b4 e5@6 ~@3]/2", C: "~@2 c#5@3 b4@3",
D: "[g#4@4 b4@4 g#4@4 b4@3 f#4@3 e4@6 ~@8]/2", E: "[b4,e5]", F: "[c#5,f#5]@2 [b4,e5] [g#4,c#5]@13",
G: "~@2 [b3,e4]@3 [c#4,f#4]@3", H: "[e4,g#4]@4 [f#4,b4]@3 [e4,g#4] [g#4,c#5]@8", I: "c#5@3 b4@2 ~@3",
J: "[[b4,e5]@24 [c#5,f#5]@2 [b4,e5] [g#4,c#5]@13 ~@8]/3", K: "[[g#4,e5]@21 [b4,f#5]@3 [f#4,b4]@8]/2",
L: "[~@8 [e4,b4]@14 [g#4,b4,e5]@3 [f#4,a4,c#5] [e4,g#4,b4]@5 [c#4,f#4,a4]]/2", // E5 E F#m E F#m
M: "[[e4,g#4,b4]@3 [c#4,f#4,a4] [b3,e4,g#4]@3 [a3,c#4,f#4] [b3,e4,g#4]@3 [a3,c#4,f#4] [g#3,b3,e4]@8 ~@12]/2", // E F#m E F#m E F#m E
N: "[b5,e6]", O: "[c#6,f#6]@2 [b5,e6] [g#5,c#6]@6 ~@7",
})).s("gm_piano").gain(0.05)
// chords · pad metallic
const pad_metallic = note(`<
~ A@3 ~@28 B@4 C D E F ~@8 G@2 H@2 I@2 J@2 G@2 H@2 I@2 K@2 ~@16 B@4 C D E F ~@8 G@2 H@2 I@2 J@2 G@2 H@2 I@2 K@2 L@4
J@2 ~@2 M@4 ~@8 G@2 H@2 I@2 J@2 G@2 H@2 I@2 K@2 G@2 H@2 I@2 J@2 G@2 H@2 I@2 N O
>`.pickRestart({
A: "[~ [e4,b4]@10 ~, ~@4 e5@37 ~@7]/3", B: "[[c#4,e4,g#4]@31 [c#4,e4,g#4]@16 ~ [d#4,f#4]@14 ~@2, ~@47 b3@13 ~@4]/4",
C: "[c#4,e4,g#4]@7 ~", D: "[b3,d#4,f#4]@7 ~", E: "[c#4,e4,g#4]@13 ~@3", F: "[a3,c#4,e4,f#4]", G: "[d#4,b4]/2",
H: "[e4,g#4]/2", I: "[[f#4,b4]@31 ~]/2", J: "[[c#4,e4]@31 ~]/2", K: "[~@6 b4@9 ~ c#4@16, e4, g#4@15 f#4@16 ~]/2",
L: "[e4@31 b3@30 ~@3, c#4@23 ~@9]/4", M: "[~@15 e4@15 ~@18 b4@16, c#4, ~ [b3,e4]]/4", N: "~@6 b4@9 f#4, [e4,g#4]",
O: "c#4 ~@15",
})).s("gm_pad_metallic").gain(0.13).pan(0.8)
// chords · pad bowed
const pad_bowed = note(`<
~@8 A B ~@8 C D ~@2 C E F ~ G H ~@4 I J K L J L K M ~@8 N@2 O@2 P@4 Q@2 R@2 S@4 ~@2 C D ~@2 C E F ~ G H ~@4 I J K L J
L K M ~@8 N@2 O@2 P@4 Q@2 R@2 S@4 T@2 U@2 T@2 ~@2 T@2 V@2 ~@8 N@2 O@2 P@4 Q@2 R@2 S@4 N@2 O@2 P@4 Q@2 R@2 W@3 ~
>`.pickRestart({
A: "~@3 b3@4 ~", B: "~@6 g#3@7 ~@3", C: "a3@9 ~@7", D: "[a3,b3,c#4]@11 ~@5", E: "[a3,c#4,e4]@5 ~@3",
F: "[b3,e4,g#4]@13 ~@3", G: "[f#3,b3,e4]@3 ~", H: "b3@11 ~@5", I: "~@2 [c#4,e4,g#4]@5 ~", J: "~@4 [c#4,e4,g#4]@11 ~",
K: "~ [c#4,e4,g#4]@3", L: "~ [b3,d#4,f#4]@3", M: "~@4 [b3,e4,f#4]@11 ~", N: "[d#4,f#4,g#4,b4]/2", O: "[c#4,e4,g#4]/2",
P: "[[d#4,f#4,g#4,b4]@31 ~ c#4@32, ~@31 [b3,e4]@33]/4", Q: "[g#4@15 [d#4,f#4]@16 ~, b4, e4 ~@31]/2",
R: "[~@4 b4@27 ~, [c#4,e4,g#4]@31 ~]/2", // C#m
S: "[[d#4,f#4,b4]@31 ~@16 b3@16 ~, ~@31 [c#4,e4]@32 ~, ~@31 g#4@17 ~@16, ~@37 b4@26 ~]/4", T: "[a3,c#4,e4]/2",
U: "[b3,c#4,e4,f#4]/2", V: "[~@15 b4@16 ~, [a3,c#4,e4]]/2", W: "[[d#4,f#4,b4]@31 ~@6 b4@11, ~@31 [c#4,e4,g#4]@17]/3",
})).s("gm_pad_bowed").gain(0.16).pan(0.3)
// chords · pad bowed · soft notes
const pad_bowed_soft = note("<~@28 A@2 B@2 ~@44 A@2 B@2 ~@84>".pickRestart({
A: "[e4,g#4,b4]/2", B: "[e4,f#4,b4]/2",
})).s("gm_pad_bowed").gain(0.11).pan(0.3)
// bass · synth bass 1
const bass = note(`<
A B C D A B C D A B C D A B C D E@2 F G E@2 F G E@2 F G E@2 F G H I H J H J H K L M N O L M P Q L M N R L M P Q S T N
U S T V W E@2 F G E@2 F G E@2 F G E@2 F G H I H J H J H K L M N O L M P Q L M N R L M P Q S T N U S T V X Y Z AA AB Y
AC ~@2 Y Z Y AD L M N O L M P Q L M N R L M P Q S T N U S T V W L M N R L M P Q S T N U S T AE ~
>`.pickRestart({
A: "[c#2,c#3] ~@2 [c#2,c#3] ~@10 [b1,b2] ~", B: "[c#2,c#3] ~@2 [c#2,c#3] ~@12",
C: "[b1,b2] ~@2 [b1,b2] ~@2 [b1,b2] ~@7 [f#1,f#2] ~", D: "[b1,b2] ~@2 [b1,b2] ~@12",
E: "~@2 [c#2,c#3] ~ [c#2,c#3] ~ [b1,b2] [c#2,c#3] ~@8", F: "[b1,b2]@2 ~ [b1,b2] ~@10 [f#1,f#2] ~",
G: "[b1,b2]@3 [b1,b2] ~@12", H: "f#1!2 ~ f#1 ~@10 f#1 ~", I: "f#1!2 ~ f#1 ~@12", J: "g#1!2 ~ g#1 ~@12",
K: "f#1@2 ~ f#1 ~@2 f#1 ~ b1@2 ~@2 b1@3 ~", L: "c#2 ~@2 c#2 ~@2 b1 ~ c#2 ~@5 b1 ~",
M: "c#2 ~@2 c#2 ~@2 b1 ~ c#2 ~@5 g#1 ~", N: "f#1 ~@2 f#1 ~@2 f#1 ~ f#1 ~@5 f#1 ~",
O: "f#1 ~@2 f#1 ~@2 f#1 ~ f#2!2 e2 ~ c#2 ~ b1 ~", P: "[b1,b2]@2 ~ [b1,b2] ~@2 [b1,b2] ~@7 [f#1,f#2] ~",
Q: "[b1,b2]@2 ~ [b1,b2] ~@6 [c#2,c#3]@3 [b1,b2] ~@2", R: "f#1 ~@2 f#1 ~@2 f#1 ~ a2 a1 g#2 g#1 e2 ~ c#2 ~",
S: "c#2 ~@2 c#2 ~@2 c#2 ~@7 b1 ~", T: "c#2 ~@2 c#2 ~@2 c#2 ~@7 g#1 ~",
U: "f#1 ~@2 f#1 ~@2 f#1 ~ b1 c#2 e2 ~ c#2@2 b1 ~", V: "f#1 ~@2 f#1 ~@2 f#1 ~@7 f#1 ~", W: "b1 ~@2 b1 ~@2 b1 ~@9",
X: "[b1,b2]@2 ~ [b1,b2] ~@2 [b1,b2]@5 ~ [b1,b2] ~@3", Y: "f#1@2 ~ f#1 ~@2 f#1 ~@8 e1",
Z: "f#1@2 ~ f#1 ~@2 f#1 ~@8 f#1", AA: "b1@2 ~ b1 ~@2 b1 ~@9", AB: "b1@2 ~ b1 ~@2 b1 ~@7 b1 c#2",
AC: "f#1@2 ~ f#1 ~@2 f#1 ~@9", AD: "f#1@2 ~ f#1 ~@2 f#1 ~ b1 ~@3 b1 ~@3", AE: "f#1 ~@2 f#1 ~@2 f#1 ~@9",
})).s("gm_synth_bass_1").gain(0.36)
// chords · lead 8 bass lead
const lead_8_bass_lead = note(`<
~@2 A B ~@2 C D ~@2 E F ~@2 C D ~@2 G H ~@2 G H ~@2 G H ~@2 G H ~@10 I@2 ~@2 J K ~@2 I L ~@2 J K ~@2 I L ~@3 K ~@2 G H
~@2 G M ~@2 G H ~@2 G M ~@10 I@2 ~@2 J K ~@2 I L ~@2 J M ~@2 I L ~@3 K ~@14 I@2 ~@2 J K ~@2 I L ~@2 J K ~@2 I L ~@3 K
~@2 I L ~@2 J K ~@2 I L ~@4
>`.pickRestart({
A: "[a2,e3]@6 [b2,f#3] ~@7 c#3 ~", B: "[a2,d3]@4 b4 a#4 a4@2, ~ e5", C: "[b2,e3]@3 [b2,e3] ~@10 f#2 ~",
D: "[b2,e3] ~@3", E: "[c#3,e3,c#4]@3 [b2,e3,b3] ~@10 f#2 ~", F: "[c#3,e3,c#4]@3 [b2,b3] ~@12",
G: "[f#3,b3,c#4]@4 ~@10 f#3 ~", H: "[f#3,b3,c#4,e4]@5 ~@11", I: "[c#3,e3]@3 [c#3,e3] ~@12",
J: "[b2,e3]@3 [b2,e3] ~@2 [b2,e3] ~@9", K: "[b2,e3]@3 [b2,e3] ~@12", L: "[c#3,e3]@3 ~@13",
M: "[c#3,e3] ~ [b2,d3]@5 ~", // C#m Bm
})).s("gm_lead_8_bass_lead").gain(0.26).pan(0.4)
// other · xylophone
const xylophone = note(`<
~@2 A B ~@2 A B ~@2 A B ~@2 A B C D ~@2 C D ~@2 C D ~@2 C D ~@24 A B ~@6 E B C D ~@2 C D ~@2 C D ~@2 C D ~@24 A B ~@6
E B ~@3 F ~@22 A B ~@6 E B ~@6 A B ~@6 E G
>`.pickRestart({
A: "[f3,b3] ~@2 [f3,b3] ~@2 [f3,b3] ~@7 [c3,f#3] ~", B: "[f3,b3] ~@2 [f3,b3] ~@12",
C: "~ d3 [g2,g3] [f2,f3] [g2,g3]!2 [f2,f3] [g2,g3] ~@8", D: "~ [d2,d3] [g2,g3] [f2,f3] [g2,g3]!2 [f2,f3] [g2,g3] ~@8",
E: "c3 ~@2 c3 ~@2 c3 ~@7 c3 ~", F: "~@8 g3 d#3 ~@6", G: "[f3,b3] ~@15",
})).s("gm_xylophone").gain(0.23).pan(0.4)
// other · lead 3 calliope
const lead_3_calliope = note(`<
~@16 A B@3 C D E ~ F G H I J K L ~ M N O@2 P Q R S ~@2 T U ~ V W X ~@2 Y@2 ~@3 Z AA ~@2 AB ~ AC@2 ~ A AD@3 C AE@2 ~
AF@4 AG AH AI ~ M N O@2 P Q R S ~@2 T U ~ V W X ~@2 Y@2 ~@3 Z AJ ~@2 AB ~ AC@2 ~ AK@2 ~@2 AL AK AM AN AO ~@3 AP AQ@2 U
~ V W X ~@2 Y@2 ~@3 Z AA ~@2 AB ~ AC@2 ~@3 Y@2 ~@3 Z AA ~@2 AB ~@4
>`.pickRestart({
A: "~@2 f#5@2 ~ f#5 ~@2",
B: "[e5@2 ~@2 f#5@2 ~@2 e5@2 ~@2 f#5@2 ~ e5@3 e5 ~ e5 ~ e5 ~ f#5@2 ~ f#5@2 ~ f#5@4 e5@2 ~@8 b4@4]/3",
C: "g#4@3 ~ b4@4 c#5@4 e5@4", D: "g#5@4 ~@2 b5@3 ~@5 b5@2", E: "~ g#5 f#5@3 ~@11", F: "~@4 g#5@3 ~@3 f#5@2 ~@4",
G: "b5@3 ~ g#5@3 ~@9", H: "~@2 e5@3 ~ e5 ~ f#5@2 ~ g#5@2 ~ g#5@2", I: "~ f#5 e5@2 ~@8 g#5 ~ g#5@2",
J: "~ f#5 ~ e5@3 ~@4 e5@2 e5 ~ e5 ~", K: "~@2 f#5 ~@3 c#6@5 ~ g#5 ~ b5@2", L: "~ f#5@4 ~@3",
M: "f#5@3 f#5 ~@2 e5 ~ f#5 ~ f#5!2 ~@4", N: "f#5@3 f#5 ~ e5 ~ f#5 ~ f#5 ~ f#5 ~@4",
O: "[b5@2 ~ g#5 ~@2 g#5@2 f#5@4 e5@2 f#5@7 ~@9 e5 ~]/2", P: "f#5 ~ f#5!2 ~@4 f#5 ~ f#5!2 ~@4",
Q: "f#5 ~ f#5!2 ~ e5 ~ f#5 ~ f#5 ~ f#5 ~@4", R: "b5@3 ~ a5 ~ g#5 ~ f#5@4 e5 ~@3", S: "e6@3 c#6 ~@2 b5 ~ b5@8",
T: "~@4 f#5@3 ~@3 b4 ~ c#5@2 b4 ~", U: "f#5 ~ f#5!2 ~ f#5 c#5@2 ~ b4 c#5@2 ~@4", V: "~@3 f#5", W: "e5@4 ~@3 a5",
X: "~@3 a5 a5@2 ~ g#5 f#5 ~@2 f#5 f#5@4", Y: "[~@8 b5 ~ b5 ~ g#5 ~ b5@6 c#6 ~ f#5@3 ~ e5@3 ~@3]/2",
Z: "[b5,e6] ~@2 [b5,e6] ~@2 [b5,e6] ~ [b5,e6] ~@2 [b5,e6] ~ e6 b5 ~", AA: "[c#6,f#6]@2 [b5,e6] [g#5,c#6] ~@12",
AB: "~@4 b5 ~ c#6 ~ e6 c#6 ~ e6@3 c#6@2", AC: "[~@10 b4 ~ b4!2 ~ f#5@3 e5@2 ~@2 d#5@3 c#5 b4 ~@5]/2",
AD: "[e5@2 ~@2 f#5@2 ~@2 e5@2 ~@2 f#5@2 ~ e5@3 e5 ~ e5 ~ e5 ~ f#5@2 ~ f#5@2 ~ f#5@4 e5@2 ~@12]/3",
AE: "[g#5@3 ~ b5 ~ c#6@2 ~@2 b5 ~@3 b5@11 ~ g#5@3 ~@3]/2",
AF: "[~@4 g#5@5 ~ g#5@2 ~@2 b5@5 ~ b5 ~ g#5 ~ e6@2 ~ c#6!2 ~ c#6@4 b5 ~ g#5 ~ f#5 ~ f#5 ~@2 g#5 ~@2 f#5@6 e5@2 f#5@3 ~@3 g#5 ~ g#5@2]/4",
AG: "~ f#5 e5 c#5 ~@6 f#5 ~@3 g#5 ~", AH: "~@2 b5 ~@3 c#6@2 ~@2 b5 ~@3 c#6@2",
AI: "e6@6 c#6@2 b5 g#5 f#5 e5 c#5 e5@3", AJ: "[b5,e6] ~@2 [b5,e6] ~ [b5,e6] ~@2 [c#6,f#6]@2 [b5,e6] [g#5,c#6] ~@4",
AK: "~@2 g#4 ~ g#4 ~ f#4 ~ g#4@2 ~ g#4 ~@2 g#4 ~", AL: "~@2 g#4 ~ g#4 ~ f#4 ~ g#4@2 ~ g#4 ~@2 g#4@2",
AM: "~@8 e5 ~@2 e5 ~@2 e5 ~", AN: "e5 ~@2 e5 ~@2 g#5@4 f#5 e5@4 c#5", AO: "e5@3 c#5 b4@3 a4 b4@3 a4 g#4@3 ~",
AP: "~@4 c#6@2 ~@4 b5 ~@5", AQ: "[c#6@3 ~ b5@3 g#5 c#6@2 ~@2 b5@2 ~ f#5@3 e5 ~ f#5@3 ~@3 b4 ~ c#5@2 b4 ~]/2",
})).s("gm_lead_3_calliope").gain(0.37)
// other · shamisen
const shamisen = note(`<
A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@26 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@26 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2
~@2 A@2 ~@2 B C ~@2 D E ~@2 B F G H A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2
>`.pickRestart({
A: "b4 ~@2 b4 ~@12", B: "~@2 e4!2 d#4!2 e4!2 g#4!2 e4!2 d#4!2 e4!2", C: "d#4!2 e4!2 d#4!2 e4 ~@9",
D: "~@2 e4!2 d#4!2 e4!2 c#4!2 e4!2 d#4!2 e4!2", E: "g#4!2 e4!2 d#4!2 e4 ~@9",
F: "c#4!2 e4!2 d#4!2 e4!2 b4!2 e4!2 d#4!2 e4!2", G: "g#4!2 e4!2 d#4!2 e4!2 c#5!2 e4!2 d#4!2 e4!2",
H: "b3!4 d#4!2 b3!2 f#4!2 b3!6",
})).s("gm_shamisen").gain(0.13).pan(0.8)
// chords · lead 5 charang
const lead_5_charang = note(`<
~@3 A ~@6 B C D ~@28 E ~@3 E ~@5 F ~ E ~@5 F ~ E ~@27 E ~@3 E ~@5 F ~ E ~@3 G H I ~ J ~@15 E ~@3 E ~@5 F ~ E ~@5 F ~ E
~@5 F ~ E ~@5 F ~ E ~@2
>`.pickRestart({
A: "~@4 b4 a#4 a4@2, ~ e5",
B: "[b3,c#4,e4]@3 [b3,c#4,e4] ~@2 [b3,c#4,e4] ~ [b3,c#4,e4] [b3,c#4,e4]@3 ~ [b3,c#4,e4] ~@2", // C#m7
C: "[b3,c#4,e4]@2 ~ [b3,c#4,e4] ~@2 [b3,c#4,e4] ~ [b3,c#4,e4] [b3,c#4,e4]@6 ~", D: "[b3,d#4] ~@7",
E: "~@5 c#4 ~@2, ~@10 g#3 ~@5", F: "f#3 e3 c#3 ~@13", G: "~@10 g#3 c#4@2 b3 ~@2", H: "~@9 c#4!2 b3 ~@4",
I: "f#3 e3 c#3 ~@6 c#4!2 b3 c#4 ~ b3 ~", J: "~@10 c#4@2 ~ b3 ~@2, ~@10 g#3 ~@5",
})).s("gm_lead_5_charang").gain(0.21)
// chords · distortion guitar
const distortion_guitar = note(`<
~@2 A B ~@2 C D ~@2 E F ~@2 C D ~@2 C D ~@2 C D ~@2 C D ~@2 G H ~@10 I J ~@2 K D ~@2 I ~@3 K D L M I ~@4 N ~@2 C D ~@2
C D ~@2 C D ~@2 G H ~@10 I J ~@2 K D ~@2 I ~@3 K D ~@2 I ~@4 O P Q R@2 S T ~@2 U V W X ~@2 I J ~@2 K D ~@2 I ~@3 K D L
M I ~@4 N ~@2 I ~@3 K D L M I ~@5
>`.pickRestart({
A: "[a2,e3]@6 [b2,f#3] ~@7 c#3 ~", B: "[a2,d3] ~", C: "[b2,e3]@3 [b2,e3] ~@10 f#2 ~", D: "[b2,e3] ~@3",
E: "[c#3,e3]@3 [b2,e3] ~@10 f#2 ~", F: "[c#3,e3]@3 b2 ~@12", G: "[b2,e3]@3 [b2,e3] ~@12",
H: "[b2,e3]@3 [b2,e3] ~@2 [b2,e3] ~@9", I: "[c#3,e3]@3 [c#3,e3] ~@10 f#2 ~", J: "[c#3,e3] ~@3",
K: "[b2,e3]@3 [b2,e3] ~@2 e3 ~@7 f#2 ~", L: "~@12 [c#3,e3] [b2,c3,d3,d#3] [a2,a#2,c3,c#3] [g2,g#2,a#2,b2]",
M: "[c#1,f#2,a2] ~@15", N: "c#3@3 b2 ~@2 b2 ~@5 b2 ~@3", O: "c#3@3 b2 ~@2 b2@5 ~ b2 ~@3",
P: "~@2 e4!2 d#4!2 e4!2 g#4!2 e4!2 d#4!2 e4!2", Q: "d#4!2 e4!2 d#4!2 e4@2 [f#4,c#5]@8",
R: "e3@2 [c#3,d3,d#3] [b2,c3] ~@12", S: "~@2 e4!2 d#4!2 e4!2 c#4!2 e4!2 d#4!2 e4!2",
T: "g#4!2 e4!2 d#4!2 e4@2 [f#4,c#5]@8", U: "~@2 e4!2 d#4 ~ e4!2 g#4!2 e4!2 d#4!2 e4!2, ~@5 d#4@7 ~@4",
V: "c#4!2 e4!2 d#4 ~ e4!2 b4!2 e4!2 d#4!2 e4!2, ~@5 d#4@7 ~@4",
W: "g#4!2 e4!2 d#4 ~ e4!2 c#5!2 e4!2 d#4!2 e4!2, ~@5 d#4@7 ~@4", X: "b3!4 d#4!2 b3!2 f#4!2 b3!6",
})).s("gm_distortion_guitar").gain(0.25).pan(0.3)
// other · epiano1
const epiano1 = note(`<
~@3 A B C ~@5 A B C ~@18 D@3 E D@3 ~@16 A F ~@2 A B C ~@18 D@3 E D@3 ~@16 A B ~@2 A B C ~@29 A B C ~ A B C ~@9 A B C ~
A B C ~@2
>`.pickRestart({
A: "~@12 b3 c#4 e4 f#4", B: "g#4 ~ f#4 ~ e4 ~ f#4 ~@3 c#4 ~@3 c#4 ~", C: "e4 ~@3 f#4 ~@11", D: "~@3 a3 c#4 ~@11",
E: "~@3 g#3 d#4 ~@11", F: "g#4 ~ f#4 ~ e4 ~ f#4 ~@3 c#4 ~@5",
})).s("gm_epiano1").gain(0.61).pan(0.6)
// other · marimba
const marimba = note("<~@16 A@2 B C A@2 B C A@2 B C A@2 B C ~@32 A@2 B C A@2 B C A@2 B C A@2 B C ~@84>".pickRestart({
A: "~ d#2 g#2 f#2 g#2!2 f#2 g#2 ~@8", B: "b3@2 ~ [f#2,b3] ~@10 [c#2,f#3] ~, f#2 ~@15",
C: "[f#2,b3]@2 ~ [f#2,b3] ~@12", // B5
})).s("gm_marimba").gain(0.27).pan(0.6)
// drums · kick
const kick = s("bd").struct("x ~@2 x!2 ~@3").gain(0.34)
// drums · kick · soft notes
const kick_soft = s("bd").struct(`<
~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
>`.pickRestart({
A: "~@3 x ~@12",
})).gain(0.23)
// drums · snare
const snare = s("sd").struct("~ x ~ x").gain(0.3)
// drums · low tom
const low_tom = s("lt").struct("<~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@16 B@8 ~@40 B@8 ~@24 B@11 C ~@40>".pickRestart({
// … 92 more lines
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.