cvos - control-voltage controlled software oscillator

modular synths menu

analogue meets digital

This Eurorack-contraption (Doepfer A100 compatible) converts a "control voltage" to sound, it is thus an oscillator .

There are other solutions for this, but this implementation does it in software giving you infinite possibilities!



The setup consists of a Raspberry Pi connected to an Arduino via I2C. The Arduino has an opamp to convert the control voltage to a voltage that the Arduino can handle.

The Arduino functions as a cheap I2C ADC for the Raspberry Pi.


The eagle cad schematic can be found in this file: cvos-0.6.tar.xz.

As you can see it is not using the regular hardware I2C pins but some others instead. See below for the reason.

Raspberry Pi configuration

This setup has been tested with a raspberry pi 2b, a raspberry pi zero w and a brand new raspberry pi 3b.

The Raspberry Pi has issues with hardware I2C. At this website you can read how to configure the required software I2C bus (in short: add "dtoverlay=i2c-gpio,bus=3" (without quotes) to /boot/config.txt and reboot).


i2cadc.ino is the source-file for the Arduino. Any AVR based Arduino should do, I used an Arduino Nano.

The program can be retrieved from GitHub.

Run it with -h to see a list of command line arguments, e.g. with an audio device-name: sudo cvos -d hw:0,1


Q: no sound at all
A1: if you connected something to the HDMI port, then audio will go through that channel (this can be changed with the raspi-config utility)
A2: did you select the correct audio device? run cvos -L to see a list of audio-devices. then use -d to select one
A3: period-size too small, see question about "sound stutters"

Q: sound stutters
A: increase the "period size" using -p .... default is 256. on-board audio requires a value of at least 1024

Q: audio is distorted via rpi headphone connection (raspberry pi 1)
A: use an amplifier between the rpi and the headphone

Q: I get an access denied error
A: the program requires access to /dev/i2c-3, you can get that by running it as root (via sudo)

Q: I get tons of I2C errors and no audio, also "i2cdetect -a -y 3" does not detect anything
A: upgrade your raspberry pi to the latest kernel

Q: if I add echo, it sounds distorted
A: lower the amplitude

Q: there is a tiny latency when detecting new notes
A: use '-t' to set a high note-sample-rate. default is 100, max is +/- 1500



This is a sample of Dennis from NURDSpace. He said "aaa" and that was then played by cvos while being modulated with a 1Hz sinus. It might be a bit noisy but that is caused by a not-so-high quality microphone. CVOS has filters that can be enabled at run-time to solve this.

1hz-sweep.flac is a sweep of the whole frequency range, played with a sinus curve as the instrument.

1hz-sweep-triangle.flac is a sweep of the whole frequency range, played with a triangle curve as the instrument.

pressing random keys on the midi keyboard

This is recorded via a midi-keyboard connected to a midi-to-cv converter and that is then connected to a raspberry pi running cvos.

random.mp3 random keys pressed with a sinus curve as the instrument

random_niz.mp3 same as random.mp3 but here with Dennis as the instrument


tune.mp3 by wotwot

abba-chiquita-cvos-the_niz.mp3 Abba's Chiquita with the Dennis instrument

abba-chiquita-cvos-sine.mp3 Abba's Chiquita with the sine curve instrument


user interface



The Lotter allows you to participate in lotteries from all over the world!