0:00/0:00
// Sex on the Phone — E-Rotic
// 146 bpm, 4/4, key D# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 147 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(146/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 · synth bass 1 · "SYN BASS 1"
const bass = note(`<
~@17 A@2 B@2 C@2 A D E@2 F@2 G@2 H I ~ A@2 B@2 C@2 A D E@2 F@2 G@2 H J A@2 B@2 C@2 A K A@2 B@2 C@2 A D E@2 F@2 G@2 H I
~ A@2 B@2 C@2 A D E@2 F@2 G@2 L J A@2 B@2 C@2 A K A@2 B@2 C@2 A D ~@8 A@2 B@2 C@2 A D E@2 F@2 G@2 L J A@2 B@2 C@2 A D
~@8
>`.pickRestart({
A: "eb2 ~ eb2!3 ~ eb2!3 ~ eb2!3 ~ eb2!2", B: "f2 ~ f2!3 ~ f2!3 ~ f2!3 ~ f2!2",
C: "ab2 ~ ab2!3 ~ ab2!3 ~ ab2!3 ~ ab2!2", D: "bb1 ~ bb1!3 ~ bb1!3 ~ bb1!3 ~@3",
E: "eb3@2 eb2!2 eb3@2 eb2!2 eb3@2 eb2!2 eb3@2 eb2!2, eb2 ~@3 eb2 ~@3 eb2 ~@3 eb2 ~@3",
F: "f3@2 f2!2 f3@2 f2!2 f3@2 f2!2 f3@2 f2!2, f2 ~@3 f2 ~@3 f2 ~@3 f2 ~@3",
G: "ab3@2 ab2!2 ab3@2 ab2!2 ab3@2 ab2!2 ab3@2 ab2!2, ab2 ~@3 ab2 ~@3 ab2 ~@3 ab2 ~@3",
H: "bb3 ~ bb2!2 bb3 ~ bb2!2 bb3 ~ bb2!2 bb3 ~ bb2!2", I: "bb3 ~ bb2!2 bb3 ~ bb2!2 bb3 ~ bb2!2 bb3 ~ bb2 ~",
J: "bb3 ~ bb2!2 bb3@2 bb2!2 bb3@2 bb2!2 bb3@2 bb2 ~", K: "bb1 ~ bb1!3 ~ bb1!3 ~ bb1!3 ~ bb1!2",
L: "eb3 ~ eb2!2 eb3 ~ eb2!2 eb3 ~ eb2!2 eb3 ~ eb2!2",
})).s("gm_synth_bass_1").gain(0.37)
// chords · whistle · F7 Eb5 Db Cm Gbmaj7 Cmaj7
const whistle = note(`<
~@107
[~@4 [f5,eb6] bb5 [bb5,eb6] ~ [ab5,db6,f6] ~ [g5,eb6] ~ [f5,gb5] d5 [b5,c6] ~, ~@13 c5@2 ~]
~@39
>`).s("gm_whistle").gain(0.29).pan(0.3)
// chords · synth strings 1 · "SYN STR 1"
const synth_strings_1 = note(`<
A@16 ~ B@7 C D@6 E@2 ~ B@7 C D@6 F G H@8 B@7 C D@6 E@2 ~ B@7 C D@6 F G H@8 B@7 C I@2 J@4 K ~ B@7 C D@6 F G B@7 C L@2
M@2 N@4
>`.pickRestart({
A: "[[eb2,bb3,g4]@2 [f2,f4,ab4]@2 [ab2,ab4]@2 eb2 [bb2,d4], eb4@63 ~ eb4@47 ~ f4@14 ~@2, ~@16 c4@31 ~ bb3@16, ~@48 g4@7 ~@9]/8", // Eb Fm Ab Bb
B: "[[eb2,bb3,g4]@2 [f2,f4,ab4]@2 [ab2,ab4]@2 [eb2,bb3], eb4@63 ~ eb4@47 ~, ~@16 c4@31 ~ g4@7 ~]/7", // Eb Fm Ab Eb5
C: "[bb3,d4,f4]@5 ~@3", D: "[[eb2,bb3,g4] [f2,f4,ab4] [ab2,eb4,ab4], eb4@21 ~@11, ~@16 c4@31 ~]/6",
E: "[[d4,f4,bb4]@31 ~]/2", F: "[bb3,eb4,g4]@15 ~", G: "[bb3,d4,f4]@15 ~",
H: "[[eb2,bb3,g4]@32 [f2,f4,ab4]@32 [ab2,ab4]@32 eb2@16 [d4,f4,bb4]@15 ~, eb4@63 ~ eb4@47 ~@17, ~@16 c4@31 ~ bb3@16, ~@48 g4@7 ~@9]/8", // Eb Fm Ab Bb
I: "[bb3,eb4,g4]/2", J: "[f4@31 ~ eb4@32, [c4,ab4]]/4", K: "[bb3,eb4,g4]", L: "[eb2,bb3,eb4,g4]/2",
M: "[[f3,c4,f4,ab4], eb4 ~]/2", N: "[[eb3,bb3,eb4,g4]@25 ~@7]/4",
})).s("gm_synth_strings_1").gain(0.21).pan(0.4)
// other · lead 2 sawtooth · "SAW WAVE"
const lead_2_sawtooth = note(`<
~@8 A B C D E F G H ~ A B C D E F G I ~@9 J K L@2 M@2 N O J K L@2 M@2 N O A B C D E F G H A B C D E F G I ~@9 J K L@2
M@2 N O J K L@2 M@2 N O A B C D E F G H A B C D E F G I P Q R S T U V ~ J K L@2 M@2 N O J K L@2 M@2 N O A B C D E F G
I ~@8
>`.pickRestart({
A: "f4 ~ bb3 f4 ~ bb3 eb4 ~ bb3 eb4@2 bb3 eb4@2 bb3@2", B: "f4@2 bb3 f4 ~ bb3 eb4@2 bb3 eb4 ~ bb3 eb4@2 bb3 ~",
C: "g4 ~ c4 g4 ~ c4 f4 ~ c4 f4@2 c4 f4@2 c4@2", D: "g4@2 c4 g4 ~ c4 f4@2 c4 f4 ~ c4 f4@2 c4 ~",
E: "bb4 ~ eb4 bb4 ~ eb4 ab4 ~ eb4 ab4@2 eb4 ab4@2 eb4@2", F: "bb4@2 eb4 bb4 ~ eb4 ab4@2 eb4 ab4 ~ eb4 ab4@2 eb4 ~",
G: "ab4 ~ g4 ab4 ~ g4!2 ~ eb4 g4@2 eb4 g4@2 eb4@2", H: "g4@2 f4 g4 ~ f4 f4@2 bb3 f4 ~ bb3 f4@2 bb3 ~",
I: "g4@2 f4 g4 ~ f4 f4@2 bb3 f4 ~ bb3 ~@4", J: "~@2 bb3 ~ f4 ~ bb3 eb4 ~ bb3 f4 bb3 eb4 ~ bb3 ~",
K: "~@4 f4 ~ bb3 eb4 ~ bb3 f4 bb3 eb4 ~ bb3 ~", L: "~@4 g4 ~ c4 f4 ~ c4 g4 c4 f4 ~ c4 ~",
M: "~@2 eb4 ~ bb4 ~ eb4 ab4 ~ eb4 bb4 eb4 ab4 ~ eb4 ~", N: "~@2 bb3 ~ g4 ~ bb3 g4 ~ bb3 g4 bb3 g4 ~ g4 ~",
O: "~@2 bb3 ~ f4 ~ bb3 f4 ~ bb3 f4 bb3 f4 ~ f4 ~", P: "eb4 ~@2 d4 ~@2 eb4 ~@3 bb3 ~ eb4 ~ d4 ~",
Q: "eb4 ~@2 d4 ~@2 eb4 ~@3 bb3 ~ eb4 ~ g4 ~", R: "f4 ~@2 eb4 ~@2 f4 ~@3 c4 ~ f4 ~ eb4 ~",
S: "f4 ~@2 eb4 ~@2 f4 ~@3 c4 ~ f4 ~ g4 ~", T: "ab4 ~@2 g4 ~@2 ab4 ~@7 g4 ~", U: "ab4 ~@2 g4 ~@2 ab4 ~@5 ab4 ~@3",
V: "g4 ~@2 f4 ~@2 g4 ~@3 eb4 ~ g4 ~ f4 ~",
})).s("gm_lead_2_sawtooth").gain(0.21)
// other · lead 2 sawtooth · "SAW WAVE" · soft notes · Ab5 Ab Ab5 Absus2
const lead_2_sawtooth_soft = note(`<
~@107
[eb3!16]!2
[f3!16]!2
[ab3!10 [ab3,eb4] ab3 [ab3,ab4] ab3!3]
[ab3!10 [ab3,eb4] ab3!3 [ab3,bb4] ab3]
[eb3!16]
~@33
>`).s("gm_lead_2_sawtooth").gain(0.11)
// other · synth bass 1 · "SYN BASS 1"
const synth_bass_1 = note(`<
~@25 A@3 B A@4 ~@9 A@3 B A@4 ~@16 A@3 B A@4 ~@9 A@3 B A@4 ~@32 A@3 B A@4 ~@16
>`.pickRestart({
A: "eb4 ~ d4 ~ eb4 ~ bb3 ~ eb4 ~ d4 ~ eb4 ~ bb3 ~", B: "eb4 ~ d4 ~ eb4 ~ bb3 ~ eb4 ~ d4 ~ eb4 ~@2 bb3",
})).s("gm_synth_bass_1").gain(0.21)
// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note("<~@8 A@6 B@2 ~@123 C@2 D@2 ~@4>".pickRestart({
A: "[[bb3,g4]@32 [c4,f4]@32 d4 c4@31, eb4, ~ ab4@2]/6", B: "[[eb4,g4,bb4]@16 [d4,f4]@15 ~, bb3@15 ~]/2",
C: "[bb3,eb4,g4]/2", D: "[c4,f4,ab4]/2",
})).s("gm_string_ensemble_1").gain(0.23).pan(0.6)
// other · synth drum
const synth_drum = note(`<
~@16 A B C D E D C F G B C D E D C F G ~ B C D E D C F H B C D E D C F I B C D E D C F G B C D E D C F G B C D E D C F
G ~ B C D E D C F H B C D E D C F I B C D E D C F G B C D E D C F G ~@7 A B C D E D C F H B C D E D C F I B C D E D C
F G ~@8
>`.pickRestart({
A: "f3!2 ~ f3!2 ~ f3 ~ f3 ~ f3 ~ f3 ~@3", B: "c3@2 ~@2 c3@2 ~@2 c3 ~@3 c3 ~@3",
C: "c3@2 ~@2 c3@2 ~@2 c3@2 ~@2 c3 ~ c3 ~", D: "c3 ~@3 c3@2 ~@2 c3@2 ~@2 c3@2 ~@2",
E: "c3@2 ~@2 c3 ~@3 c3@2 ~@2 c3 ~ c3 ~", F: "c3@2 ~@2 c3@2 ~@2 c3@2 ~@2 c3 ~@3", G: "f3!2 ~ f3!2 ~ f3 ~ f3 ~ f3 ~@5",
H: "f3 ~@3 f3 ~@3 f3 ~@3 f3 ~ f3 ~", I: "f3 ~@3 f3 ~@3 f3 ~@2 d3 f3 ~ d3 ~",
})).s("gm_synth_drum").gain(0.26)
// other · recorder
const recorder = note("<~@33 A ~@40 A ~@33 B C@2 ~@36>".pickRestart({
A: "~@8 ab4@5 ~@3", B: "~ ab4@6 ~@9", C: "[~@12 ab4@9 ~@11]/2",
})).s("gm_recorder").gain(0.4).pan(0.7)
// drums · kick
const kick = s("bd").struct(`<
~@16 A B C B C B C B D B C B C B C B@2 ~ B C B C B C B C B C B C B C B E B C B C B C B E B C B C B C B D B C B C B C B
D ~ B C B C B C B C B C B C B C B E B C B C B C B E B C B C B C B D ~@4 F@3 A B C B C B C B C B C B C B C B E B C B C
B C B D ~@8
>`.pickRestart({
A: "x!2 ~ x!2 ~ x ~ x ~ x ~@5", B: "x!4", C: "x ~ x ~ x ~ x!2", D: "x!2 ~ x!2 ~ x ~ x ~ x ~ x ~@3",
E: "x ~@3 x ~@3 x ~@2 x!2 ~ x ~", F: "x!2",
})).gain(0.5)
// drums · snare
const snare = s("sd").struct(`<
~@17 A@7 B A@7 B ~ A@15 C A@7 B A@7 B A@7 B ~ A@15 C A@7 B A@7 B ~@4 A@3 ~ A@15 C A@7 B ~@8
>`.pickRestart({
A: "~ x ~ x", B: "~@4 x ~@2 x!6 ~@3", C: "~@4 x ~@2 x ~ x ~ x!5",
})).gain(0.5)
// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
~@24 A ~@7 A ~@16 B ~@7 A ~@7 A ~@7 A ~@16 B ~@7 A ~@7 A ~@23 B ~@7 A ~@8
>`.pickRestart({
A: "~ x!6 ~@9", B: "~ x!6 ~ x ~ x ~@5",
})).gain(0.25)
// drums · low tom
const low_tom = s("lt").struct("<~@16 A ~@7 A ~@7 A ~@32 A ~@7 A ~@32 A ~@7 A ~@23 A ~@8>".pickRestart({
A: "~@3 x",
})).gain(0.5)
// drums · hihat
const hihat = s("hh").struct(`<
~@17 A@7 B C@2 D E D E F B ~ C@2 D E D E D E C@2 D E D E G H C@2 D E D E D B C@2 D E D E I B C@2 D E D E C B ~ C@2 D E
D E D E C@2 D E D E G H C@2 D E D E C B C@2 D E D E C B C@7 ~ C@2 D E D E D E C@2 D E D E C B C@2 D E D E A B ~@8
>`.pickRestart({
A: "~ x ~ x ~ x ~ x", B: "~ x ~ x ~ x ~@2", C: "x!16", D: "~ x!3 ~ x!3 ~ x!3 ~ x!3", E: "x!4 ~ x!3 ~ x!6 ~",
F: "~ x!11 ~ x!3", G: "x!4 ~ x!11", H: "~@3 x ~ x ~@2", I: "~ x!15",
})).gain(0.25)
// drums · crash
const crash = s("cr").struct(`<
~@17 A ~@7 A ~@6 B ~ A ~@7 A ~@6 C A ~@6 B A ~@7 A ~@6 B ~ A ~@7 A ~@6 C A ~@6 B A ~@15 A ~@7 A ~@6 C A ~@15
>`.pickRestart({
A: "x", B: "x!4", C: "x!3 ~",
})).gain(0.25)
// drums · tambourine
const tambourine = s("tb").struct("<~@107 [x!4]!7 ~@33>").gain(0.31)
// drums · guiro
const guiro = s("guiro:4").struct("<~@33 [x!9 ~@7] ~@40 [x!9 ~@7] ~@72>").gain(9.2)
stack(
bass, whistle, synth_strings_1, lead_2_sawtooth, lead_2_sawtooth_soft, synth_bass_1, string_ensemble_1, synth_drum,
recorder, kick, snare, snare_soft, low_tom, hihat, crash, tambourine, guiro
)
More by E-Rotic
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.