CV Interface?

Has anyone built a less expensive CV interface between VCV Rack and Euro-Rack type modules yet? I see this topic from 2019 that references the ES-9 (Expert Sleepers - ES-9 USB Audio Interface) but it’s over $700,00 Canadian.

It’s hard because there are only really two transport protocols for CV in general usage: MIDI and audio. MIDI is cheaper but has the limitations that everyone knows (7-bit values) and so is not great for “true, modular, fluid CV with high resolution”. For that you need audio, which means an audio interface, and in that realm Expert Sleepers reign surpreme. Trying to invent a third protocol apart from those two is probably doomed to failure, technically and financially. So there we are…

I don’t think audio is the only way. I’ve had OSC running with CV outputs. Nothing fancy, just the rpi pico builtin dac’s - and running at 1000 Hz sample rate.

I wrote a bit about before.

Thinking about purchasing the ES-9 - #10 by Jens.Peter.Nielsen
OSC (OpenSoundControl) modules in v2? - #17 by Jens.Peter.Nielsen
Bring in measurements from a digital multimeter

Still haven’t gotten around to hooking up my STm32H750 Daisy board - it has better converters (16 bit)

I don’t expect to see a cheaper CV I/O interface. It’s a niche market, you have to write embedded software + drivers for win/linux/mac - and it takes some expensive converters to get the required resolution (relatively speaking, the PCM3168A is €5.198 for 1000+ units)

Here’s some images i found of the ES-9

1 Like

Yeah, I forgot about OSC, it seems to be in quite low usage and also seems quite fiddly and difficult to get working right broadly. I also think that all things being equal it’s impossible to make equivalent hardware OSC modules cheaper than MIDI modules, so I think “cheap” is out the window, but probably cheaper than audio, maybe…

I have the ES-9. It’s an absolute beast of a hardware module, and software wise as well. Big, hot and expensive but it can fullfil all your wet dreams :slight_smile:

What’s the max. signal resolution in the OSC protocol spec?

There are several data types (int32, float32, string, blob) - no limit on resolution really.

time resolution depends on the transport speed (USB/ethernet etc) - no limit in OSC. I did a UDP dump in an earlier post. Haven’t got similar for USB to show.

1 Like

Cool. I suspect that, apart from cost, the major challenge of OSC compared to MIDI and Audio would be latency and especially jitter. It’s a network protocol with few guarantees made I imagine, about the totality of the hardware + software (incl. OS) stack combined. MIDI is much simpler in that way.

OSC can be usb - jitter/latency should not be worse than a USB audio protocol interface I imagine - haven’t done the reading or measurements.

Just thinking outside the box here but… one thing that might be fun to try, is to go much simpler than MIDI, down to transferring serial over USB, which is a generic protocol. Just transferring simple, raw values in a point-to-point duplex protocol, leaving the endpoints to interpret it. Hardware and software wise it’s a lot simpler and might achieve the best that can be done over USB. It’s also much more limited of course but that might not matter so much. Just speculating…

I’m not skilled with C++ , haven’t found a cross platform USB serial library in C++ (boost is a candidate I have tried figuring out Boost.Asio - 1.75.0)

Perhaps some day a kind developer will pitch in with a VCV module with accompanying code for arduino or perhaps micropython to make it happen.

I don’t think a library specifically for USB needs to be used, as long as the device shows up as a serial device for the OS. I did some small C++ experiments on Mac Os with an Arduino, but I don’t recall if I used a 3rd party library or just Posix calls for that. (It was many years ago and I didn’t really do much with it. Just wanted to do see if using the Arduino from C++ was possible.)

I would imagine that the underlying USB and serial C++ libraries of Arduino is extremely cross-platform, ported to a lot of hardware, and also open source.

https://www.arduinolibraries.info/libraries

Yeah, plugging an Arduino into a computer with USB and getting a serial console is extremely simple, like hello-world stuff, and I belive all the underlying code is open source. It’s like that for all/a lot of the popular hobby boards.

Arduino code is essentially all C++, they “just” made some simple top-level functions to use the underlying libraries, making it very simple to use.

Yes, if the MCU board has USB, it’s usually possible to get a “USB Communications Device Class” library for it.

I was thinking about the VCV part for mac, linux, windows etc.

Just came across this whilst looking for something else:

https://community.vcvrack.com/t/rack-development-blog/5864/54

Added fix suggested by @stoermelder to allow plugins to register their own audio/MIDI drivers. For example, it will be possible to create a plugin that installs an audio driver that communicates with an Arduino over a serial connection and exposes CV as a 1000 Hz audio interface. You will then be able to select the “My Custom Arduino Protocol” driver in VCV Audio, and it will handle resampling as needed. Or, register a MIDI device that converts MIDI CC messages to/from your custom Arduino protocol. I’m sure there are many ideas the plugin developer community can invent with this API.

:slight_smile: