OpenTheremin V3 - High Definition

Thanks to a great contribution by theremin engineer and musician Thierry Frenkel all OpenTheremin V3 can now be software updated to High Definition Audio.

The new software takes the volume control from 8 to 16 bit resolution. It also applies an approximated e-function which allows a much more expressive playing. With the new code, the volume start close to the antenna is smoother and the volume field higher, so that volume nuances can be control over the full dynamic range. This is important to play expressive music and is better adapted to the human ear. 

With his huge experience as a theremin engineer Thierry also optimized the register function witch now has 3 positions. This allows to play the usual (default) pitch range in center position and to transpose it a clean octave up or down from that by turning right or left.

The theremin expert confirmed: "The pitch side is already very well optimized. After calibration and some fine tuning with the pitch potentiometer, you have a pitch field with almost equal tone spacing over 5 octaves which can be played like on an analog Theremin with the classical aerial fingering technique. Thus, switching between analog instruments and the Open.Theremin is without difficulty for an experienced player who will find a very similar feeling."

Thank you Thierry for your great work. The OpenTheremin V3 High Definition Audio code can now be downloaded from the GitHub and will be the standard for all new OpenTheremin kits.

https://github.com/GaudiLabs/OpenTheremin_V3

For those of you interested in the technical details of the modification some key elements here and more in the comments on GitHub.

  1. Fix a wavetable addressing issue (found by @miguelfreitas)
  2. Use the Arduino's hardware SPI to control the DACS and use the Latch signal to reduce audio jitter
  3. Improve the register switch to transpose by clean octaves and keep the tone spacing and pitch tuning consistent
  4. Improve the volume response to give a smoother start and wider dynamics (*)

(*) This relies on a recent gcc compiler version. Make sure to compile it with the Arduino IDE >= 1.8.10