IDE上で機能を実装し、コンパイルは通ったたものの、Arduinoへのアップロードを完了していないので実際に動くかどうかはわからない。
OpenThereminUnoの不満は、VCOの温度変動が大きすぎる点と、それを補正するマニュアル機能が存在しないところにある。 また、折角WaveTableを参照する仕組みなのに、波形が固定なのも勿体無い感じがする。 オリジナルはROMのデータ領域を1/8しか使っていないので、メモリーには余裕がある。
OpenThereminUnoの最大の特徴は、通常は3個必要なVCOを2個しか積んでいないことで、リファレンス用の周波数が固定されたVCOの発振周波数は、Arduino側でキャリブレーションを行った時点で数値化され、これが基本周波数となる。 キャリブレーション完了後は、ThereminShieldから入力されるVCOの数値との差分を元に、Wavetableを参照して、音声が出力される仕組みだ。
この仕組みの問題点は、ズバリVCOの周波数ドリフトにある。 通常のThereminでは、VCO間の温度係数がほぼ同じなので、ズレは同時に発生する。 ズレ自体の解消はなかなか難しいが、ズレの量と方向が一緒の場合は相対的に発生するズレは小さくなる。 Thereminのピッチ検出部に同じ構造のVCOが使われているのにはそういった理由がある。
OpenThereminUnoで発生する問題は、このズレがArduinoにサンプリングされた方は当然ながらRockSolidなのに、VCO側では容赦なく変動が発生するため、相対的にズレが大きくなってしまう点にある。
これを解消する方法としては、まず正攻法としてVCOの温度安定度を改善する事を思い付く。 VCOを構成する他の部品との相対的な温度計数を勘案する必要があるが、セラミック・コンデンサーをマイカタイプに変えるだけで、安定度が向上する可能性が高い。
一方、Arduino的にもっとインテリジェントな形でドリフトを相殺する手法としては、温度センサーからのデータを参照してオフセット値を相対的に変動させる方法が考えられる。 こちらの方がリーズナブルでよりArduinoっぽい手法だと思うのだが、何れにしてもズレの方向や大きさと温度の相関を探るための実験が必要だ。