0:00/0:00
// Family Man — Hall & Oates
// 129 bpm, 4/4, key F minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 3 lead 6 voice (copy of ch 2 synth choir)
// note: Full arrangement: all 81 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(129/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.
// other · synth brass 1
const synth_brass_1 = note(`<
A B C D A B E F G H I J@2 H K ~@17 A B C D A B E F G H I J@2 H K ~@17 A B C D A B E F G H I J@2 H K ~@2
>`.pickRestart({
A: "eb5 c5", B: "eb5@2 f5 eb5@2 c5 eb5 f5", C: "g5@4 f5@2 eb5@4 c5@2 bb4 ~ bb4 ~", D: "bb4@2 c5 ~ c5 ~ c5@2 ~@8",
E: "g5@2 f5@2 eb5 ~ eb5@4 c5@2 bb4 ~ bb4 ~", F: "bb4@2 c5 ~ c5 ~ c5@2 ~@2 eb5 ~ f5 ~ ab5 ~",
G: "c6@2 bb5 ~ bb5 ~ bb5 ~@5 f5 ~ ab5 ~", H: "c6@2 bb5 ~ bb5 ~ bb5 ~@3 f5 ~ ab5 ~ c6@2",
I: "~@2 c6 ~ bb5 ~ ab5@3 ~ f5 ~ eb5 ~ f5 ~", J: "[~@10 f5 ~ ab5 ~ c6@4 ~ bb5!2 ~ bb5 ~@5 f5 ~ ab5 ~]/2",
K: "~@2 c6 ~ bb5 ~ bb5@2 ~@2 g5 ~ bb5 ~ c6 ~",
})).s("gm_synth_brass_1").gain(0.35)
// chords · overdriven guitar
const overdriven_guitar = note(`<
~@8 A B C D A B E D ~@8 A B C D A B E D ~@8 A B C D A B E D ~@8 A B C D A B E D ~@8 A B C D A B E D ~
>`.pickRestart({
A: "[db3,ab3] ~@5 [db3,ab3]@2 ab2 ~@7", B: "[db3,ab3] ~@5 [db3,ab3]@2 ab2 ~@3 [eb3,bb3] ~@3",
C: "[eb3,bb3]@2 [f3,c4] ~@5 f3@4 ~@4", D: "c3@2 c3@3 ~ c3@2 f2@4 ~@4", E: "[eb3,bb3] [f3,c4] ~@2 f3@2 ~@2",
})).s("gm_overdriven_guitar").gain(0.26)
// chords · synth strings 1
const synth_strings_1 = note(`<
~@9 A B ~@2 A C ~@17 D E F G H I J K ~ A B ~@2 A C ~@17 L E F G H I J K ~ A B ~@2 A C ~@2
>`.pickRestart({
A: "~@6 [eb4,bb4] ~", B: "bb4@2 [f4,c5]@2 ~@4 [f4,c5]@3 ~@5, eb4 ~@15", C: "bb4 [f4,c5] ~@2 [f4,c5] ~@3, e4 ~@15",
D: "[ab4,c5,eb5] ~@3 [ab4,c5] ~@3, ~@8 f4 ~@7", // Ab
E: "[ab4,c5] ~@3 [bb4,d5,f5] ~ [c5,eb5]@2 ~@2 [f4,ab4,c5] ~ eb5 ~ f5 ~, eb5@2 ~@4 ab4 ~@9", // Ab Bb Cm Fm
F: "[c5,eb5] ~@5 [ab4,c5,eb5] ~@6 eb4 [eb4,g4,bb4] ~, g5 ~@7", // Cm Ab Eb
G: "[eb4,g4] ~ [eb4,g4,bb4] ~ [f4,ab4,c5] ~ [f4,ab4,c5]@2 ~@8, bb4 ~@7", // Eb Fm
H: "[ab4,c5] ~@7 [f4,ab4] ~@7, eb5 ~@3 c5 ~@3", // Ab Fm
I: "[c5,eb5]@2 ~@2 [bb4,d5,f5] ~ [ab4,c5,eb5]@2 ~@2 ab4 ~ c5 ~ eb5 ~, ab4 ~@15", // Cm Bb Ab
J: "[c5,eb5,g5] ~@5 [ab4,c5,eb5]@2 ~@4 [eb4,g4,bb4] ~ [eb4,g4,bb4] ~", // Cm Ab Eb
K: "[eb4,g4,bb4]@2 [f4,ab4,c5] ~ [f4,ab4,c5] ~ [f4,ab4,c5]@2 ~@8", L: "[ab4,c5,eb5] ~@3 [f4,ab4,c5] ~@3",
})).s("gm_synth_strings_1").gain(0.35)
// bass · acoustic bass
const bass = note(`<
~@16 A B A C A@4 D E F G H E F@2 I J@6 K D E L M H E M@2 A B A C A@4 D E F G H E F@2 I J@6 K D E L M H E M@2 ~
>`.pickRestart({
A: "f1 ~ f1@2 f2 ~ f2@2 f1 ~ f1@2 f2 ~ f2@2", B: "f1 ~ f1@2 f2 ~ f2@2 f1 ~ f1 ~ f2 ~ f2@2",
C: "f1 ~ f1@2 f2 ~ f2@2 f1 ~ f1@2 f2@2 f2@2", D: "db2 ~ db2@2 db3 ~ db3 ~ db2 ~ db2 ~ db3 ~ db3 ~",
E: "db2 ~ db2 ~ db3 ~ db3 ~ db2 ~ db2 ~ eb2 ~ eb2 ~", F: "f2 ~ f2@2 f3 ~ f3 ~ f2 ~ f2@2 f3 ~ f3 ~",
G: "f2 ~ f2@2 f3 ~ f3 ~ f2 ~ f2@2 f3 ~ f3@2", H: "db2 ~ db2 ~ db3 ~ db3 ~ db2 ~ db2 ~ db3 ~ db3 ~",
I: "f2 ~ f2@2 [ab2,a2] ~ ab2@2 f2 ~ f2 ~ ab2 ~ ab2@2", J: "f2 ~ f2 ~ ab2 ~ ab2 ~ f2 ~ f2 ~ ab2 ~ ab2 ~",
K: "f2 ~ f2 ~ ab2 ~ ab2 ~ f2 ~ bb2 ~ c3 ~ c3 ~", L: "f2@3 ~ f3 ~ f3 ~ f2 ~ f2 ~ f3 ~ f3 ~",
M: "f2 ~ f2 ~ f3 ~ f3 ~ f2 ~ f2 ~ f3 ~ f3 ~",
})).s("gm_acoustic_bass").gain(0.35)
// other · distortion guitar
const distortion_guitar = note("<~@16 A B C D E F G H ~@24 A B C D E F G H ~@25>".pickRestart({
A: "[bb3,bb4] ~ [bb3,bb4] ~ [ab3,ab4] ~ [ab3,ab4] ~ [g3,g4] ~ [g3,g4] ~ [f3,f4] ~ [f3,f4] ~", // Bb Ab G F
B: "[g3,g4] ~ [g3,g4] ~ [eb3,eb4] ~ [f3,f4] ~ [f3,f4] ~ [bb2,bb3] ~ [bb2,bb3] ~ [bb2,bb3] ~", // G Eb F Bb
C: "[bb2,bb3] ~@3 [bb2,bb3] ~ [bb2,bb3] ~@3 [bb2,bb3] ~ [bb2,bb3] ~@3", // Bb
D: "[bb2,bb3] ~@3 [bb2,bb3] ~ [bb2,bb3] ~@3 [bb2,bb3] ~ [bb2,bb3] ~ bb3 ~", // Bb
E: "[bb3,ab4,bb4] ~ [bb3,bb4] ~ [ab3,ab4] ~ [ab3,ab4] ~ [g3,g4] ~ [g3,g4] ~ [f3,f4] ~ [f3,f4] ~", // Bb7 Bb Ab G F
F: "[g3,g4] ~ [g3,g4] ~ [e3,eb4] ~ [f3,f4]@2 f3 ~ bb2 ~ [bb2,bb3] ~ [bb2,bb3] ~", // G Emaj7 F Bb
G: "[bb2,bb3] ~ bb2 ~ bb2 ~ [bb2,bb3] ~ bb3 ~ [bb2,bb3] ~ [bb2,bb3] ~ [bb2,bb3] ~", // Bb
H: "[bb2,bb3] ~ bb3 ~ bb2 ~ [bb2,bb3] ~ bb2 ~ [bb2,bb3] ~ [bb2,bb3] ~ [bb2,bb3] ~", // Bb
})).s("gm_distortion_guitar").gain(0.35)
// other · distortion guitar · soft notes
const distortion_guitar_soft = note("<~@18 A B ~@2 C D ~@26 A B ~@2 C D ~@25>".pickRestart({
A: "~@2 bb2 ~@5 bb2 ~@5 bb2 ~", B: "~@2 [bb2,bb3] ~@5 [bb2,bb3] ~@5 bb2 ~", C: "~@2 bb3 ~ bb3 ~@3 bb2 ~@7",
D: "~@2 bb2 ~ bb3 ~@3 bb3 ~@7",
})).s("gm_distortion_guitar").gain(0.2)
// other · overdriven guitar
const overdriven_guitar_2 = note("<~@23 A B C D E F G H I ~@23 A B C D E F G H I ~@17>".pickRestart({
A: "~@10 f4@2 eb4 c4 bb3@2", B: "f4@4 ~ ab4@3", C: "f4@2 ~ eb4 f4 ab4 f4 eb4",
D: "f4@2 eb4@2 c4 [c4,db4] bb3@2 c4@2 bb3@2 c4@2 eb4@2", E: "f4@2 ~@3 c4@2 eb4",
F: "db4@2 c4 [c4,db4] ab3@2 f3@2 ab3@2 bb3@2 c4@2 c4@2", G: "eb4@2 f4@4 eb4@4 c4@2 eb4 f4@3",
H: "g4@2 f4@2 eb4 c4 eb4 c4 eb4 f4@7", I: "bb3 c4@15",
})).s("gm_overdriven_guitar").gain(0.4)
// drums · kick
const kick = s("bd").struct(`<
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 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 B A B A B A B A B ~
>`.pickRestart({
A: "x!2", B: "x ~@2 x!2 ~@3",
})).gain(0.5)
// drums · snare
const snare = s("sd").struct("<~@16 [~ x ~ x]!64 ~>").gain(0.4)
// drums · hihat
const hihat = s("hh").struct("<~@16 [x!8]!64 ~>").gain(0.4)
stack(
synth_brass_1, overdriven_guitar, synth_strings_1, bass, distortion_guitar, distortion_guitar_soft,
overdriven_guitar_2, kick, snare, hihat
)
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.