Yes I have done it. With an es-8.
The key is this:
SinOsc.ar(freq,0,0,pitch)
‘Freq’ can be anything, it’s not being used since ‘mul’ is set to zero. If I remember right setting mul to 0 might require you to set it with an argument…or else it won’t accept that the SinOsc is at audio rate.
Your pitch starts at 0, 0.1 is an octave up, 0.2 is two octaves up etc.
You can put that in a synthdef and send it midinotes or scale degrees and convert it within the synthdef or send the values directly.
Let me know if this is not clear enough and I could post an example later.