MIDI テルミンの作成
2002.1.10
2002.1.15 演奏サンプル追加
はじめに
今回は「テルミン」という電子楽器を作ってみます。
Webサーフィンをしていたら、たまたまテルミンを自作されている方々のホームページを拝見して、これに触発されて昨年中は1つ試作してみました。最初の感想としてはすごく演奏技術が必要だということ。ちょっとした手の動きで音程が微妙に変わってしまうので、一つの音程を保つのすら大変でした。一生懸命やろうとするほどに力が入ってしまい、手がプルプルするものですから勝手にビブラート演奏(笑)になっちゃいます。まぁそんな具合に楽しんでいて、これを入力装置としてシンセを演奏させたいと考えました。市販のテルミンにはCV出力などが付いているものもあるようですが、私の持っているシンセがRoland CM64とSC-88、CASIO LK-60といずれもMIDI楽器なので、MIDI出力のテルミン(発音方式が違うから厳密にはテルミンじゃないかも)を新たに作成することにしました。
回路
ピッチ&ボリューム検出部分は有名な「144 Theremin」の回路を参考にしました。
アンテナに接続されたLC共振回路へ数百kHz〜1MHz程度の固定周波数を入力し、アンテナに手を近づけたり離したりすることによってfoの変化に伴う変調出力電圧が得られます。これを復調後、OPアンプで 0〜数Vの信号に変換して、さらにA/Dコンバータによってデジタル値に変換します。A/D変換するにあたって、当初10bit A/Dコンバータ内蔵のPIC16F877を考えていましたが、MIDI規格ではピッチベンドの分解能が14bit(人間の聴覚がピッチ変化に敏感であることが考慮されているらしい)となっていることから、今回は12bitのMCP3204を外付けにして、MIDI信号への変換は使い慣れたPIC16F84を使うことにしました。
アナログ部分はどうしても不安定で、いろいろな環境要因によって調整が必要な部分が出てきてしまうため、発振周波数調整、出力ゲイン、バイアスの3つを外付け可変抵抗で調整するようにしました。実はアナログ回路は全然詳しくないので、かなり恥ずかしいメチャクチャな作りです(^^; ・・・えらく不安定だし、じぇんじぇんダメじゃん(爆
一応、ピッチ、ボリューム、MIDIチャンネル、プログラム番号はLCDにリアルタイム表示するようにしました。
MIDIテルミン回路図(1600*1200 GIF 38KB)
- PICは10MHzで使用します。
- VRはいずれもBタイプで VR7,8は半固定です。
- L1〜4のコイルはAMラジオのOSC用(通常、コアが赤く塗られているらしい)で200〜400μH程度の物であれば使えると思います。
- PICの入力ピンが不足したので、UP/DOWNスイッチはADコンバータのCH2に接続しました。
- A/Dコンバータへの入力を0Vから扱いたかったので、OPアンプにCMOSのLMC662を使いました。
- OPアンプ、ADコンバータ、LCD、PICは秋月電子通商で入手できます。
プログラム
MIDIテルミン プログラムソース&Hexファイル (midi_tm10.zip 8kb)
とりあえず最初の版ということで、プログラムエリアをほぼ使い切ってしまいました。残り4ワード(笑)。
バグ修正や機能追加の時には少しダイエットしなければいけませんね・・・MIDIの初期化では、Pitch Bend Sensitivity(±2オクターブを変化幅にする)、Program Change (音色番号1)、Expression(= 0)のメッセージを送出しています。接続するMIDI機器の種類によってはメッセージを変更する必要があるでしょう。私はRolandのSC-88でのみ確認しています。
A/DコンバータMCP3204とPICはSPIインタフェースによるシリアル通信を行い、CH0とCH1でそれぞれVolume(音量)とPitch(音程)データを取得します。VolumeデータはExpressionメッセージ、PitchデータはPitch Bendメッセージに変換して送信します。
送信するMIDIメッセージは32μs間隔の割り込みルーチンによってMIDI規格の31.25Kbit/sシリアルデータで送られます。オプション機能として、MIDI出力チャンネル、プログラム(音色)、ノート(基準音程)の変更を行うことができるようにしました。
なお、Volumeが0になった場合Note Offメッセージ、Volumeが0から0以外に変化した場合Note Onメッセージがそれぞれ送信されます。また、発音(Note On)時のvelocityは60h(フォルテ)固定としています。
調整方法
最初の調整は結構面倒です (^^;
◎準備
- アンテナ、LCD、各スイッチとVRを接続します。
- 半固定のVR7(GAIN)は+5V側に、VR8(LCDコントラスト)は中点に回しておきます。
- VR1,VR4(Pitch/Volume adj)は中点、VR2,VR5(BIAS)はGND側、VR3,VR6は0Ω側に回しておきます。
- L1〜L4のコアは中央付近で統一しておきます。
◎調整手順
- 電源を入れ、LCDの表示が丁度良く見えるようにVR8でコントラストを調整します。
- L1のコア(とL2のコア)をゆっくり回しながらLCDのVolume表示値が一番小さくなるように調整します。
このとき値が小さすぎて分かりにくければVR7のGAINを調整します。
(この調整はアンテナに手を近づけないようにしながら行います)- Volumeアンテナに手を近づけて、Volume値が変化することを確認します。
- L3,L4で同様にPitch調整を行います。
Volume側とPitch側の発振周波数が近いと干渉してしまうことがあるので、できればお互いのコアの締め具合を変えて周波数をずらせておいたほうが良いでしょう。- Volumeアンテナに手を近づけないようにしてVR3(Volume gain)を少し100k側に回し、次にVR2(Volume Bias)を+5V側に回しながら、Volume値が0になる点を探します。
- アンテナに手を近づけてVolume値が0から127の間でうまく変化するように、VR2とVR3を調整します。
変化が極端で調整が難しい場合、VR1(Volume Adj)で変化具合が丁度良くなる点を探します。
どうしても手とアンテナの間隔と出力値の関係がリニアにはならないので、VR1でL1の発振周波数を少し変えて共振のカーブが直線に近い部分に持っていってからVR2(Bias)でゼロ点調整する感じが良いと思います。
また、次のPitch調整とあわせてVR7でも感度のバランス調整を行います。- 上記5〜6と同様にPitch値が0〜4095の任意の範囲で適当になるようVR4〜VR6で調整を行います。
- 実際にMIDI楽器に接続して、発音状態を確認しながら再調整すればOKです。
オプション設定
SW1(MENUキー)を押す毎に「Channel Change」「Program Change」「Note Change」と表示が進みます。
設定したい項目でSW2(SETキー)を押すと、その項目の設定値を変えることができます(SW3,4のUP/DOWNキーで)。
決定はSETキー、キャンセルはMENUキーです。
ケースの作成
金属製のケースに入れるのは良くないという話を聞いたので、木でケースを作りました。
何をアンテナに使ったらいいか悩みましたが、結局ラジオのロッドアンテナを流用しました。
↑ケース内部
↑パネル
演奏サンプル (^o^;
演奏の感じを知って頂くために1分ほどのサンプルを用意してみました。
ところがうまく演奏できるだけの技術がないので、音が微妙に外れて何となく気持ち悪いです。そのへんはどうかご勘弁ください・・・A.P.ボロディン/「だったん人の踊り」より (449kb mp3) MIDIテルミン+SC-88VL+わし(笑)
SC-88のAポート入力はシーケンサで打ち込んだ伴奏オケ、BポートにMIDIテルミンを接続して演奏しました。音色はNo.55 SynVoxを使用。
さいごに
勢いで作り始めた物でしたが、何とか音程と音量をコントロールできるものにはなりました。しかしアナログ部分の回路がよくわかっていなくて結構デタラメに作ってしまったので、どうしてもピッチ等の変化が急激で、手・アンテナ間の距離と実際の音程の感覚にずれが出てしまいます。もう少し遠くから反応して、リニアに変化してくれると扱いやすいのですが・・・誰かそこんとこ作ってくれないかなァ。。。(^^;