Testing the water: analog synth controlled via Rack

Just curious what the interest level might be on an analog synth controlled from VCV Rack. By analog I mean full analog audio path and analog modulation options. VCV Rack is used for providing control voltages and sending commands for signal routing (“turn on VCO saw wave”, “route VCO1 to VCO2 sync”). All abstracted out via Rack modules. Right now I’ve got a working VCO module/physical plugin card and a working VCA/backplane the cards plug in to.

Interface to rack is via USB on a Raspberry Pi Zero. The Pi presents itself as a USB Audio and USB MIDI to a host computer which runs Rack.

I’m not going to say how much work this was to get this far other than it’s been a pretty big effort. :slight_smile: But it is at point where I’m getting close to starting development on a VCF card to get towards a complete synth voice. And starting to think about if/how to get this out to other users. Either as DIY kits, eurorack modules, or I dunno. Right now it’s all open source on github.

Just wanted see interest level if that’s a thing people might be interested in. Depending on how you look at it it’s either the best of the analog/digital hybrid or the worst. Analog stability and a computer interface? That gets a certain LOL. But really it’s got an audio character that is unique and difficult to get otherwise. Yeah, niche market of a niche market maybe. That’s what I’m here for!

12 Likes

That is really cool! I also like to tinker with Raspberry Pi and Arduino for interfacing computers with hardware. But I’ve never done anything quite like this.

Just having a Pi-based device for interfacing audio and MIDI like that sounds like it could be a big hit, not just for VCV Rack people but all kinds of electronic music hobbyists. Is this something you are planning on open-sourcing the hardware and software designs for?

2 Likes

Pretty cool. I already run eurorack and other external synths from VCV Rack via Expert Sleepers modules, it’s great fun when you have a hybrid hardware and software setup.

It’s already open source on github: GitHub - brer-rabbit/zoxnoxious: Analog synth / software interface

just not a lot documentation just yet. One of the really cool things I found was being able to config a Pi Zero as a composite two 32-channel USB Audio devices @ 4 kHz and a USB MIDI device. So that provides a lot of CV channels and control via MIDI. I’ve not pushed beyond 24 channels for actually sending CV data out but I suspect it’ll work.

Don’t expect sample-clock per accurate timing with something like this. But given it’s control voltages at a 4 kHz sample rate I feel like a little bit of clock jitter is acceptable. A Rack 100 Hz sine wave still looks like a 100 Hz sine wav coming out of a DAC.

2 Likes

Wow, nice work!!

That’s clever, I wonder if, at 4khz, it seems like one could get the latency quite low without causing much stress to the computers on either end.

Very interesting! If I understand correctly, you are not using midi sysx commands to control external synths, right?

Not using MIDI sysex as of yet. I’ll likely need to for a couple items on the todo list. Right now MIDI is only used to send Program Changes down the pipe. Program Changes get to the Pi, which then controls an GPIO expander to do stuff like turn on or off a switch. Enable a VCO output or turn on sync for example. Slow moving stuff. Faster stuff like control voltages go over USB Audio.

Future MIDI stuff I’ll need sysex or similar for card discovery: have the Pi communicate out what cards are installed. Also I need to implement stuff like respond to a MIDI tune request. Have Rack generate that and send it down the pipe.

I’ve been wondering if a synth controller thru sysx would be possible in Rack. But I believe sysx is not really possible in Rack. So i am using an external synth editor (midi quest) now. But you cannot automate that.

It may be 4 kHz but it’s 24 channels (currently). From a just-data standpoint that’s the same as 48 kHz stereo. I’ve no idea what goes on down at the USB layer if that’s more traffic than standard stereo audio.

should be fine for sending triggers and gates too as they’re just ramps/square waves

Ah, right, that makes sense. Although, man, I just refreshed myself on the Pi Zero processor, those things pack some real power.

I’m honestly quite surprised. I’ve tested receiving 24 channel audio via USB for this use case. Seems to hold well without dropping samples. That’s doing ~100k SPI transactions/second. And on a single thread; I’ve got another thread listening for MIDI and handling that. Single processor Pi Zero with this app running at real-time priority. Speaking of power, the Zero is amazingly low there. Not huge on power consumption unlike the Pi3 or 4. Ought to easily be powered by a eurorack source, which is what I’ve spec’d for power-wise.

That’s quite cool, if I understand the USB audio spec correctly, the device has to do all of the work to send all of the channels correctly constantly, regardless of whether they’re sending all 0s or if there’s changing data in there. So, if it’s sending one channel without any clicks or dropouts, it should be able to handle all the rest just as easily.

And very neat to have other cores left over to dedicate to other tasks.

Oh, or, maybe not cores, I guess it’s a single core processor, but threading is nice too :slight_smile:

Ah, this also reminds me, that the Instruo arbhar and Lubadh use the Raspberry Pi compute module, CM3+. I think the processor is similar, or maybe the same? But they also have flash built in, which is what they’re using to save audio.

I have an RME audio interface and their driver is capable of sending 32 channels of 24 bit audio both in and out simultaneously over plain old USB 2 and I get something like 2.7ms latency with 128 buffers. USB has a lot of bandwidth for audio.

2 Likes