Open Theremin and Zynthian


Thanks @MrDham!

I will test it ASAP :wink:



Ahhh nice! Just created my HIDuino-based OpenTheremin and hopefully can test this soon! Just flashing the new software.

Thx && regards, Holger



I corrected two not so nice bugs in the branch “V2-Project”

Corrected bugs :
Default startup settings eclipsed by pot position.
Stuck notes when changing channel.

Maybe it worth re-downloading the files if you use “V2-Project” branch.



I implemented the last idea I had in my to do list into the branch “V2-Project”: Velocity Sensivity.

Volume Antenna Loop generates selected midi continuous controler change, starting NOTEON and ending NOTE OFF (when playing staccato).

The volume trigger can be configured so as we have some volume at note attack on percussive sounds. The volume trigger setting is also used to set sensitivity for velocity (how fast volume loop hand is moving when note is triggered). Matter of fact, the higher is this setting, less margin we have for volume variation. It is compensated by increase of velocity sensitivity.


Hi Vincent @MrDham,

I tried the last days with Open Theremin V3 and MIDI. The standard firmware works, but I has some problems with HIDuino on my Uno: seems that I have a problem with clones of the Uno. I set the baudrate to 31250 in application.cpp. But also test programs don’t work. Will buy a non-clone Uno and try again.

I also tried a Leonardo. But the Open Theremin code won’t work with the Leo - so the MIDIUSB library can also not be used :thinking:

Do you have tried HIDuino on a UNO-SMD?

Regards, Holger


Hello Holger @C0d3man,

I have just one Arduino Uno V3 with the “dual in line” ATmega328P and an Atmel 16U2 USB controler.
I tried Hiduino using Atmel’s FLIP software without any problem.
(BTW, my personnal goal is to use open theremin v3 like a standard usb midi controler)

By “test software” do you mean the midi tutorial that is in Arduino’s IDE example library ?
I tend to think that if this test software don’t work, it means that problem is rather in the USB controler.
Do you know which one is it ?
Did you use Flip or an ISP ?


That’s also my favorite. I tried to flash the HIDuino software with dfu-programmer - but it seems not fully to work.

I used the standard MIDI libraray, as mentioned in the installation scripts from HIDuino. When I use a simple NoteOn-delay-Noteoff-delay I get nothing shown in MIDIOX or jack_dump_midi. Also the Theremin shows no output. If I use the MIDIUSB-library with a Leonardo I get events - but the OpenTheremin software ist not compatible with a Leonardo.

So I think also I have a HIDuino-flash-problem. Currently I am working only with dfu-programmer and “Arduino as ISP”. I have ordered a Tiny-USB-AVR-programmer and will try again. I hope I can get it running until Dec, 2./3. 2017: Mini-Maker-Faire @ Conrad Drone Champions League (Station Berlin)

Just to be sure: Sending MIDI events is only done by Serial.print(), right? So I can add a simple MIDI-OUT circuit to the serial pin for having a MIDI-OUT?

Regards, Holger



I use “Serial.write” (to send bytes) rather than “Serial.print” (to send characters representing the digits of a number):

But yes, the principle is there, you can add a physical MIDI-OUT like this :



Ok. I will try with some simpler tests. Perhaps my new ISP will help.

Ok - that’s my fallback for MakerFaire :slight_smile:

Thanks, Holger


OK, Keep me updated, I am curious of knowing the result of your investigations and I’ll try to help you if I can :slight_smile:


Hi Vincent,

I got it working :smile:: I used a Tiny-USB-Flasher and avrdude and now I got HIDuino flashed onto the Uno.

I havn’t had much time (next week is MakerFaire and I am building a Zynthian 2, also setting up the PA hardware etc…), so I have only tested, if I get MIDI data out of the Theremin and sound out of the Zynthian.

If I use your Open-Theremin-MIDI sketch, does the “normal” audio generation of the Theremin work? Can I play MIDI-trigered sound side by side with Theremin sounds?

Regards, Holger


Hello Holger,

Nice to hear that your Hiduino works.

Yes, I kept the audio unchanged in my two open theremin sketches (“master” and “V2-Project”).

You can play audio and MIDI side by side. Provided that Zynthian and Theremin are set with the same pitch bend range, you should hear the same note on the audio and on the Zynthian if your hand is static.

When your hand is moving, you may notice some chorus effect on note transition and on vibrato because of inevitable slight delays between the audio and the MIDI/Synth processing. This chorus is rather nice and can be controlled by moving the pitch hand. Players could take advantage of it.


Ok, thanks! I will try this the next days.

Regards, Holger


Hi Vincent and all

Finally found some time to update the OpenTheremin website for the new version 2 of the MIDI software (was about time) and test it out.

The new MIDI implementation allows for a lot of settings - it’s great, check it out. (The two pot interface is a bit tricky though).

I got best results by setting a high pitch bend range on the Theremin and same on the ZynAddSubFX (using the X-window GUI as described by @jofemodo ). NOW how can I make this setting permanent or change it without a computer? Anyone has an idea?

Will be presenting the OpenTheremin together with the Zynthian at the N/O/D/E Festival this weekend.



Hi @gaudi!

Good news! I will try the new version ASAP …

Regarding your question:

I think the best way is to save a ZynAddSubFX XMZ file (parameters file) in this folder:


You can do it from the native ZASFX GUI. This kind of file will save/restore the ZASFX global parameteres, including the pitchbend range.
After that, you can load this XMZ file from the Zynthian UI. You will see there is a “XMZ bank”.

Once loaded the ZASFX global parameters, you can change the bank/intruments from the Zynthian UI normally and the global parameters should remain as loaded. Instrument files (xiz) doesn’t modify these parameters.

Best Regards!


This is really great! :clap::clap::clap:
Please, send some photo or video!!



Thank you for this hint. Was looking for a way to save the settings permanently but did not know where. Will try this.

What I did and what works is I added the following line to the in the set_preset

	liblo.send(self.osc_target, "/part%d/ctl/pitchwheel.bendrange" % layer.part_i, 5000)

This way I can define the pitchwheel bend range and it is automatically set for every new layer. Would be best to make this an adjustable parameter maybe.




I wish I could be there… But it is not possible for me at this time, unfortunately.

Maybe, I could make it more user friendly by adding a small 2*16 character LCD showing selected parameter and value. It should be optionnal in order to keep compatibility with the original Open Theremin V3 shield.
A longer term development anyway…


OK! I will do, but i’ve to modify some code for for allowing this parameter to be modified. Also, it will break the “fine-tune” feature, that is based in a “standard” 200 cents pitchbend range.



There is also an OSC command to read out the bend-range. Maybe you can adapt the fin-tuning to the range that is set on the corresponding synt 8-).