0:00/0:00
// Early in the Morning — Robert Palmer
// 120 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 118 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(120/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, A@4 for four bars: edit a riff to change every repeat.
// bass · acoustic bass · "ACOU BASS"
const bass = note(`<
~@8 A B@3 C D E D F D E D F D G D H D I D J D E D K L M N O P M Q R D E D F D G D H D I D J D E D K L M N O P M Q R D
E D F D G D H S T S U L M N O P M Q R V W X Y Z AA AB AC ~@4 S T S AD L M N O P M Q R L M N O P M Q R AE
>`.pickRestart({
A: "e4@2 g4 ~ d4@2 f#4 ~ b3@2 c4 ~ a3 ~ g3 ~", B: "[e2@5 ~]/3", C: "~@7 e3", D: "e2@3 ~@7 e2@2 g2@2 e2@2",
E: "a2@3 ~@13", F: "a2@3 ~@7 b2 a2 d3 ~ d3 ~", G: "a2@3 ~@7 d3 ~ b2 a2 ~@2", H: "a2@2 ~@4 b2 a2 d3 ~ d3@2 a2 d3@2 ~",
I: "a2@3 ~@7 a3 ~@2 a3 ~@2", J: "a2@3 ~@5 b3 a3@3 c3 b2@2 ~", K: "a2@2 ~@6 c3 b2 ~@2 d3@3 ~",
L: "e2@4 ~@6 e2@2 g2 ~ g2 ~", M: "a2@3 ~ b2@3 ~ c3@3 ~ d3@3 ~", N: "e2 ~@4 e2 g2 e2",
O: "c3@2 ~@2 c3 ~ a2 ~ c3@3 ~ c3@2 ~@2", P: "e2@3 ~@7 g2@2 e2@2 g2@2", Q: "e2@2 ~@8 g2@2 e2@2 g2 ~",
R: "a2@3 ~ a2@2 ~@2 a2@2 ~@2 a2@2 ~@2", S: "~@2 e2 ~ e2@2 g2 ~ g2@2 ~@6", T: "~@2 g2 ~ g2@2 a2 ~ a2@2 ~@6",
U: "~@2 g2 ~ g2@2 a2 ~ a2 ~ a2 ~ b2 a2 g2@2", V: "e3 g3 a3 a#3 [b3,d4] b3 e4 d4 g4 e4 a4 g4 e4 d4 a#3 b3",
W: "e4 g4 e4 b3 a3 a#3 g4!2 f#4 d4 a3@3 ~@3", X: "~@2 b4@2 ~ a4@2 ~ g4@2 ~ e4@2 ~ b3@2", Y: "~ e4@2 ~ g4 ~ b4 ~ a4@8",
Z: "~ b3 e4 g4 f#4@3 b3 e4 g4 f#4@2 ~ b3 e4 g4", AA: "f#4 e4 b3 g3 a3 b3 a3 b3 a3@3 g3 e3@2 ~@2",
AB: "~@2 a3 ~ a#3 b3 d4 e4 f4 g4 ~ f4 g4 ~ f4 g4", AC: "a4@2 e4 a4 ~ e4 a4 ~ e4 a4 ~ e4 a4 ~ e4@2", AD: "~@8 d2@7 ~",
AE: "e2@3 ~@13",
})).s("gm_acoustic_bass").gain(0.72)
// chords · harpsichord · "HARPSICORD"
const harpsichord = note(`<
~ A@8 B C B C D@5 ~@7 D@5 ~@3 A@8 E F E F E F E G D@5 ~@3 A@8 E F E F E F E G A@8 H@5 I J K L M N O ~@8 A@16 P
>`.pickRestart({
A: "[[e5,e6]@2 [b4,b5] [e5,e6] ~@2 [f#5,f#6]@2 [g5,g6]@2 [f#5,f#6]@2 [e5,e6]@2 ~@2 [e5,e6]@2 [c5,c6] [e5,e6] ~@2 [f#5,f#6]@2 [g5,g6]@2 [f#5,f#6]@2 [e5,e6]@2 ~@2 [e5,e6]@2 [b4,b5] [e5,e6] ~@2 [f#5,f#6]@2 [g5,g6]@2 [f#5,f#6]@2 [e5,e6]@2 ~@2 [e5,e6]@2 [c5,c6] [e5,e6] ~@2 [f#5,f#6]@2 [g5,g6]@2 [f#5,f#6]@2 [e5,e6]@2 ~@2 [e5,e6]@2 [b4,b5] [e5,e6] ~@2 [f#5,f#6]@2 [g5,g6]@2 [f#5,f#6]@2 [e5,e6]@2 ~@2 [e5,e6]@2 [c5,c6] [e5,e6] ~@2 [f#5,f#6]@2 [g5,g6]@2 [f#5,f#6]@2 [e5,e6]@2 ~@2 [e5,e6]@2 [b4,b5] [e5,e6] ~@2 [f#5,f#6]@2 [g5,g6]@2 [f#5,f#6]@2 [e5,e6]@2 ~@2 [e5,e6]@2 [c5,c6] [e5,e6] ~@2 [f#5,f#6]@2 [g5,g6]@2 [f#5,f#6]@2 [e5,e6]@2 [c5,c6]@2, ~@2 [b4,b5]@5 [b4,b5]@5 ~@6 [b4,b5]@5 [b4,b5]@5 ~@6 [b4,b5]@5 [b4,b5]@5 ~@6 [b4,b5]@5 [b4,b5]@5 ~@4, ~@10 [c5,c6]@5 [c5,c6]@5 ~@6 [c5,c6]@5 [c5,c6]@5 ~@6 [c5,c6]@5 [c5,c6]@5 ~@6 [c5,c6]@5 ~]/8", // E B E F# G F# E C …
B: "b3@3 f#4@3 g4@9 ~", C: "c4@3 g4@3 a4@9 ~",
D: "[[e5,e6]@2 [b4,b5] [e5,e6] ~@2 [f#5,f#6]@2 [g5,g6]@2 [f#5,f#6]@2 [e5,e6]@2 ~@2 [e5,e6]@2 [c5,c6] [e5,e6] ~@2 [f#5,f#6]@2 [g5,g6]@2 [f#5,f#6]@2 [e5,e6]@2 ~@2 [e5,e6]@2 [b4,b5] [e5,e6] ~@2 [f#5,f#6]@2 [g5,g6]@2 [f#5,f#6]@2 [e5,e6]@2 ~@2 [e5,e6]@2 [c5,c6] [e5,e6] ~@2 [f#5,f#6]@2 [g5,g6]@2 [f#5,f#6]@2 [e5,e6]@2 [c5,c6]@10 ~@8, ~@2 [b4,b5]@5 [b4,b5]@5 ~@6 [b4,b5]@5 [b4,b5]@5 ~@12, ~@10 [c5,c6]@5 [c5,c6]@5 ~@6 [c5,c6]@5 ~@9]/5", // E B E F# G F# E C …
E: "b3@3 e4 f#4@2 g4@10", F: "c4@3 e4 g4@2 a4@9 ~", G: "c4@3 e4 g4@2 a4@8 ~@2",
H: "[[e5,e6]@2 [b4,b5] [e5,e6] ~@2 [f#5,f#6]@2 [g5,g6]@2 [f#5,f#6]@2 [e5,e6]@2 ~@2 [e5,e6]@2 [c5,c6] [e5,e6] ~@2 [f#5,f#6]@2 [g5,g6]@2 [f#5,f#6]@2 [e5,e6]@2 ~@2 [e5,e6]@2 [b4,b5] [e5,e6] ~@2 [f#5,f#6]@2 [g5,g6]@2 [f#5,f#6]@2 [e5,e6]@2 ~@2 [e5,e6]@2 [c5,c6] [e5,e6] ~@2 [f#5,f#6]@2 [g5,g6]@2 [f#5,f#6]@2 [e5,e6]@2 ~@2 e3 g3 a3 a#3 [b3,d4] b3 e4 d4 g4 e4 a4 g4 e4 d4 a#3 b3, ~@2 [b4,b5]@5 [b4,b5]@5 ~@6 [b4,b5]@5 [b4,b5]@5 ~@12, ~@10 [c5,c6]@5 [c5,c6]@5 ~@6 [c5,c6]@5 [c5,c6]@5 ~@4]/5", // E B E F# G F# E C …
I: "e4 g4 e4 b3 a3 a#3 g4!2 f#4 d4 a3@3 ~@3", J: "~@2 b4@2 ~ a4@2 ~ g4@2 ~ e4@2 ~ b3@2", K: "~ e4@2 ~ g4 ~ b4 ~ a4@8",
L: "~ b3 e4 g4 f#4@3 b3 e4 g4 f#4@2 ~ b3 e4 g4", M: "f#4 e4 b3 g3 a3 b3 a3 b3 a3@3 g3 e3@2 ~@2",
N: "~@2 a3 ~ a#3 b3 d4 e4 f4 g4 ~ f4 g4 ~ f4 g4", O: "a4@2 e4 a4 ~ e4 a4 ~ e4 a4 ~ e4 a4 ~ e4@2", P: "[e5,e6] ~@15",
})).s("gm_harpsichord").gain(0.48)
// chords · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note(`<
~ A@2 B C ~ D ~ E F@2 ~@62 G H G I G H G J G H G I K L M N O P Q R ~@4 S T S U G H G J G H G I G H G J G H G@2 V
>`.pickRestart({
A: "~@4 b3@2 ~@2 a3@3 g3 ~@4", B: "~@12 a3 ~@3", C: "~@2 e3 ~ b2@2 a2 ~", D: "~@4 g2@2 ~@2 a2@4 a2@2 g2 ~",
E: "b1@3 ~ a1@3 ~ g1@3 ~ f#1@3 ~", F: "[e1@31 ~]/2", G: "~@10 [e2,e3]@2 [g2,g3]@2 [e2,e3] ~",
H: "[a2,a3] ~@4 [e2,e3] [g2,g3] [e2,e3]", I: "[a2,a3] ~@7, a4@7 ~", J: "[a2,a3] ~@7",
K: "[e2,b2] [g2,d3] [a2,e3] [a#2,f3] [b2,d3,f#3,a3] [b2,f#3] [e3,b3] [d3,a3] [g3,d4] [e3,b3] [a3,e4] [g3,d4] [e3,b3] [d3,a3] [a#2,f3] [b2,f#3]", // E5 G5 A5 A#5 Bm7 B5 E5 D5 …
L: "[e3,b3] [g3,d4] [e3,b3] [b2,f#3] [a2,e3] [a#2,f3] [g3,d4]!2 [f#3,c#4] [d3,a3] [a2,e3]@3 ~@3", // E5 G5 E5 B5 A5 A#5 G5 F#5 …
M: "~@2 [b3,f#4]@2 ~ [a3,e4]@2 ~ [g3,d4]@2 ~ [e3,b3]@2 ~ [b2,f#3]@2", // B5 A5 G5 E5 B5
N: "~ [e3,b3]@2 ~ [g3,d4] ~ [b3,f#4]@2 [a3,e4]@8", // E5 G5 B5 A5
O: "~ [b2,f#3] [e3,b3] [g3,d4] [f#3,c#4]@3 [b2,f#3] [e3,b3] [g3,d4] [f#3,c#4]@3 [b2,f#3] [e3,b3] [g3,d4]", // B5 E5 G5 F#5 B5 E5 G5 F#5 …
P: "[f#3,c#4] [e3,b3] [b2,f#3] [g2,d3] [a2,e3] [b2,f#3] [a2,e3] [b2,f#3] [a2,e3]@3 [g2,d3] [e2,b2]@2 ~@2", // F#5 E5 B5 G5 A5 B5 A5 B5 …
Q: "~@2 [a2,e3] ~ [a#2,f3] [b2,f#3] [d3,a3] [e3,b3] [f3,c4] [g3,d4] ~ [f3,c4] [g3,d4] ~ [f3,c4] [g3,d4]", // A5 A#5 B5 D5 E5 F5 G5 F5 …
R: "[a3,e4]@2 [e3,b3] [a3,e4]@2 [e3,b3] [a3,e4] ~ [e3,b3] [a3,e4] ~ [e3,b3] [a3,e4]@2 [e3,b3]@2", // A5 E5 A5 E5 A5 E5 A5 E5 …
S: "~@2 e1 ~ e1@2 g1 ~ g1@2 ~@6", T: "~@2 g1 ~ g1 ~ a1 ~ a1@2 ~@6", U: "~@8 d1@7 ~", V: "[e2,e3] ~@7",
})).s("gm_acoustic_guitar_steel").gain(0.54)
// drums · kick
const kick = s("bd").struct(`<
A B@8 C@7 D C@15 D C E C E C E C F C@15 D C E C E C E C F C@7 D E@2 G F C E C E C E C F H@7 I J@7 K L E L C L E L F L
E L E L E L F M
>`.pickRestart({
A: "~@10 x ~@3 x!2", B: "x ~@2 x ~@4", C: "x!2", D: "x!2 ~ x!3 ~ x", E: "x!3 ~", F: "x!6 ~ x", G: "x ~@3 x ~@2 x",
H: "x!4", I: "x ~ x ~ x!4", J: "~ x", K: "~@4 x!2 ~ x", L: "x ~@2 x!2 ~@3", M: "x",
})).gain(0.6)
// drums · snare
const snare = s("sd").struct(`<
A B@7 C B@7 D E@8 B@7 D B@7 F E@8 B@7 D B@7 F B@7 D B@3 G B@7 F ~@7 A ~@7 A B@7 F B@7 H I
>`.pickRestart({
A: "~@2 x!2", B: "~ x ~ x", C: "~@4 x ~@7 x!4", D: "x ~@3 x ~@3 x ~@3 x ~ x!2", E: "~ x ~@2", F: "x!4",
G: "x ~@3 x ~@3 x!8", H: "x!2 ~@2 x!2 ~@2 x!2 ~@2 x!4", I: "x",
})).gain(0.6)
// drums · clap
const clap = s("cp").struct("<~@33 A@8 ~@16 A@8 ~@8 A@12 B@8 A@24 ~>".pickRestart({
A: "~ x ~ x", B: "~@3 x",
})).gain(0.6)
// drums · low tom
const low_tom = s("lt").struct("<~@73 [x!3 ~]!3 [x ~@3 x ~@7 x!4] ~@40 x>").gain(0.6)
// drums · hihat
const hihat = s("hh").struct("<~ x!8 [x!4]!84 ~@8 [x!4]!16 ~>").gain(0.6)
// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@9 [~ x ~ x ~ x ~ x]!84 ~@8 [~ x ~ x ~ x ~ x]!16 ~>").gain(0.2)
// drums · mid tom
const mid_tom = s("mt").struct("<~@76 [~@8 x!4 ~@4] ~@41>").gain(0.6)
// drums · open hat
const open_hat = s("oh").struct("<~ [~@15 x]!84 ~@16 [~@15 x]!16 ~>").gain(0.6)
// drums · crash
const crash = s("cr").struct(`<
~@9 A ~@3 A ~@3 A ~@7 A ~@7 A ~@3 A ~@3 A ~@7 A ~@7 A ~@3 A ~@3 A ~@7 A ~@3 A ~@3 A ~@19 A ~@3 A ~@3 A ~@3 A ~@4
>`.pickRestart({
A: "x",
})).gain(0.6)
// drums · ride
const ride = s("rd").struct("<~@85 [x!4]!8 ~@25>").gain(0.6)
// drums · cowbell
const cowbell = s("cb").struct("<~@33 A@8 ~@16 A@8 ~@8 A@12 ~@16 A@16 ~>".pickRestart({
A: "x!5 ~@11",
})).gain(0.6)
// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@9 [x!16]!76 ~@8 x!8 [x!16]!16 ~>").gain(1.02)
stack(
bass, harpsichord, acoustic_guitar_steel, kick, snare, clap, low_tom, hihat, hihat_soft, mid_tom, open_hat, crash,
ride, cowbell, cabasa
)
More by Robert Palmer
Addicted To Love1986 · A major · 110 bpmSimply IrresistibleA major · 141 bpmBad Case Of Lovin' You ( Doctor, Doctor)E major · 153 bpmI'll Be Your Baby TonightE♭ major · 96 bpmEvery Kind of PeopleG major · 161 bpmKnow By NowE major · 118 bpmMercy Mercy Me I Want YouG♯ minor · 100 bpmSome Guys Have All the LuckA major · 92 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.