0:00/0:00
// Rich Girl — Hall & Oates
// 85 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 3 "Track 3" synth bass 1 (copy of ch 2 "Track 2" epiano2)
// note: Full arrangement: all 56 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(85/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 · "Track 1"
const piano = note("<~@11 A B C D A E F ~@9 A G C D A E H@2 ~@21>".pickRestart({
A: "~@14 [a3,e4] ~", B: "[a3,d4]@5 ~@11", C: "~@6 [a3,c4] ~", D: "[a3,d4] ~@7", E: "[a3,d4]@4 ~@10 [a3,e4] ~",
F: "[a3,d4] ~ [g3,c4]@2", G: "[a3,d4] ~@3", H: "[[a3,d4] ~ [g3,c4]@3 ~@3]/2",
})).s("gm_piano").gain(0.48)
// chords · epiano2 · "Track 2"
const epiano2 = note(`<
~ A B C D A B C E ~ F@4 G@3 H@2 I J K L I J K M@4 N@3 O@2 I J K L I J K P Q R S T I J K L I J K U@2
>`.pickRestart({
A: "~@4 a4 g4 ~@6 [e4,g4] ~@3, f3@3 ~ a3@3 ~, ~@2 f4 ~@5", // Em
B: "~@4 [a4,c5] [a4,d5] ~@6 [a4,c5] [a4,d5] ~@2, d3@7 ~ c3@6 ~@2, ~ d4@2 ~@2 c4@2 ~", // Am D5 Am D5
C: "~@2 bb3@2 [f4,bb4] bb2@2 ~@5 [f4,a4] ~@3, bb2@5 ~@3 a2@6 ~@2, ~@5 a3@2 ~", // Bb5 F
D: "~@4 [d4,g4] ~@3 c3@2 [c3,c4,f4] ~ [c3,c4,f4]@3 ~, g2@3 ~@5, ~ g3@2 ~@5", // G5 F5
E: "~@4 [d4,g4] ~@3 f2@2 ~@6, g2@3 ~@5, ~ g3@2 ~@5", // G5
F: "[~@4 [c4,f4] ~ [c4,g4] ~ [f4,a4]@12 ~@2 [a3,e4] ~ [g3,d4]@14 ~@2 [g3,c4]@19 ~ [a3,c4]@3 ~]/4", // F5 C5 F A5 G5 C5 Am
G: "[[a3,d4]@2 ~@2 [c4,f4] ~ [c4,g4] ~ [f4,a4]@12 ~@2 [a3,e4] ~ [a3,d4]@13 ~ [a3,e4] ~ [a3,d4]@5 ~ [a3,e4] ~]/3", // D5 F5 C5 F A5 D5 A5 D5 …
H: "[[a3,d4]@6 e4 ~ [g3,c4]@12 ~@8 a4 g4 ~@2, ~@12 f3@3 ~, ~@14 f4 ~]/2", // D5 C5
I: "~@4 [e4,g4] ~@7 [a4,c5] [a4,d5] ~@2, a3@6 ~@2 d3@7 ~, ~@5 d4@2 ~", // Em Am D5
J: "~@4 [a4,c5] [a4,d5] ~@4 bb3@2 [f4,bb4] bb2@2 ~, c3@6 ~@2 bb2@5 ~@3, ~ c4@2 ~@5", // Am D5 Bb5
K: "~@4 [f4,a4] ~@7 [d4,g4] ~@3, a2@3 ~ g2@3 ~, ~ a3@2 ~@2 g3@2 ~", // F G5
L: "c3@2 [c3,c4,f4] ~ [c3,c4,f4]@3 ~@5 a4 g4 ~@2, ~@4 f3@3 ~, ~@6 f4 ~", // F5
M: "[f2@2 ~@2 [c4,f4] ~ [c4,g4] ~ [f4,a4]@11 ~@3 [a3,e4] ~ [g3,d4]@15 ~ [g3,c4]@18 ~@2 [a3,c4]@3 ~]/4", // F5 C5 F A5 G5 C5 Am
N: "[d4@2 ~@2 [c4,f4] ~ [c4,g4] ~ [f4,a4]@11 ~@3 [a3,e4] ~ [a3,d4]@13 ~ [a3,e4] ~ [a3,d4]@5 ~ [a3,e4] ~, a3 ~@47]/3", // F5 C5 F A5 D5 A5 D5 A5
O: "[[a3,d4]@6 ~@2 [g3,c4]@13 ~@7 a4 g4 ~@2, ~@12 f3@3 ~, ~@14 f4 ~]/2", // D5 C5
P: "[a3,d4]@3 ~ [g3,c4]@3 ~@3 bb3@2 [f4,bb4] bb2@2 ~, ~@2 bb2 ~", // D5 C5 Bb5
Q: "~@2 a3@2 [e4,a4] a3 ~@6 [d4,g4] ~@3, a2@3 ~ g2@3 ~, ~@5 g3@2 ~", // A5 G5
R: "f2@2 ~@2 [a3,d4] ~ [g3,c4] ~@3 bb3@2 [f4,bb4] bb3 ~@2, ~@8 bb2@5 ~@3", // D5 C5 Bb5
S: "~@4 [e4,a4] ~@7 [d4,g4] ~@3, a2@6 ~@2 g2@7 ~, ~ a3@2 ~@2 g3@2 ~", // A5 G5
T: "[g3,c4]@3 ~ [a3,d4]@3 ~@5 a4 g4 ~@2, ~@4 f3@3 ~, ~@6 f4 ~", U: "[[g3,c4]@3 ~ [a3,d4]@3 ~ [f3,c4]@12 ~@12]/2",
})).s("gm_epiano2").gain(0.64)
// chords · drawbar organ · "Track 4"
const drawbar_organ = note(`<
~ A B C D A B C E ~@9 F G H I J G H I K ~@7 F G H I J G H I L M N O P G H I J G H I Q@2
>`.pickRestart({
A: "~@4 a4 g4 ~@6 [e4,g4] ~@3, f3@3 ~ a3@3 ~, ~@2 f4 ~@5", // Em
B: "~@4 [a4,c5] [a4,d5] ~@6 [a4,c5] [a4,d5] ~@2, d3@7 ~ c3@6 ~@2, ~ d4@2 ~@2 c4@2 ~", // Am D5 Am D5
C: "~@2 bb3@2 [f4,bb4] bb2@2 ~@5 [f4,a4] ~@3, bb2@5 ~@3 a2@6 ~@2, ~@5 a3@2 ~", // Bb5 F
D: "~@4 [d4,g4] ~@3 c3@2 [c3,c4,f4] ~ [c3,c4,f4]@3 ~, g2@3 ~@5, ~ g3@2 ~@5", // G5 F5
E: "~@4 [d4,g4] ~@3 f2@2 ~@6, g2@3 ~@5, ~ g3@2 ~@5", F: "~@12 a4 g4 ~@2, ~@4 f3@3 ~, ~@6 f4 ~",
G: "~@4 [e4,g4] ~@7 [a4,c5] [a4,d5] ~@2, a3@6 ~@2 d3@7 ~, ~@5 d4@2 ~", // Em Am D5
H: "~@4 [a4,c5] [a4,d5] ~@4 bb3@2 [f4,bb4] bb2@2 ~, c3@6 ~@2 bb2@5 ~@3, ~ c4@2 ~@5", // Am D5 Bb5
I: "~@4 [f4,a4] ~@7 [d4,g4] ~@3, a2@3 ~ g2@3 ~, ~ a3@2 ~@2 g3@2 ~", // F G5
J: "c3@2 [c3,c4,f4] ~ [c3,c4,f4]@3 ~@5 a4 g4 ~@2, ~@4 f3@3 ~, ~@6 f4 ~", K: "f2 ~@7",
L: "[f2,a3,d4]@3 ~ [g3,c4]@3 ~@3 bb3@2 [f4,bb4] bb2@2 ~, ~@2 bb2 ~", // Dm C5 Bb5
M: "~@2 a3@2 [e4,a4] a3 ~@6 [d4,g4] ~@3, a2@3 ~ g2@3 ~, ~@5 g3@2 ~", // A5 G5
N: "f2@2 ~@2 [a3,d4] ~ [g3,c4] ~@3 bb3@2 [f4,bb4] bb3 ~@2, ~@8 bb2@5 ~@3", // D5 C5 Bb5
O: "~@4 [e4,a4] ~@7 [d4,g4] ~@3, a2@6 ~@2 g2@7 ~, ~ a3@2 ~@2 g3@2 ~", // A5 G5
P: "[g3,c4]@3 ~ [a3,d4]@3 ~@5 a4 g4 ~@2, ~@4 f3@3 ~, ~@6 f4 ~", Q: "[[f2,g3,c4]@3 ~ [a3,d4]@3 ~ [f3,c4]@12 ~@12]/2",
})).s("gm_drawbar_organ").gain(0.14)
// bass · electric bass finger · "Track 5"
const bass = note(`<
~@10 A B C D E B F G H I J K L I J M N B C D E B F G H I J K L I J M O K P Q R I J S R I J K T ~
>`.pickRestart({
A: "~@4 d2 ~ c2 ~ bb1@4 f2 ~ g2 a2", B: "bb2@3 f2 bb2 ~ a2 ~ g2@4 d2@2 f2 d2", C: "g1@4 g2@2 d2 ~ c2@2 ~@2 c2@2 ~@2",
D: "c2@2 g1 a1 c2 ~ g1 ~ g1@2 ~@2 a1@2 ~@2", E: "d2@2 ~@2 d2@2 a1 ~ bb1@4 f2 ~ g2 a2",
F: "g1@3 ~ g1@2 d2@2 g1@2 ~@2 g1@2 d2@2", G: "g1 ~ g1 d2 c2 ~ c2 ~", H: "c2@2 ~@2 c2@2 ~@2 f1 ~ f1@2 ~@2 f1 g1",
I: "a1 ~ a1@2 ~@2 a1 ~ d2 ~ d2@2 ~@2 d2 ~", J: "c2 ~ c2@2 ~@2 a1@2 bb1 ~ bb1@2 ~@2 bb1 ~",
K: "a1 ~ a1@2 ~@2 a1 ~ g1 ~ g1@2 ~@2 g1 ~", L: "c2@2 ~@2 d2@2 ~@2 f1 ~ f1@2 ~@2 f1 g1",
M: "a1 ~ a1@2 c2@2 d2 ~ g1 ~ g1@4 ~@2", N: "f1 ~@3 d2 ~ c2 ~ bb1@4 f2 ~ g2 a2",
O: "d2@3 ~ c2@2 ~@2 bb1 ~ bb1@2 ~@2 bb1 ~", P: "f1@2 ~@2 d2@2 c2 ~ bb1 ~ bb1@2 ~@2 bb1 ~",
Q: "a1 ~ a1@3 ~ a1 ~ g1 ~ g1@2 ~@2 g1 ~", R: "c2@3 ~ d2@3 ~ f1 ~ f1@2 ~@2 f1 g1",
S: "a1 ~ a1@2 ~@2 a1 ~ g1 ~ g1@3 ~ g1 ~", T: "c2@3 ~ d2@3 ~ f1@8",
})).s("gm_electric_bass_finger").gain(0.72)
// other · sitar · "Track 6"
const sitar = note(`<
~@8
[~@8 f3 ~ f3!2 ~ f3 ~ f3]
[~ f3 ~ f3!2 ~ f3 ~ f3 ~ f3!2 ~ f3 ~ f3]
[~ f3 ~ f3!2 ~ f3 ~@9]
~@45
>`).s("gm_sitar").gain(0.6)
// other · string ensemble 1 · "Track 8"
const string_ensemble_1 = note(`<
~@10 A@4 B C@2 D E F G@2 H F I J K@4 L M@2 N@2 F G@2 H F I O P@2 Q@2 R F G@2 H F I O S@2
>`.pickRestart({
A: "[~@4 d5 [f5,g5] [a5,bb5] c6 f5@14 d5@2 f5@16 ~@10 f5 ~ a5 g5 f5 ~ [g4,bb4]@3 ~ [a4,c5]@3 ~, ~@40 [a4,c5]@15 ~@9]/4", // Fsus2 Bbmaj7 Gm Am
B: "[a4,d5]@2 ~@2 d5 ~ e5 ~ f5@7 ~", C: "[a5@2 g5@2 f5@2 g5@2 f5@10 c5 d5 f5@2 c5 ~ f5@6 c5 d5]/2",
D: "f5@6 c5 d5 f5 g5 a5 g5@5", E: "~@3 g5@2 f5 d5 ~ f5@7 ~, ~ a5 ~@6", F: "f5 ~ d5 ~ c5 ~ d5 ~ d5@7 ~",
G: "[c5 d5 f5 ~ a5 ~ a5 ~ f5@13 ~ g5 a5 f5@8]/2", H: "c5@4 d5@3 ~ f5@7 ~",
I: "c5 d5 f5 ~ a5 ~ a5 ~ f5 g5 f5 ~@3 c6 d6", J: "c6 ~@3 a5 bb5 c6 ~ f5@5 ~ d5 ~",
K: "[f5 ~@3 d5 ~ e5 ~ f5@14 d5@2 f5@16 ~@10 f5 ~ a5 g5 f5 ~ [g4,bb4]@3 ~ [a4,c5]@3 ~, ~@40 [a4,c5]@15 ~@9]/4", // Gm Am
L: "[a4,d5] ~@3 d5 ~ e5 ~ f5@7 ~", M: "[a5@2 g5@2 f5@2 g5@2 f5@10 c5 d5 f5 ~ d5 ~ f5@6 c5 d5]/2",
N: "[f5@6 c5 d5 f5 g5 a5 g5@7 ~ g5@2 f5 d5 ~ f5@7 ~, ~@9 a5 ~@6]/2", O: "c6 ~@3 a5 bb5 c6 ~ f5@5 ~@3",
P: "[~@2 a5 bb5 c6 d6 f6 ~ f6@13 ~ f6 g6 f6@7 ~]/2", Q: "[f6 ~@3 a5 ~ g5 ~ f5@13 ~ g5 a5 f5@7 ~]/2",
R: "c6@3 ~ d6@3 ~ f5@7 ~", S: "[c5 ~ d5 ~ [c5,f5]@6 ~@6]/2",
})).s("gm_string_ensemble_1").gain(0.38)
// chords · cello · "Track 9"
const cello = note("<~@18 A ~ B ~ C ~ B ~@9 A ~ B ~ A ~ B ~@5 A ~ B ~ A ~ B ~@3>".pickRestart({
A: "~@12 [f4,c5] ~ bb4 a4, ~@7 f4", B: "~@4 [f4,c5] ~ bb4 a4 ~@8, ~@3 f4 ~@4", C: "~@12 [e4,f4,c5] ~ bb4 a4, ~@7 f4",
})).s("gm_cello").gain(0.64)
// drums · kick
const kick = s("bd").struct(`<
~@8 A B C D@3 E D F G H D@3 I D@3 J D@3 E D F G H D@3 I D@3 I D J D I D@3 I D@3 I ~
>`.pickRestart({
A: "~@2 x!2", B: "x!2 ~ x", C: "~ x ~@6 x ~@7", D: "x ~@2 x ~@2 x ~ x ~@7", E: "~@3 x ~@2 x ~ x ~@7",
F: "x ~@2 x ~@2 x ~ x ~@5 x ~", G: "x ~@2 x!3 ~ x", H: "x!2 ~ x!2 ~@3", I: "x!3 ~", J: "x ~ x!3 ~@3",
})).gain(0.71)
// drums · snare
const snare = s("sd").struct(`<
~@9 A B C@3 D C@3 E C@3 F C@3 G C@3 D C@3 E C@3 F C@3 F C G C F C@3 F C@3 ~@2
>`.pickRestart({
A: "~@15 x", B: "x ~@2 x!4 ~@5 x ~@3", C: "~ x ~ x", D: "x!2 ~ x", E: "~@4 x!2 ~@6 x ~@3", F: "~@3 x",
G: "~@2 x!2 ~@2 x ~",
})).gain(0.71)
// drums · clap
const clap = s("cp").struct("<~@8 [~@3 x] [x ~ x!2 ~@2 x ~] ~@46>").gain(0.71)
// drums · hihat
const hihat = s("hh").struct(`<
A@13 B A@2 C ~ D A@3 D A@3 D A@2 B A@2 C ~ D A@3 D A@3 D A D A D A@3 D A@3 ~@2
>`.pickRestart({
A: "x!4", B: "x ~@3 x ~@3 x ~@3 x ~@2 x", C: "x!2 ~@2", D: "~@2 x!2",
})).gain(0.71)
// drums · mid tom
const mid_tom = s("mt").struct("<~@9 [~@5 x ~@2] ~@46>").gain(0.71)
// drums · open hat
const open_hat = s("oh").struct(`<
~@13 A ~@2 B C D E@3 D E@3 ~@3 A ~@2 B C D E@3 D E@3 D E D E D E@3 D E@3 ~@2
>`.pickRestart({
A: "~@7 x", B: "~@3 x ~@3 x", C: "~@3 x ~@4", D: "~@5 x ~ x", E: "~ x ~ x ~ x ~ x",
})).gain(0.71)
// drums · high tom
const high_tom = s("ht").struct("<~@9 [~ x] ~@46>").gain(0.71)
// drums · crash
const crash = s("cr").struct("<~@22 A ~@15 A ~@3 A ~@3 A ~@3 A ~@3 B ~>".pickRestart({
A: "x!2 ~@2", B: "x!3 ~",
})).gain(0.71)
// drums · tambourine
const tambourine = s("tb").struct(`<
~@10 A B@3 C B@3 A B@3 A B@3 A B@3 C B@3 A B@3 A B@3 A B A B A B@3 A B@3 ~@2
>`.pickRestart({
A: "~@3 x", B: "~ x ~ x", C: "x!2 ~ x",
})).gain(0.71)
stack(
piano, epiano2, drawbar_organ, bass, sitar, string_ensemble_1, cello, kick, snare, clap, hihat, mid_tom, open_hat,
high_tom, crash, tambourine
)
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.