Open Theremin and Zynthian


Hi @all. I am Urs, the maker of the OpenTheremin and since the arduino based theremin now has MIDI, I found the great Synthian project and want to make the two open hardware projects play together. Fernando sent me a Zynthian V2 and I sent him an OpenTheremin. The Synthian box works great. It was a pleasure to build and once the 9 Gig SD image leeched everything was running smooth. I then configured the OpenTheremin as HID USB device and it does play :-).

Now the OpemTheremin uses pitch bend to play. And the pitch bend range of the MIDI synth and the theremin should be set the same, and as big as possible. What is the pitch bend range of the Synthian? I read about the tuning feature and I guess this is using the pitch bend feature (an probably a low range). Is there a way to change the pitch bend to 24 Semitones?

Any hints welcome.


Hi “gaudi”, welcome on board.

Just to say that i have two of your “old” OpenTheremin.UNO, and I love them.

Never tried to use a Theremin to drive a Zynthian, tho! :slight_smile:


Hi Urs,
Can you confirm a bug I found?
If you set the pitch wheel to a value other than 63 (middle) without pressing a key, it won’t start there but in the middle once you press a key.


Hi @gaudi!

You can change the “pitch-bending” range, but probably not for all the engines.
It depends on the engine you are using. Some of them don’t support pitch bending at all, like setBfree.

The next 3 engines:

  • ZynAddSubFX
  • FluidSynth
  • LinuxSampler

are configured by default to 200 cents (+/-2 semitones), what is quite standard. Of course you can change it, but i haven’t try. I recommend you to start with ZynAddSubFX. If you login into your zynthian from a X-window system using the “-Y” flag, like this:

# ssh -Y root@zynthian.local

You will get the ZynAddSubFX GUI in your display and you can access the pitch-bending range from the “controllers” dialog. Regarding the question of making the change “presistent”, there are a few options … but i should think about the best one.

Of course, if you change the PB range, the “fine tuning” option wont work, because it’s adjusted to work with the 200 cents default.



Regarding my Open-Theremin, it’s almost ready!! I only have to install the software … jejeje!
I will do it tomorrow and in this way i could help you with the “PB” subject … :ok_hand:



Hihi - “I” have also an OpenTheremin (since 2 years)… I built one for my brother… will try to get it for a week for testing the next days :wink:


Guess the OpenTheremin code (written by our community member Vincent) resets the pitch bend at every NOTEON, so I guess I can not verify this easily.


@jofemodo - Thanks, will try that. And thanks again for sending me this great device. The metallic box is gorgeous. The OpenTheremin MIDI code can be easily adapted to 200 cents (+/-2 semitones), that’s one solution. Bigger range would be better to make nice glissandos. Maybe as an extra option in the CONFIG menu would be nice for the future.



@Axeman @C0d3man Happy to meet some OpenTheremin community here. Open source sound hardware is great. I am playing with Zynthian for two days now and I enjoy all the github, torrent, blog, news, source codes and forum on this project. Check out the new MIDI code if you have a V3. It’s a lot of fun playing the trumpet on a theremin :slight_smile:




Ahhhh!!!, theres’s a new version! Nice! I only have the Theremin.Uno. I think I should buy a new one.

Regards, Holger


Oh yes… ditto! :yum:


Hello, I am Vincent, I wrote the MIDI code for Open Theremin V3.

I see several remarks here that I need to take into account for some improvement:

  • Standard 200 cents Pitch Bend Range setting is missing in the open theremin’s midi.

  • NoteOn and Pitch Bend reset while playing:
    When the user start from a note in one direction the Pitch Bend simulates pitch changes. A new note is generated when the Pitch Bend limit is reached and then Pitch Bend is reset to a more centered value. And then the process goes on…

This architecture is intended to be used with a wide Pitch Bend range (7, 12, 14 semitones) because the user can play long glissando like this.

