去年単音のミニキーボードを作ったが、和音が鳴るものを作ってみようと思い、ハモンド風の音源を作ってみた。ハモンドにはレスリースピーカーがつきものなので、こちらもまねしてみた。
和音を鳴らせるCPUを探してみたところ、DSP機能付きで40MIPSで動き、16bitのDACを2チャンネル持っているdsPIC33FJ64GP802というものを発見。これで実験してみたところ24KHzのサンプリングで90本のサイン波を鳴らすことができた。
これを使うことにして、音源方式を検討してみた。FM音源は音作りが面倒だし、波形メモリ方式はメモリが足りない。ハモンドオルガンのトーンホイールの数を調べてみたところ、79ヶということなので、ハモンド音源を作ることにした。
まず、ユニバーサル基板にCPU、電源部、出力部、鍵盤スイッチ、を作った。dsPICは3.3Vでないと動かないので、電池2ヶを3.3Vに昇圧して使う。出力部はトランジスタでヘッドホンを鳴らす簡単なアンプを作った。
ソフトは、サイン発生部はDSPのMAC命令を使うためにアセンブラでコーディングした。各トーンホイールごとの振幅は別途計算しておき、サンプリング周波数ごとにサインの発生と振幅の乗算を行う。
レスリースピーカーのシミュレーションは、音源の出力を遅延用のメモリに書込み、読み出しのアドレスを周期的に変化させて周波数の変化をつけ、さらに前後と左右の音量の変化をつけるようにした。本物は高域と低域に分けて別のスピーカーを回しているが、今回は全体を同じように変化させている。音量変化をなしにすると、音が広がる感じのコーラス効果になる。この計算もアセンブラでコーディングしてある。
各フィートの音量とエフェクトの設定を8ヶずつプリセットできるようにし、白鍵で呼び出すようにした。デモ用に自動演奏する仕組みも作り、ジャズのピアノトリオのデータを入れてある。
ハモンドといえばドローバーが必須なので、スライドボリュームでドローバーを作った。各フィートの音量を制御する9ヶのボリュームと、全体の音量を制御するボリュームの10ヶのボリュームを使う。エフェクトのパラメータも9ヶなので、ドローバーで値を設定できるようにした。
こちらは8bitのPIC18F26K22を使った。ドローバーの値(0-8)をLEDで表示することにしたが、PICのピン数が足りず、5ヶのLEDで表示することにした。ドローバーで作ったパラメータをプリセットで記憶できるようにした。各フィートの音量とエフェクト、それぞれ9種類記憶できる。
PICのプロフラム領域に余裕があるので、こちらにも自動演奏の機能をつけておいた。
また、MIDIのキーボードで演奏できるよう、MIDI入力のインターフェイスをつけ、音源側に送るようにした。