0:00/0:00
// The Roof — Mariah Carey
// 95 bpm, 4/4, key A# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 126 bars on a 48-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(95/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
const piano = note(`<
A@5 B@4 C D C D C D C D C D C D E D E D F G H I J K L M N O N O N O N O N O N O N O N O P Q R S T K L M N O N U N U N
U N U N U V W X W Y Z AA@2 AB AC AD AE AF AG AF AG AF AG AF AG AH AG AH AG AH AG AH AG AH AG AH AG AH AG AH AG ~@21
>`.pickRestart({
A: "[~@42 c5@2 db5@3 ~@38 bb4@4 ~@19 db4@29 ~@3 c5@2 ~@38 bb4@6 ~@30 f5@12 ~@6 db5@4 ~@2, ~@47 c5@25 f4@17 ~@5 c5@8 bb3@37 ~@11 bb3@12 db4@7 f5@17 ~@5 db5@7 bb3@5 db4@25 f5@10 ~@2, ~@48 f3@18 db4@24 ~@5 db5@41 ~@6 db5@2 c5@42 ~@4 c5@48 ~@2, ~@54 bb3@35 ~@7 gb3@41 ~@6 f3@43 ~@5 gb3@47 ~@2, ~@60 c4@29 ~@8 eb5@39 ~@20 c4@30 ~@7 eb5@45 ~@2]/5",
B: "[~@37 bb4@5 ~@18 db4@30 c5@2 db5@2 ~@73 eb4@25, [f3,c5]@42 ~@6 [gb3,db5]@46 ~@3 f3@53 gb3@6 bb3@6 db4@30, ~@6 bb3@36 ~@7 eb5@44 ~@15 c4@84, ~@14 c4@28 ~@4 c5@44 ~@5 c5@50 gb2@47, ~@18 bb3@13 ~@3 bb3@4 db4@2 f4@24]/4", // F5 Gb5
C: "~@6 f3@5 ~ bb3@5 db4@6 ~ eb4@18 f3@2 ~@4, bb2@11 ~", D: "gb3@8 ~@2 bb3@8 eb4@12 db4@6 c4@3 db4@9, gb2",
E: "~@6 f3@5 ~ bb3@6 db4@6 eb4@18 f3@2 ~@4, bb2@11 ~", F: "~@6 gb3@6 bb3@7 db4@5 eb4@18 ~ db4@5, gb2@43 ~@5",
G: "c4@8 db4@10 c4@8 ~@4 ab3@6 f3@3 ab3@9, f2@19 ~@5", H: "~@6 gb3@5 ~ bb3@6 db4@6 eb4@18 db4@6, gb2@43 ~@5",
I: "c4@10 db4@9 c4@9 ~@3 ab3@6 f3@3 ab3@7 ~, f2@19 ~@5", J: "~@6 gb3@5 ~ bb3@6 db4@6 eb4@18 db4@5 ~, ~ gb2@45 ~@2",
K: "~@9 db4@9 c4@10 ~@3 ab3@5 ~@3 ab3@8 ~, c4@10 ~@27 f3@4 ~@7, ~ f2@38 ~@9",
L: "~@6 gb3@6 bb3@6 db4@5 ~ eb4@18 db4@6, gb2@11 ~", M: "c4@9 db4@9 c4@11 ~ a3@6 f3@10 ~@2, f2@23 ~",
N: "~@6 f3@5 ~ bb3@6 db4@6 eb4@18 f3@2 ~@4, ~ bb2@44 ~@3", O: "~ gb3@8 ~ bb3@8 eb4@12 db4@6 ~ c4@2 db4@9, gb2",
P: "~@6 gb3@6 bb3@7 db4@5 ~ eb4@18 db4@5, gb2@43 ~@5", Q: "~ c4@8 db4@9 c4@8 ~@4 ab3@6 f3@3 ab3@9, f2@19 ~@5",
R: "~@6 gb3@5 ~ bb3@6 db4@6 eb4@19 db4@5, gb2@43 ~@5", S: "~ c4@9 db4@9 c4@9 ~@3 ab3@6 f3@3 ab3@7 ~, f2@19 ~@5",
T: "~@7 gb3@5 bb3@6 db4@6 eb4@18 ~ db4@5, ~ gb2@45 ~@2", U: "~ gb3@8 ~ bb3@8 eb4@12 db4@6 ~ c4@3 db4@8, gb2",
V: "~@6 f3@5 ~ bb3@6 db4@6 eb4@19 f3@2 ~@3, ~ bb2@44 ~@3", W: "~ gb3@8 ~ bb3@8 ~ eb4@11 db4@6 ~ c4@3 db4@8, ~ gb2@47",
X: "~@7 f3@5 bb3@6 db4@6 eb4@19 f3@2 ~@3, ~ bb2@44 ~@3", Y: "~ [gb2,gb3,bb3,db4]@45 ~@2", Z: "~ [f2,f3,a3,c4]@47",
AA: "[~ [bb2,f3,bb3,db4]@91 ~@4]/2", AB: "~ [gb2,gb3,bb3,db4]@47", AC: "~ [f2,f3,a3,c4]@45 ~@2",
AD: "~ [eb3,gb3,bb3,eb4]@44 ~@3", AE: "~ f3@18 f3@6 c4@6 c4@16 ~, ~ f2@46 ~, ~ [a3,c4]@24 [f3,a3,eb4]@22 ~",
AF: "~@7 f3@5 bb3@6 db4@6 ~ eb4@18 f3@2 ~@3, ~ bb2@44 ~@3", AG: "~ gb3@8 ~ bb3@8 ~ eb4@12 db4@6 c4@3 db4@8, ~ gb2@47",
AH: "~@7 f3@5 ~ bb3@5 db4@6 ~ eb4@18 f3@2 ~@3, ~ bb2@44 ~@3",
})).s("gm_piano").gain(0.28)
// bass · electric bass finger
const bass = note(`<
~@8 A B C D E F G H I F I J K L G M N O P Q R S T U V W X M K Y I L Z F I J K L G M AA AB AC AD AE AF AG AH AI AJ AK
AL AM AN AO AP AQ AJ AK AL AM AL AM AN AO AR AS AT AU AR AV AW AX AY AO AZ AM AP BA AL BB BC AO AZ AM AP BA AL BB BC
AO AZ AM AP BA AL BB BC AO AZ AM AP BA AL BD ~@13
>`.pickRestart({
A: "gb1@2 ~@4 gb1@12 ~@3 gb1 ~@2 gb1@3 ~@9 ab1@6 ~@3 bb1@2 ~", B: "bb1@2 ~@4 bb1@14 ~@4 bb1@3 ~@18 gb1 ~@2",
C: "gb1@2 ~@4 gb1@12 ~@3 gb1 ~@2 gb1@3 ~@9 ab1@6 ~@3 bb1 ~@2", D: "bb1@3 ~@3 bb1@13 ~@2 bb1 ~@2 bb1@5 ~@16 gb1 ~@2",
E: "gb1@2 ~@4 gb1@11 ~@4 gb1 ~@2 gb1@6 ~@6 ab1@5 ~@4 bb1 ~@2", F: "bb1@2 ~@4 bb1@13 ~@2 bb1 ~@2 bb1@3 ~@18 gb1 ~@2",
G: "gb1@2 ~@4 gb1@12 ~@3 gb1 ~@2 gb1@4 ~@8 ab1@6 ~@3 bb1 ~@2", H: "bb1@2 ~@4 bb1@12 ~@3 bb1 ~@2 bb1@3 ~@18 gb1 ~@2",
I: "gb1@2 ~@4 gb1@12 ~@3 gb1 ~@2 gb1@3 ~@9 ab1@5 ~@4 bb1 ~@2", J: "bb1@2 ~@4 bb1@13 ~@2 bb1 ~@2 bb1@2 ~@19 gb1 ~@2",
K: "gb1@2 ~@4 gb1@11 ~@4 gb1 ~@2 gb1@3 ~@9 ab1@4 ~@5 bb1 ~@2", L: "bb1@2 ~@4 bb1@12 ~@3 bb1 ~@2 bb1@2 ~@19 gb1 ~@2",
M: "bb1@2 ~@4 bb1@11 ~@4 bb1 ~@2 bb1@5 ~@16 gb1 ~@2", N: "gb1@2 ~@4 gb1@11 ~@4 gb1 ~@2 gb1@7 ~@5 ab1@5 ~@5 gb1 ~",
O: "gb1@2 ~@4 gb1@12 ~@3 gb1 ~@2 gb1@5 ~@16 f1 ~@2", P: "f1@2 ~@4 f1@11 ~@4 f1 ~@2 f1@3 ~@18 gb1 ~@2",
Q: "gb1@2 ~@4 gb1@11 ~@4 gb1 ~@2 gb1@5 ~@16 f1 ~@2", R: "f1@2 ~@4 f1@11 ~@4 f1 ~@2 f1@2 ~@10 ab1@5 ~@4 gb1 ~@2",
S: "gb1@2 ~@4 gb1@12 ~@3 gb1 ~@2 gb1@4 ~@17 f1 ~@2", T: "f1@2 ~@4 f1@10 ~@5 f1 ~@2 f1@4 ~@17 gb1 ~@2",
U: "gb1@2 ~@4 gb1@11 ~@4 gb1 ~@2 gb1@3 ~@18 f1 ~@2", V: "f1@2 ~@4 f1@10 ~@5 f1 ~@2 f1@3 ~@9 ab1@6 ~@3 bb1 ~@2",
W: "bb1@2 ~@4 bb1@12 ~@3 bb1 ~@2 bb1@6 ~@15 gb1 ~@2", X: "gb1@2 ~@4 gb1@10 ~@5 gb1 ~@2 gb1@4 ~@8 ab1@5 ~@4 bb1 ~@2",
Y: "bb1@2 ~@4 bb1@14 ~ bb1 ~@2 bb1@3 ~@18 gb1 ~@2", Z: "gb1@2 ~@4 gb1@11 ~@4 gb1 ~@2 gb1@3 ~@9 ab1@5 ~@4 bb1 ~@2",
AA: "gb1@2 ~@5 gb1@11 ~@3 gb1 ~@2 gb1@7 ~@5 ab1@5 ~@5 gb1 ~", AB: "gb1@2 ~@4 gb1@12 ~@3 gb1 ~@3 gb1@5 ~@16 f1 ~",
AC: "~ f1@2 ~@4 f1@11 ~@4 f1 ~@2 f1@3 ~@18 gb1 ~", AD: "~ gb1@2 ~@4 gb1@11 ~@4 gb1 ~@2 gb1@5 ~@16 f1 ~",
AE: "~ f1@2 ~@4 f1@11 ~@4 f1 ~@2 f1@2 ~@10 ab1@5 ~@4 gb1 ~", AF: "~ gb1@2 ~@4 gb1@12 ~@3 gb1 ~@2 gb1@4 ~@17 f1 ~",
AG: "~ f1@2 ~@4 f1@10 ~@5 f1 ~@2 f1@4 ~@17 gb1 ~", AH: "~ gb1@2 ~@4 gb1@11 ~@4 gb1 ~@2 gb1@3 ~@18 f1 ~",
AI: "~ f1@2 ~@4 f1@10 ~@5 f1 ~@2 f1@3 ~@9 ab1@6 ~@3 bb1 ~", AJ: "~ bb1@2 ~@4 bb1@12 ~@3 bb1 ~@2 bb1@6 ~@15 gb1 ~",
AK: "~ gb1@2 ~@4 gb1@10 ~@5 gb1 ~@2 gb1@4 ~@8 ab1@5 ~@4 bb1 ~", AL: "~ bb1@2 ~@4 bb1@11 ~@4 bb1 ~@2 bb1@5 ~@16 gb1 ~",
AM: "~ gb1@2 ~@4 gb1@11 ~@4 gb1 ~@2 gb1@3 ~@9 ab1@4 ~@5 bb1 ~", AN: "~ bb1@2 ~@4 bb1@14 ~ bb1 ~@2 bb1@3 ~@18 gb1 ~",
AO: "~ gb1@2 ~@4 gb1@12 ~@3 gb1 ~@2 gb1@3 ~@9 ab1@5 ~@4 bb1 ~", AP: "~ bb1@2 ~@4 bb1@12 ~@3 bb1 ~@2 bb1@2 ~@19 gb1 ~",
AQ: "~ gb1@2 ~@4 gb1@11 ~@4 gb1 ~@2 gb1@3 ~@9 ab1@5 ~@4 bb1 ~",
AR: "~ gb1@2 ~@4 gb1@11 ~@4 gb1 ~@2 gb1@4 ~@8 bb1@8 ~@3", AS: "~ f1@3 ~@3 f1@11 ~@4 f1 ~@2 f1@5 ~@18",
AT: "~ bb1@2 ~@4 bb1@11 ~@4 bb1 ~@2 bb1@3 ~@20", AU: "~ bb1@2 ~@4 bb1@8 ~@4 bb1@4 ~@2 f1@5 ~ gb1@6 ab1@6 bb1@4 ~",
AV: "~ f1@2 ~@4 f1@11 ~@4 f1@2 ~ f1@5 ~@7 bb1@9 ~@2", AW: "~ eb2@3 ~@3 eb2@11 ~@4 eb2@2 ~ eb2@4 ~@19",
AX: "~ f1@3 ~@3 f1@11 ~@4 f1@2 ~ f1@5 ~@7 ab1@9 ~@2", AY: "~ bb1@2 ~@4 bb1@13 ~@2 bb1 ~@2 bb1@3 ~@18 gb1 ~",
AZ: "~ bb1@2 ~@4 bb1@13 ~@2 bb1 ~@2 bb1@2 ~@19 gb1 ~", BA: "~ gb1@2 ~@4 gb1@12 ~@3 gb1 ~@2 gb1@4 ~@8 ab1@6 ~@3 bb1 ~",
BB: "~ gb1@2 ~@4 gb1@11 ~@4 gb1 ~@2 gb1@7 ~@5 ab1@5 ~@4 gb1 ~",
BC: "~ bb1@2 ~@4 bb1@13 ~@2 bb1 ~@2 bb1@3 ~@18 gb1 ~, ~ gb1 ~@46",
BD: "~ gb1@2 ~@4 gb1@11 ~@4 gb1 ~@2 gb1@7 ~@5 ab1@5 ~@6",
})).s("gm_electric_bass_finger").gain(0.33)
// other · string ensemble 2
const string_ensemble_2 = note(`<
~@8 A@8 B ~@7 C@2 D E F G H I J@2 K L@2 M@2 N@2 ~@7 O@2 P E Q G H I J@2 K R@2 S@2 N@2 T K U@2 V@2 N@2 W@2 X Y Z@2 AA
AB AC@4 AD@4 AE AF U@2 T AG AH@2 AE AF U@2 T AG AH@2 AE AF U@2 AI AG AJ@2 AE AK U@2 AI AG AJ@2 AE AL U@2 ~
>`.pickRestart({
A: "[~@13 [c4,c5]@11 [db4,db5]@12 [f4,f5]@11 ~ bb3@36 [c4,c5]@11 [db4,db5]@36 [ab4,ab5]@13 [f4,f5]@96 [bb3,bb4]@36 [c4,c5]@11 [db4,db5]@71 [eb4,eb5]@13 ~ ab5@12, ~ [bb3,bb4]@12 ~@34 bb4@36 ~@288 ab4@13, ~ bb5@191]/8", // C Db F C Db Ab F Bb …
B: "~ f4@47, f5", C: "[~@24 f4@11 ~ ab3@11 ~ bb3@36 [f4,f5]@12, ~@23 f3@12 ab4@12 bb4@38 ~@11]/2",
D: "[eb4,eb5]@47 ~", E: "~ bb4@34 ~ [bb4,bb5]@12, ~ bb3@30 ~@17", F: "~ f4@22 [eb4,eb5]@25, f5 ~",
G: "[f3,f4]@37 [f4,f5]@11", H: "~ [eb4,eb5]@22 [c4,c5]@25", I: "~ [bb4,bb5]@35 [a4,a5]@12",
J: "[~@4 [bb3,bb4]@3 [c4,c5], ~ [f4,f5]@51 ~@44]/2", K: "[db4,db5]@11 [eb4,eb5]@13 [f4,f5]@13 [ab4,ab5]@11",
L: "[~ [f4,f5]@93 ~@2]/2", M: "[[bb3,bb4]@36 [c4,c5]@11 [db4,db5]@12 [eb4,eb5]@12 ~ [f4,f5]@12 ~ ab4@11, ~@7 ab5]/2",
N: "[~ [f4,f5]@92 ~@3]/2", O: "[~@24 [f3,f4]@12 [ab3,ab4]@11 ~ bb3@36 ~ f5@11, ~@47 bb4@37 f4@12]/2",
P: "~ [eb4,eb5]@47", Q: "~ [f4,f5]@22 ~ eb4@24, ~@23 eb5@25", R: "[~@2 f5@93 ~, ~ f4@92 ~@3]/2",
S: "[[bb3,bb4]@36 [c4,c5]@11 ~ db5@11 [eb4,eb5]@12 ~ [f4,f5]@13 [ab4,ab5]@11, ~@47 db4@13 ~@36]/2", // Bb C Eb F Ab
T: "~ [bb3,bb4]@35 [c4,c5]@12", U: "[~@2 [f4,f5]@93 ~]/2",
V: "[[bb3,bb4]@36 [c4,c5]@11 ~ db5@12 [eb4,eb5]@12 [f4,f5]@13 [ab4,ab5]@11, ~@47 db4@13 ~@36]/2", // Bb C Eb F Ab
W: "[~ [gb3,gb4]@34 [ab3,ab4]@12 ~ bb3@12 [c4,c5]@12 [db4,db5]@12 [eb4,eb5]@12, ~@47 bb4@13 ~@36]/2", // Gb Ab C Db Eb
X: "[f4,f5]@3 [bb4,bb5]", Y: "[f4,f5]@2 [eb4,eb5] [c4,c5]",
Z: "[~ [gb3,gb4]@34 ~ ab4@11 [bb3,bb4]@13 [c4,c5]@12 [db4,db5]@12 [f4,f5]@12, ~@35 ab3@12 ~@49]/2", // Gb Bb C Db F
AA: "[eb4,eb5]@23 ~", AB: "~ [bb4,bb5]@23 ~ f5@23, ~ f4",
AC: "[~@36 [c4,c5]@12 [db4,db5]@11 ~ eb4@13 [f4,f5]@12 [ab4,ab5]@13 [f4,f5]@93 ~, ~ [bb3,bb4]@36 ~@22 eb5@13 ~@120, ~ bb6@95]/4", // C Db F Ab F Bb
AD: "[~@36 [c4,c5]@12 [db4,db5]@12 [eb4,eb5]@12 [f4,f5]@13 [ab4,ab5]@12 ~ f4@92 ~@2, ~ [bb3,bb4]@36 ~@60 f5@92 ~@3, ~ bb6@91 ~@4]/4", // C Db Eb F Ab Bb
AE: "~ [bb3,bb4]@36 [c4,c5]@11", AF: "[db4,db5]@11 ~ eb4@13 [f4,f5]@12 [ab4,ab5]@11, ~@11 eb5@13 ~@24",
AG: "[db4,db5]@12 [eb4,eb5]@12 [f4,f5]@13 [ab4,ab5]@11", AH: "[~ f4@46 ~, ~ f5@92 ~@3]/2",
AI: "~ [bb3,bb4]@35 ~ c5@11, ~@3 c4", AJ: "[~ [f4,f5]@46 ~]/2",
AK: "[db4,db5]@11 ~ eb4@13 [f4,f5]@13 [ab4,ab5]@10, ~@11 eb5@13 ~@24", // Db F Ab
AL: "~ [db4,db5]@11 [eb4,eb5]@13 [f4,f5]@13 [ab4,ab5]@10", // Db Eb F Ab
})).s("gm_string_ensemble_2").gain(0.12)
// other · celesta
const celesta = note(`<
~@3 A B A B A B A B A B A B A B ~@16 A B A B A B A B ~@16 C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D
C D ~@16 C D C D C D C D C D C D C D C D C D C D E
>`.pickRestart({
A: "bb5 ~@5 bb5@2 ~@4 f6@3 bb6@3 f6@3 bb6@2 ~ bb5 ~@5 bb5 ~@5 f6@3 bb6@3 f6@3 bb6@2 ~",
B: "bb5@2 ~@4 bb5 ~@5 f6@3 bb6@3 f6@3 bb6@2 ~ bb5@2 ~@4 f6@3 bb6@3 f6@3 bb6@3 f6@3 bb6@2 ~",
C: "~ bb5 ~@5 bb5@2 ~@4 f6@3 bb6@3 f6@3 bb6@2 ~ bb5 ~@5 bb5 ~@5 f6@3 bb6@3 f6@3 bb6@2",
D: "~ bb5@2 ~@4 bb5 ~@5 f6@3 bb6@3 f6@3 bb6@2 ~ bb5@2 ~@4 f6@3 bb6@3 f6@3 bb6@3 f6@3 bb6@2", E: "~ bb5@3 ~@20",
})).s("gm_celesta").gain(0.1)
// other · epiano2
const epiano2 = note(`<
~@16 A@3 B@6 C@4 D@2 E@2 F ~@6 G H I J K L M N@5 O P Q R S T U@3 V W X Y Z AA@2 ~ AB AC AD ~ AE AF AG AH AI AJ AK@2 AL
~@7 AM@2 AN@2 AO@2 ~ AP AQ@2 AR@2 ~@25
>`.pickRestart({
A: "[~@28 bb3@2 db4@3 ~ bb3@2 db4@3 ~ bb3@3 eb4@26 ~@6 bb3@3 db4@3 ~ bb3@2 db4@3 ~ bb3@2 ~ eb4@9 ~@2 f4@4 ~@2 eb4@21 ~@3 db4@2 ~ eb4@2 ~@4 f4@3]/3",
B: "[~@3 gb4@9 ~ f4@3 ~@2 eb4@4 ~@2 db4@3 ~@3 bb3@3 db4@3 ~@3 eb4@3 ~@3 f4@15 eb4@14 ~@2 bb3@2 db4@3 ~ bb3@2 db4@3 ~ bb3@2 ~ eb4@9 ~@2 f4@5 ~ eb4@11 ~@4 bb3@3 db4@3 bb3@3 db4@3 ~ bb3@2 ~ eb4@10 ~@2 f4@3 ~@2 eb4@18 ~@7 db4@2 eb4@2 ~@4 f4@5 ~ gb4@9 f4@5 ~ eb4@6 db4@4 ~@2 bb3@3 db4@3 ~@3 eb4@3 ~@3 f4@7 gb4@9 ~ f4@4 eb4@3 ~@3 db4@5 ~ c4@3 db4@6 c4@7 ~@2]/6",
C: "[bb3@24 ~@7 c4@2 f4@3 ~@4 eb4@4 ~@2 db4@5 ~ c4@9 db4@6 c4@5 db4@5 c4@3 ~ eb4@19 ~@26 c4@3 f4@3 ~@3 eb4@2 ~@4 db4@5 ~ c4@9 db4@6 c4@6 db4@5 ~ c4@3 eb4@11 ~ db4@3]/4",
D: "[c4@23 ~@7 c4@4 f4@3 ~@3 eb4@3 ~@3 db4@5 c4@9 db4@6 c4@6 eb4@7 ~@2 c4@4 db4@5 c4@6, db4 ~@95]/2",
E: "[~ eb4@8 db4@4 c4@17 bb3@2 ~ f4@6 ~ eb4@5 db4@5 ~ c4@9 db4@6 ~ c4@5 ~@5 c4@6 eb4@11 db4@2, ~@9 db4 ~@2]/2",
F: "~ bb3@19 ~@28", G: "~@33 ab4@2 bb4@3 ~@2 eb5@5 ~@3", H: "~ c5@6 bb4@5 ~ c5@5 bb4@2 ~@4 db5@8 ~ c5@12 ~@3",
I: "~@44 bb4@3 ~, ~@43 ab4@2 ~@3", J: "~ db5@2 ~@4 c5@2 ~ bb4@2 ~@4 ab4@2 ~@3 f4@4 ~@3 db4@6 ~ db4@3 ~@4 f4@3 ~@3",
K: "f4@15 ~@15 ab4@3 bb4@2 ~@4 eb5@6 ~@3", L: "c5@9 ~@3 c5@8 ~@4 c5@2 ~@4 db5@16 ~@2",
M: "f4@4 ~@3 eb4@3 db4@5 c4@2 ~@5 eb4@10 ~@16",
N: "[~ c5@6 bb4@5 c5@7 bb4@6 c5@5 bb4@4 ab4@6 f4@5 ~@2 f4@6 ~ eb4@4 ~@2 eb4@5 ~ db4@3 ~@3 db4@6 eb4@4 ~@2 f4@4 ~@2 f4@18 ~@18 c4@3 f4@4 ~@3 eb4@5 ~ db4@6 c4@9 db4@6 c4@5 db4@6 c4@3 eb4@37 ~@8 c4@2 ~@2 ab4@2 ~@4 f4@6 ~@2]/5",
O: "~ db4@5 c4@6 db4@5 ~ c4@6 db4@5 ~ c4@3 eb4@7 db4@8", P: "~ c4@9 db4@2 ~ c4@15 ~@2 c4@3 ~ f4@5 ~ eb4@7 ~",
Q: "~ db4@5 ~ c4@5 db4@6 c4@6 db4@5 ~ eb4@3 db4@5 ~ c4@8 ~", R: "~ c4@25 ~@4 c4@3 f4@5 ~@2 eb4@8",
S: "~ db4@5 ~ c4@6 db4@6 c4@6 db4@5 c4@2 ~ eb4@5 ~ db4@4 ~@5", T: "bb3 ~@2",
U: "[~@30 eb4@3 f4@7 ab4@5 ~ f4@28 ~@9 db4@3 eb4@7 ~ f4@7 ab4@3 ~@3 bb4@5 ~ ab4@5 bb4@3 ~@3 c5@6 ~ eb5@7 ~@6]/3",
V: "~ f5@8 eb5@31 ~@8", W: "~@31 eb4@2 f4@3 eb4@3 ~ f4@8", X: "~ db4@24 eb4@5 ~ f4@4 ~@8 ab4@5",
Y: "~ f4@19 ~@10 f4@4 ab4@3 f4@2 ab4@8 ~", Z: "~@2 eb4@25 ~@21",
AA: "[~@7 f4@5 ab4@4 ~@2 bb4@6 ~@12 f5@7 eb5@12 f5@11 ~ eb5@22 ~@7]/2", AB: "~@31 bb4@3 c5@3 bb4@3 c5@8",
AC: "~@3 bb4@26 ~@19", AD: "~ f4@6 ~@2 eb4@7 ~@3 f4@13 ~@16", AE: "~@13 eb5@12 db5@13 ~@10",
AF: "~@12 f5@11 ~ eb5@12 ~ db5@10 ~", AG: "~@13 eb5@11 ~ db5@12 eb5@11", AH: "~@2 f5@9 ~@2 eb5@12 db5@11 c5@11 ~",
AI: "~@13 eb5@12 db5@8 ~@15", AJ: "~@13 f5@11 ~ eb5@11 db5@5 ~@7",
AK: "[~ f5@9 ~@2 gb5@4 ~@3 eb5@16 ~@2 db5@2 ~@4 f5@15 ~@2 gb5@3 ~@4 eb5@12 db5@5 ~ db5@6 c5@5]/2",
AL: "~ bb4@23 ~@24", AM: "[~@25 [c4,c5]@9 [bb3,bb4]@7 ~@2 db4@15 ~@38, ~@21 db5@8 ~@19]/2",
AN: "[~@25 [eb4,eb5]@7 ~ [db4,db5]@9 ~ [c4,c5]@19 ~@34]/2", // Eb Db C
AO: "[~@26 [c4,c5]@8 [bb3,bb4]@7 ~@2 [db4,db5]@18 ~@35]/2", AP: "~@25 eb4@6 ~ [db4,db5]@16, ~@24 eb5@7 ~@17",
AQ: "[~@25 [c4,c5]@7 ~@2 [bb3,bb4]@4 ~@5 [db4,db5]@23 ~@30]/2", // C Bb Db
AR: "[~@25 [eb4,eb5]@9 [db4,db5]@9 ~ [c4,c5]@18 ~@34]/2", // Eb Db C
})).s("gm_epiano2").gain(0.38)
// drums · kick
const kick = s("bd").struct(`<
~@8 A B A@3 B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A C D E D E D E D E D E D E D E D E
D E D E D E D E D E D E D E D E D E D E D E D E D E D E D E D E D E D E D E D E D E D E D E@2 ~@13
>`.pickRestart({
A: "x ~ x ~@4 x!2 ~@6 x", B: "x ~ x ~@4 x!2 ~@7", C: "x ~@5 x ~@14 x ~@3 x ~@22",
D: "~ x ~@5 x ~@14 x ~@2 x ~@20 x ~", E: "~ x ~@5 x ~@14 x ~@2 x ~@22",
})).gain(0.41)
// drums · rim
const rim = s("rim").struct("<~@8 [~ x ~ x]!41 [~@12 x ~@24 x ~@10] [~@13 x ~@23 x ~@10]!63 ~@13>").gain(0.46)
// drums · snare
const snare = s("sd").struct("<~@8 [~ x ~ x]!41 [~@12 x ~@24 x ~@10] [~@13 x ~@23 x ~@10]!63 ~@13>").gain(0.46)
// drums · hihat
const hihat = s("hh").struct(`<
~@8 A B A@3 B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A C D E D E D E D E D E D E D E D E
D E D E D E D E D E D E D E D E D E D E D E D E D E D E D E D E D E D E D E D E D E D E D E D ~@13
>`.pickRestart({
A: "x!8", B: "x!5 ~ x!2", C: "x ~@5 x ~@5 x ~@5 x ~@6 x ~@11 x ~@5 x ~@4",
D: "~ x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@4", E: "~ x ~@5 x ~@5 x ~@5 x ~@5 x ~@11 x ~@5 x ~@4",
})).gain(0.37)
// drums · open hat
const open_hat = s("oh").struct(`<
~@9 A ~@3 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~
B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~@14
>`.pickRestart({
A: "~@5 x ~@2", B: "~@31 x ~@16",
})).gain(0.37)
// drums · crash
const crash = s("cr").struct("<~@8 A ~@8 B ~@7 B ~@6 C ~@16 B ~@7 B ~@15 B ~@7 D ~@44>".pickRestart({
A: "~@11 x", B: "x", C: "~@47 x", D: "~ x ~@22",
})).gain(0.27)
// drums · cabasa
const cabasa = s("cabasa:4").struct("<~ [x!4]!2 [x!8]!5 ~@118>").gain(0.93)
// drums · cabasa · soft notes
const cabasa_soft = s("cabasa:4").struct("<~ [~ x ~ x ~ x ~ x]!2 ~@123>").gain(0.23)
stack(piano, bass, string_ensemble_2, celesta, epiano2, kick, rim, snare, hihat, open_hat, crash, cabasa, cabasa_soft)
More by Mariah Carey
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.