For smaller Pich Bend Range it is less efficient: quick pitch changes due to reset happen more often and have some audible effect.
This is why Pitch Bend is not sent in 1 semitone mode.
2 semitones mode is even less musical: I tried it and a glissando to a 5th, for example, is tricky to play or even not playable at all if Pitch Bend is not sent in this mode.

I try to see if I can create a Staccato mode in which new NoteOn are not generated and Pitch Bend stays at the maximum once the limit is reached, like a bend on guitare when maximum tension is reached. It should do the the job for smaller pitch bend modes.

Anyway this idea may require some longer work in a specific Github Branch.
If very required, I could implement 200 cents mode before but I am bit reluctant to it as this mode doesn’t sound very well. Maybe I can give some instructions to activate it by a tweak.


Hi @MrDham!

I’m thinking about the best way of increasing the PB range for the engines that supports it:

  • ZynAddSubFX => This will be the first! :wink:
  • FluidSynth
  • LinuxSampler

BTW, it will be really nice to use the OpenTheremin as a MIDI controller sending messages different of PitchBending, specially CC, so you can control cutoff or resonance with one hand … what do you think about it?

Kind Regards,


@jofemodo, you should work on your sales pitch :slight_smile:
Everybody needs a second Zynthian as separate Midi Filter engine.


You are completely right … my head is gonna explode!!! Puuuuum!!! :rofl::rofl::rofl:
Love you, @mheidt! :love_you_gesture::love_you_gesture:



I implemented 200 cts mode for sake of compliance with standard (PITCH pot : 1, 2, 7, 12 or 24 semitones in midi calibration mode).
It is commited on my Github master branch.
I also labeled the current design with tag V1.0

@Jofemodo, to answer to your question, Yes, I can affect theremin pitch value to CC16 (ribbon controler) for example.

Anyway, I need to collect all request for more flexible design and to develop them in a separate branch as architecture could be impacted.
The challenge is to have configurable design without bringing too much complexity to the HMI (hidden settings, …). I also need to avoid starting headlong in a wrong direction for the V2.0.

Is there any filtering and or cc redirection function in Zynthian ?
Or do you know this bundle: ?

It should resolve specific needs before I develop this design furthermore.
Especially “midiConverter3” would do the job for most applications (it can redirect notes to cc).
Such solution would need possibility to cascade modules like this:
MIDI IN —midi signal—> MIDI converter module —midi signal—> Soft Synth Module
I am a bit new here, I don’t know if zynthian allows that.


Strange… ? doesn’t work (Error 404) despite I just tried this link successfully during the afternoon (European time). It worths giving a try later anyway.

Anyway you can also use
There are some files named “pizjuce****” and some other are named “pizmidi****”.
The bundle that I am refering to is “pizmidi****”.


Hi @MrDham!

Thanks a lot for implementing the 200 cents code. I will check it ASAP!

Regarding Zynthian, it have a complete MIDi filtering system, based in rules:

It’s a new feature, and probably there are some bugs, but it’s working. It can map almost any MIDI message in any MIDI channel to any other MIDI message in a different channel, and more :wink:

It can not make range conversions, but this feature could be added if needed.

Regarding the Open Theremin connected to Zynthian, there is no need to implement CC in the firmware, as the PB can be mapped to any CC. Also the volume CC7 can be mapped to other CC. Something like that:

MAP CH#1 PB => CH#1 CC#71
MAP CH#1 CC7 => CH#1 CC#74

My suggestion was wishful thinking about making OpenTheremin a more flexible controller …

Kind Regards


This filtering system is a very smart solution, great !

The first release of MIDI open theremin is to make it speak to other synth devices. That’s done.

Sure I need to see how I can make it more configurable.
There is many way to go for that. That’s why I want to collect different users’ ideas and sort out some architecture.
BTW, assigning a CC to pitch the antenna is one of these good ideas !

I was just wondering if you had some temporary solution on your side during this development.



@gaudi and @jofemodo some of your expectations are implemented and under verification process there :

I let you have a look at the readme file.