First time here? Check out the FAQ!

Voltage Scaling

+1 vote
Greetings from Kuala Lumpur,

I would like to use the Expert Sleepers ES-3 and ES-4 with Kyma and so far it works great .

One thing it is hard for me to get my head around is how to scale the !KeyNumber so I get the correct 1volt per octave to the modular.

The other thing is how to scale the frequencies so they are the same as in Kyma. I guess I should use 1 volt per octave again.

I wish to get this to my modular :

"(!KeyNumber - 60 // 23) twoExp * ((!KeyNumber - 60 mod: 23) of: #( 1.0 1.0306 1.06213 1.09462 1.12811 1.16263 1.1982 1.23486 1.27264 1.31158 1.35171 1.39306 1.43568 1.47961 1.52488 1.57153 1.61962 1.66917 1.72024 1.77287 1.82711 1.88301 1.94063 )) * 261.626 hz"

The output on the ES-3 (MAX) is 10.34 Volt.

best and thank you


asked Oct 18, 2019 in Hardware & Interfaces by rastko-lazic (Practitioner) (410 points)

1 Answer

+1 vote

Hi Rastko!

I've done some CV quantization in kyma recently. I'm taking a CV in to kyma, snapping it to a note frequency and sending it back out as a quantized CV. I'm using the Expert Sleepers ES-8 to do that (which has 4 DC-coupled inputs and 8 outputs).

On the way in I'm using a SoundToGlobalController to scale the CV input:


Here I'm not honoring 1 Volt per octave on the input CV. That's because I'm using this function with a home made ribbon controller and this lets me set the range of the controller. But this STGC does convert from CV to note number. 

I imagine you could also convert the input to unipolar and multiply by 127 to give you the full frequency range. Something like:

[CV in] L / 2 + 0.5 * 127


Then on the output I'm using a CapytalkToSound with the following:


The CVOutScaling is very close to 1.0, I just tweak it slightly to make sure it's in tune. It's dividing by 127 that does the conversion from note number to 1 volt per octave. It's 127 because that's the full range of midi note numbers. (This works with the Expert Sleepers interfaces because they're designed to give the full modular CV range as output, +-10V. For other DC coupled sound cards you might have to adjust the scaling.)


The other thing you might want to have a look at is the Capytalk hzToSignal message. This converts a value in frequency to a value suitable for an audio channel (ie in the range [-1 1]).

Although it's called hzToSignal, if I remember right, it does work for any frequency value as long as it's a ScalarWithUnits where the units are some kind of frequency. In other words you could do something like:

3000 bpm hzToSignal

There's also the inverse message, signalToHz that converts from a pitch represented in the range [-1 1] that could be sent over the audio channel, to a Capytalk value in frequency. 

answered Oct 18, 2019 by alan-jackson (Virtuoso) (12,280 points)
edited Oct 18, 2019 by alan-jackson
Hi Alan !

thank you so much yet again . This gives me a good direction and again I learnt  .

Did not have a lot of time but actually this :

(!GenFreq hzToSignal * 10.34) + !Ofset

in a Sound to Global Controller gives me almost a perfect result veeeery close .

I have no clue is this is correctly done  (10.34 V is actually my maximum voltage out 1 Kyma  = 10.34 V ES-3) but it works almost good enough for my ideas.

Did not try a lot the ES-6 but I think it will work perfectly and the integration with the modular will be perfect .

I wish you all a nice day from Malaysia