0:00/0:00
// So Close (Unplugged) — Hall & Oates
// 87 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// 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(87/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 · acoustic bass · "ACOU BASS"
const bass = note(`<
~@3 A B C D E F E G H I J K L M N O P Q H I J K L M N R A B C D S T U V P Q H I J K L M N R A B C D S T U V P Q W X Y
Z W AA AB AC AD AE AF AG AD AH AI AJ AK AL AM AN AO AP AQ AJ AK AL AM AJ AK AL AM AJ AK AL AM AJ AK AL AM AR@3
>`.pickRestart({
A: "g1@4 g2@2 a1@4 a2@2 e2@2 a1 ~", B: "f1@4 f2@2 g1@4 g1@2 ~ g1 d2 g1", C: "g1@3 ~ g1 ~ a1@4 a2@4 a1 ~",
D: "f1@4 f2@2 g1@4 g1 d2 g2 d2 g2 d2", E: "g1@4 g2@2 a1@4 a1@2 a2@2 a1 ~", F: "f1@4 f2@2 g1@4 g1@3 g2 d3 g2", G: "f1",
H: "c3@5 ~ c3@9 ~", I: "b2@5 ~ b2@7 ~ b2 ~", J: "a#2@5 ~ a#2@7 ~ a#2@2", K: "a2@6 f2@7 f1 f2 ~", L: "d2@5 ~ d2@9 ~",
M: "g1@5 ~ a1@6 a2@2 a1 ~", N: "d2@4 ~@2 e2@7 ~ e2@2", O: "a#1@7 ~", P: "c2@5 ~ c2@9 ~", Q: "c2@5 ~ c2@7 c3 g2 c2",
R: "d2@15 ~", S: "f1@4 f2 ~ c2@3 ~ c2@3 ~ c2@2", T: "g1@2 g2@2 g1 ~ a1@4 a2@4 a1 ~",
U: "f1@2 f1@2 f2@2 f1@3 ~ f1@2 a1@4", V: "g1@4 g2@2 g1@4 g2 d2 g1@2 ~@2", W: "f2@4 ~@2 f2@5 ~ f2 c2 f2 c2",
X: "f1@4 ~@2 f2@5 ~ f2@3 ~", Y: "c2@5 ~ c2@7 ~ c2 g1", Z: "c2@4 ~@2 c2@5 ~ c2 ~ e2 ~", AA: "f1@2 ~ f2@2 f1 f2 ~",
AB: "g1@5 ~ g1@4 g2 g1@2 g1 g2@2", AC: "a1@3 ~ a2@2 a1@2 ~ a1 a2@2 a1@2 a2 ~", AD: "g2@4 ~@2 g2@5 ~ g2 d2 g2 d2",
AE: "g1@4 ~@2 g2@5 ~ g2@3 ~", AF: "d2@5 ~ d2@7 ~ d2 a1", AG: "d2@4 ~@2 d2@5 ~ d2 ~ f#2 ~", AH: "g1@2 ~ g2@2 g1 g2 ~",
AI: "e2 e1 e2 e1 e2@2 f#1@4 f#2@2 f#1@2 f#2 ~", AJ: "a1@4 a2@2 b1@4 b2@2 f#2@2 b1 ~",
AK: "g1@4 g2@2 a1@4 a1@2 ~ a1 e2 a1", AL: "a1@3 ~ a1 ~ b1@4 b2@4 b1 ~", AM: "g1@4 g2@2 a1@4 a1 e2 a2 e2 a2 e2",
AN: "g1@4 g2 ~ d2@3 ~ d2@3 ~ d2@2", AO: "a1@2 a2@2 a1 ~ b1@4 b2@4 b1 ~", AP: "g1@2 g1@2 g2@2 g1@3 ~ g1@2 b1@4",
AQ: "a1@4 a2@2 a1@4 a2 e2 a1@2 ~@2", AR: "[a1 a2 a1 a2!2 ~ b1@27 ~@15]/3",
})).s("gm_acoustic_bass").gain(0.64)
// chords · epiano1 · "E.PIANO 2"
const epiano1 = note(`<
~ A@2 B C B C D C E F G H I J K L M N O@2 G H I J P Q R S B C B C T U V W O@2 G H I J P Q R S B C B C T U V W O@2 X@2
Y Z AA@2 AB AC AD@2 AE AF AG@2 AH AI AJ AI AJ AK AL AM AN AI AJ AI AJ AI AJ AI AJ AI AJ AI AJ AI AJ AI AJ AO@2 ~
>`.pickRestart({
A: "c4 ~ c4!3 ~ c4 ~ c4 ~ c4 ~ c4!4", B: "[g3,d4,g4,b4,d5]@3 [a3,e4,a4,c5,e5]@5",
C: "[f3,c4,f4,a4,c5]@6 [g3,d4,g4,b4,d5]@9 ~", D: "[g3,d4,g4,b4,d5]@6 [a3,e4,a4,c5,e5]@9 ~",
E: "[g3,d4,g4,b4,d5]@5 ~ [a3,e4,a4,c5,e5]@10", F: "[f2,f3,a3,c4]@15 ~",
G: "[c4,e4,g4]@3 c4@2 ~@2 c4, ~@6 [e4,g4]@5 e4@2 e4@3, ~@5 c4@2 ~, ~@3 g4", H: "b3@11 ~@3 d4@2, g4, d4@7 ~, ~@3 b3",
I: "[a#3,d4,g4]", J: "[a3,c4,g4]@6 [f3,a3,c4]@9 ~", K: "[d4,a4]@5 d4@3", L: "[g3,b3,d4]@5 ~ [a3,c4,e4]@10",
M: "[d4,f4,a4]@3 [e4,g4,b4]@5", N: "[a#3,d4,f4]@7 ~", O: "[c3,c4,e4,g4]@5 ~ [c3,c4,d4,g4]@9 ~",
P: "[d4,a4]@4 ~@6 d4@3 ~@3", Q: "[g3,b3,d4] ~@2 [a3,c4,e4]@3 ~@2", R: "[d4,f4,a4]@2 ~ [e4,g4,b4]@2 ~@3",
S: "[d3,a3,c4,d4,f4]@15 ~", T: "a3 ~ [c4,f4] e4@2 [e4,g4]@3, f2@3 [c3,g3,c4]@5, [c4,f4] ~@3, ~ a3@2 ~@5",
U: "g3 ~ [a3,d4] ~@2 [a4,c5,e5]@2 ~, [g2,b3]@3 [a2,a3,c4,e4]@4 ~, d4 ~@3, ~ g3@2 ~@5", // D5 Am G Am
V: "[f3,c4]@2 [f3,c4,g4,c5] [f3,c4,g4,c5]@3 [a3,c4,e4]@2, [f4,a4]@3 ~@5", // F5 Fsus2 Am F
W: "[g3,b3,d4]@4 [g3,b3,d4]@9 ~@3, g2@13 ~@3", X: "[c4@7 ~@5 e5@4, [f3,a3,e4], ~@7 c4@2 c4@7, ~ a4, ~@5 b4@3]/2",
Y: "[c3,e3,g3,b3,d4]@3 [c3,g3,c4,e4]@5", Z: "[b3,e4]@3 ~@3 d4@2, [c3,g3], ~@3 [c4,e4,g4]@5",
AA: "[c4@5 ~@6 c4 ~@2 a4 ~, [f3,a3]@15 ~, e4@6 e4@6 ~ c4@2 ~, ~@5 c4@2 c4@2 c4 e5@2 d5@3 ~, ~@2 b4 ~]/2", // F
AB: "~@5 a4@3, [g2,g3,a#3,d4], ~@3 [g4,a#4]@5", AC: "[a2,e3,g3,c4,e4]@3 [a2,a3,c4,e4]@3 ~@2",
AD: "[d4@7 ~@5 f#5@4, [g3,b3,f#4], ~@7 d4@2 d4@7, ~ b4, ~@5 c#5@3]/2", AE: "[d3,f#3,a3,c#4,e4]@3 [d3,a3,d4,f#4]@5",
AF: "[c#4,f#4]@3 ~@3 e4@2, [d3,a3], ~@3 [d4,f#4,a4]@5", // F#5 D5 D
AG: "[d4@5 ~@6 d4 ~@2 b4 ~, [g3,b3]@15 ~, f#4@6 f#4@6 ~ d4@2 ~, ~@5 d4@2 d4@2 d4 f#5@2 e5@3 ~, ~@2 c#5 ~]/2", // G
AH: "[e3,b3,d4,g4]@3 [c#4,f#4,a4]@3 [c#4,f#4,a4] ~, ~@3 [c#3,f#3,a3]@4 ~", // Em7 F#m
AI: "[a3,e4,a4,c#5,e5]@3 [b3,f#4,b4,d5,f#5]@5", AJ: "[g3,d4,g4,b4,d5]@6 [a3,e4,a4,c#5,e5]@9 ~",
AK: "b3 ~ [d4,g4] f#4@2 [f#4,a4]@3, g2@3 [d3,a3,d4]@5, [d4,g4] ~@3, ~ b3@2 ~@5", // G5 F#m D5 G5
AL: "a3 ~ [b3,e4] ~@2 [b4,d5,f#5]@2 ~, [a2,c#4]@3 [b2,b3,d4,f#4]@4 ~, e4 ~@3, ~ a3@2 ~@5", // E5 Bm A Bm
AM: "[g3,d4]@2 [g3,d4,a4,d5] [g3,d4,a4,d5]@3 [b3,d4,f#4]@2, [g4,b4]@3 ~@5", // G5 Gsus2 Bm G
AN: "[a3,c#4,e4]@4 [a3,c#4,e4]@9 ~@3, a2@13 ~@3", AO: "[[a2,a3,c#4,e4]@3 [b2,b3,d4,f#4]@13]/2",
})).s("gm_epiano1").gain(0.64)
// chords · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note(`<
~ A B C D E D E F G H ~ I J K ~ L M N O@2 ~ I J K ~ L M P C D E D Q R S T O@2 ~ I J K ~ L M P C D E D Q R S T O@2 U@2
V@2 W@2 X Y Z@2 AA@2 AB@2 AC AD C AE C AF AG AH AI AD C AE C AD C AE C AD C AE C AD C AE C AJ@3
>`.pickRestart({
A: "c4 ~ c4!3 ~ c4 ~ c4 ~ c4 ~ c4!4", B: "c4 ~@2 c4!2 ~ c4 ~ c4 ~ c4 ~ c4!4", C: "[g2,d3]@6 [a2,e3]@9 ~",
D: "[f2,c3]@6 [g2,d3]@9 ~", E: "[g2,d3]@5 ~ [a2,e3]@9 ~", F: "[f2,c3]@5 ~ [g2,d3]@9 ~", G: "[g2,d3]@5 ~ [a2,e3]@10",
H: "[f2,c3]@15 ~", I: "~@3 b3@4 ~", J: "~@4 d4@11 ~", K: "~ d4@2 e4@2 ~@3", L: "g3@4 d4 ~ a3@8 ~@2",
M: "[d4,f4]@5 ~ [e4,g4]@7 ~@3", N: "[d4,c5]@15 ~, f4 ~@15", O: "[c3,g3]@5 ~ [c3,g3]@9 ~", P: "[d4,f4,a4,c5]@15 ~",
Q: "[f2,c3]@3 [c3,g3]@5", R: "[g2,d3]@3 [a2,e3]@4 ~", S: "[f2,c3,f3]@11 ~ [a2,e3,a3]@4", T: "[g2,d3,g3]@13 ~@3",
U: "[[f2,c3,f3]@21 ~ [f2,c3,f3,a3] ~@3 [f2,c3,f3]@4 ~@2]/2", V: "[c3@17 ~ c3 ~ c3@4 c3@2 ~@2 c3@4, g3@13 g3@3]/2",
W: "[[f2,c3]@5 ~@13 f3@12 ~@2, f3@9 ~@7, ~@3 f2@12 ~]/2", X: "[g2,d3,g3]!4",
Y: "[a2,e3,a3]@2 [a2,e3,a3] ~ [a2,e3,a3]@2 [a2,e3,a3]@2 [a2,e3,a3]@2 [a2,e3,a3]@2 [a2,e3,a3]@2 ~@2", // A5
Z: "[[g2,d3,g3]@21 ~ [g2,d3,g3,b3] ~@3 [g2,d3,g3]@4 ~@2]/2", AA: "[d3@17 ~ d3 ~ d3@4 d3@2 ~@2 d3@4, a3@13 a3@3]/2",
AB: "[[g2,d3]@5 ~@13 g3@12 ~@2, g3@9 ~@7, ~@3 g2@12 ~]/2", AC: "[e2,b2,e3]@6 [f#2,c#3,f#3]@6 [f#2,c#3,f#3] ~@3",
AD: "[a2,e3]@6 [b2,f#3]@9 ~", AE: "[a2,e3]@5 ~ [b2,f#3]@9 ~", AF: "[g2,d3]@3 [d3,a3]@5", AG: "[a2,e3]@3 [b2,f#3]@4 ~",
AH: "[g2,d3,g3]@11 ~ [b2,f#3,b3]@4", AI: "[a2,e3,a3]@13 ~@3", AJ: "[[a2,e3]@2 [f#3,a3,d4]@9 ~@5]/3",
})).s("gm_acoustic_guitar_steel").gain(0.53)
// chords · acoustic guitar steel · "STEEL GTR" · soft notes
const acoustic_guitar_steel_2 = note(`<
~@2 A ~@8 B C D E F G ~ H ~@2 B C D E F G ~@12 B C D E F G ~@26 I ~@27
>`.pickRestart({
A: "~@2 c4 ~@13", B: "~@6 g4@9 ~, ~@2 c4@13 ~, ~@4 e4@11 ~", C: "~@4 d4@11 ~, ~@2 g4@13 ~",
D: "~@3 f4@4 ~, ~@2 a#3@13 ~", E: "~@5 c4@2 ~", F: "~@3 a4@4 ~, ~ d4@6 ~, ~@2 f4@5 ~", G: "~@2 b3@3 ~@11",
H: "a#3@7 ~", I: "~@2 f#2 ~@5",
})).s("gm_acoustic_guitar_steel").gain(0.33)
// chords · rock organ · "ORGAN 3"
const rock_organ = note(`<
~@3 A B@2 C@2 D@2 E F@2 G H I J K L M@2 F@2 G H I J K ~ A B@2 N O P Q R M@2 F@2 G H I J K ~ A B@2 N O P Q R M@2 S@2
~@2 T@2 U V W@2 ~@2 X@2 Y Z AA@2 AB AC AD AE AF Z AA@2 AB AG AA@2 AB AG AA@2 AB AG AA@2 AB AH@2 ~
>`.pickRestart({
A: "[b4,d5]@3 [c5,e5]@5, g5", B: "[[a4,c5,g5]@6 [b4,d5,g5]@16 [c5,e5,g5]@9 ~]/2",
C: "[[a4,c5,g5]@6 [b4,d5,g5]@15 ~ [c5,e5,g5]@10]/2", D: "[[a4,c5,g5]@3 [b4,d5,g5]@8 [c5,e5,g5]@5]/2",
E: "[f4,a4,c5,g5]", F: "[[c4,e4]@15 ~ [b3,d4]@16, g4]/2", G: "[a#3,d4,g4]", H: "[a3,c4,g4]@3 [f3,a3,c4]@5",
I: "[d4,f4]", J: "[g3,b3,d4]@3 [a3,c4,e4]@5", K: "[d4,f4]@5 ~ [e4,g4]@10", L: "[f3,a#3,d4]@15 ~", M: "[e4,g4,c5]/2",
N: "[a4,c5,g5]@3 [b4,d5,g5]@5", O: "[f4,f5]@3 [c5,e5]@5", P: "[g4,b4,d5]@6 [a4,c5,e5]@9 ~", Q: "[f4,a4,c5]@3 a4",
R: "[g3,d4]@7 ~", S: "[a4,c5,e5,g5]/2", T: "[[f4,a4,c5,e5,g5]@31 ~]/2", U: "[g3,d4,g4,a#4,d5]",
V: "[a3,e4,g4,c5,e5]@7 ~", W: "[b4,d5,f#5,a5]/2", X: "[[g4,b4,d5,f#5,a5]@31 ~]/2",
Y: "[e3,g3,b3,e4,g4]@6 ~@6 [c#5,f#5,a5]@3 ~, ~@6 [c#3,a3,c#4,f#4,a4]@9 ~", Z: "[c#5,e5]@3 [d5,f#5]@5, a5",
AA: "[[b4,d5,a5]@6 [c#5,e5,a5]@16 [d5,f#5,a5]@9 ~]/2", AB: "[b4,d5,a5]@3 [c#5,e5,a5]@5", AC: "[g4,g5]@3 [d5,f#5]@5",
AD: "[a4,c#5,e5]@6 [b4,d5,f#5]@9 ~", AE: "[g4,b4,d5]@3 b4", AF: "[a3,e4]@7 ~",
AG: "~@3 [d5,f#5]@5, [c#5,e5,a5]@5 ~@3", AH: "[~@6 d5@25 ~, [c#5,a5]@5 ~@11]/2",
})).s("gm_rock_organ").gain(0.4)
// other · tubular bells · "TUBULARBEL"
const tubular_bells = note(`<
~@19 A@2 ~@14 B C A@2 ~@14 B C A@2 D E F ~@2 G H I J K L ~@2 M N ~@6 O P ~@16 Q ~@2
>`.pickRestart({
A: "[e5,e6]@5 ~ [d5,d6]@8 ~@2", B: "[e5,e6]@2 ~@2 d6@2 ~@2 [c5,c6] ~@3 [e5,e6] ~@3, ~@4 d5 ~@11", C: "[d5,d6]@3 ~@5",
D: "e5 ~ d5 ~ c5 ~@11", E: "e6 ~@3 d6 ~@3 c6 ~@3 d6 ~@3", F: "b5 ~@15",
G: "[g5,g6]@3 ~ [f5,f6]@3 ~ [e5,e6]@3 ~ [c5,c6]@3 ~", H: "d5@3 ~ g5@3 ~ a5@3 ~ a#5 ~@3, d6@9 ~@7",
I: "a5@2 ~@2 c6 ~@3 e6@4 ~@4", J: "f#5 ~ e5 ~ d5 ~@11", K: "f#6 ~@3 e6 ~@3 d6 ~@3 e6 ~@3", L: "c#6 ~@15",
M: "[a5,a6]@3 ~ [g5,g6]@3 ~ [f#5,f#6]@3 ~ [d5,d6]@3 ~", N: "[e4,e5]@4 ~@2 f#5 ~@3 a5 ~@5",
O: "[f#5,f#6]@2 ~@2 e6@2 ~@2 [d5,d6] ~@3 [f#5,f#6] ~@3, ~@4 e5 ~@11", P: "[e5,e6]@3 ~@5", Q: "[a4,a5]@5 ~ [b4,b5]@10",
})).s("gm_tubular_bells").gain(0.43)
// drums · kick
const kick = s("bd").struct(`<
~ A B A C A C A C A D A@9 C A@9 C A C A C E F A C A@7 D A C A C A C E F@2 C A@6 G@2 A@6 H A C A C A C E F A C A C A C
E F A C A C A C E F I ~@2
>`.pickRestart({
A: "x ~@2 x ~@3 x", B: "x ~@2 x ~@2 x ~", C: "x ~@2 x ~ x ~ x", D: "x", E: "x ~@5 x ~@3 x!2 ~@2 x ~",
F: "x ~@2 x ~@2 x ~@3 x ~@3 x ~", G: "x ~@5 x!2 ~@6 x ~", H: "x ~@5 x ~@7 x!2", I: "x ~@3 x!3 ~@9",
})).gain(0.67)
// drums · snare
const snare = s("sd").struct(`<
~@3 A@6 B ~@8 C A@2 ~@7 D A@7 E A@8 F G A@7 E A H A@6 I@2 A@6 J A@7 E A@7 E A@7 E K ~@2
>`.pickRestart({
A: "~ x ~ x", B: "~@4 x ~@7 x!2 ~@2", C: "~@3 x", D: "~@14 x!2", E: "~@2 x ~@4 x", F: "~@4 x ~@7 x ~ x!2",
G: "~@10 x ~@3 x!2", H: "~@4 x ~@5 x ~ x!2 ~ x", I: "~@2 x ~@3 x!2", J: "~@2 x ~@2 x!2 ~", K: "~@3 x!2 ~@11",
})).gain(0.67)
// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
~@9 A ~@18 B ~@7 C ~@8 D E ~@7 C ~ F ~@6 G H ~@6 I ~@7 C ~@7 C ~@7 C J ~@2
>`.pickRestart({
A: "~@11 x ~@4", B: "~@10 x!4 ~@2", C: "~@11 x!3 ~@2", D: "~@9 x!3 ~ x ~@2", E: "~@12 x!2 ~@2", F: "~@8 x!2 ~@6",
G: "~@15 x", H: "~@13 x ~ x", I: "~@2 x!2 ~@5 x ~@6", J: "~ x!2 ~@13",
})).gain(0.2)
// drums · low tom
const low_tom = s("lt").struct("<~@2 A ~@6 B ~@8 A ~@17 C ~@17 C ~@16 C ~@7 C ~@7 C ~@7 C D ~@2>".pickRestart({
A: "~@3 x", B: "~@14 x!2", C: "~@7 x", D: "~ x ~@2",
})).gain(0.67)
// drums · hihat
const hihat = s("hh").struct("<~ A B C@7 A C@6 D E C@9 A C@17 F C@49 G ~@2>".pickRestart({
A: "~ x ~ x", B: "~@4 x ~@5 x!2 ~@4", C: "x!4", D: "x ~@3 x ~@3 x ~@4 x ~ x", E: "~ x ~@2", F: "x!2 ~ x",
G: "x ~@2 x ~ x ~@10",
})).gain(0.67)
// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
~@3 A B A B A B A ~ A@6 C ~ A B A@6 D ~ A B A B A B A B A B A@7 ~ A B A B A B A B A B A@16 B A B A B A B A B A B A B A
B A B A B A B A B E ~@2
>`.pickRestart({
A: "~ x ~ x ~ x ~ x", B: "~ x ~ x ~ x ~@2", C: "~ x ~ x ~ x!3", D: "~@2 x ~@3 x ~@3 x ~@3 x!2", E: "~ x ~@14",
})).gain(0.2)
// drums · mid tom
const mid_tom = s("mt").struct(`<
~ A B ~@6 C ~@12 C ~ C ~ C ~ C ~@7 C ~@3 C ~ C ~ C ~@9 C ~@3 C ~ C ~ C ~ C ~ C ~ C ~ C@2 ~@7 C ~@7 C ~@7 C ~@3
>`.pickRestart({
A: "~@5 x ~@2", B: "~@11 x ~@4", C: "~@3 x",
})).gain(0.67)
// drums · open hat
const open_hat = s("oh").struct(`<
A ~ B ~ C ~ C ~ C ~@9 D ~ C ~@7 D ~ C ~ C ~ C ~ C ~ C ~@9 C ~ C ~ C ~ C E C ~@6 F ~@7 G ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~
C ~ C ~ C ~ C ~ C H ~@2
>`.pickRestart({
A: "~@5 x ~ x", B: "~@3 x", C: "~@7 x", D: "x", E: "~@15 x", F: "~@7 x ~@8", G: "~@9 x ~@3 x ~@2", H: "~ x!3 ~@4",
})).gain(0.67)
// drums · high tom
const high_tom = s("ht").struct("<~ A B ~@6 C ~@26 D ~@17 D ~@16 E ~@7 D ~@7 D ~@7 D F ~@2>".pickRestart({
A: "x ~@2 x ~@2 x ~", B: "x ~@2 x ~ x ~@2", C: "~@5 x ~@2", D: "~@15 x", E: "~@10 x ~@2 x ~@2", F: "~@2 x!2 ~@12",
})).gain(0.67)
// drums · crash
const crash = s("cr").struct(`<
~@3 A@7 B ~@7 B A@2 ~@7 B A@7 B A@2 B ~@6 B A@7 B A@2 B ~@3 B ~@3 B ~@3 B ~ C A@7 B A@7 B A@7 B A ~@2
>`.pickRestart({
A: "x ~@2 x ~@4", B: "x", C: "~@3 x ~@4",
})).gain(0.67)
// drums · ride
const ride = s("rd").struct("<~@3 A@7 ~@9 A@2 ~@8 A@10 ~@8 A@10 ~@15 A@24 B ~@2>".pickRestart({
A: "x!8", B: "x!4 ~@4",
})).gain(0.67)
// drums · cabasa
const cabasa = s("cabasa:4").struct(`<
~ A B C@7 ~@9 C@2 D ~ D ~ D ~ D ~ C@10 D ~ D ~ D ~ D ~ C@10 D ~ D ~ D ~ D ~ D ~ D ~ D ~ D C@24 E ~@2
>`.pickRestart({
A: "~@3 x ~@4", B: "x!2 ~@3 x!3", C: "x!16", D: "~@10 x!3 ~@3", E: "x!7 ~@9",
})).gain(1.02)
// … 5 more lines
More by Hall & Oates
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.