アナログモデル音源の検討(1997)
DSPを用いたアナログモデル音源の検討
「アナログシンセサイザーの暖かい音を、ディジタルシンセサイザーの柔軟さと再現性で発生させる」という目的で、DSPを用いたアナログモデルシンセサイザーを検討した。最終的に、DSP上にいくつかの音源モジュールとパッチ機構をソフトウェア的に実装し、モジュラーシンセサイザーとして動作することはできたが、ユーザインターフェースの実装ができず、また、フィルタの演算精度が不十分だったため完成を断念した。
ADSP-2181とEZ-KIT
ADSP-2181は、アナログデバイセズ社の16bit固定小数点DSPであり、オーディオ用などの比較的小規模な用途用のDSPである。これを評価用キット化したEZ-KITは、写真のようなボードとACアダプタ、アセンブラなどが付属して1万円程度で購入できた(入手にあたり、当時のアナログセミコンダクタ社さんの協力を得ました)。ボード上にコーデックがあるので、そのままアナログ入出力ができて便利です。
写真に写っているROM基板は、後述の鋸歯状波テーブルです
アナログモデルシンセサイザー
ディジタルシンセサイザーの実装方法の1つに、アナログシンセサイザーのディジタル化を行うモデルがある。今回はこのアプローチを取って見た。つまり、アナログ音源回路をソフトウェアでシミュレートする。
音源の概要
ADSP-2181上で動作するシンセサイザープログラムを開発する。ホストCPUとの通信はIDMAポートを用いて、DSPのワークエリアを書き換える形とする。鋸歯状波テーブルは、バンク切替えを行った上でI/O空間に設置する。音出力はテスト用にI/Oポートとシリアルポートの両方から出す。
VCO
VCOのフローグラフを次に示す
VCO回路図その1
VCO回路図その2
キー情報やベンド、ビブラート情報が加算された後、アンチログ変換を行う。これは、指数関数の性質exp(a+b)=exp(a)・exp(b)を利用し、指数テーブルの上位、下位を別個に指数変換した結果を乗じることで、少ないテーブル容量で高精度の指数変換を行う(CAMPUS-1にも使用)。
発振は、レジスタに周波数値を加算することで、定期的に桁あふれが発生するので、鋸歯状波が発生する。ただし、この鋸歯状波はエイリアスを含むのでそのままでは音源に使用できない(以上vco1.pdf)
次に、この鋸歯状波をもとに、音源の波形発生を行う(vco2.pdf)
■鋸歯状波
音源としての鋸歯状波は、前述の鋸歯状波で、「エイリアス除去済みの鋸歯状波テーブル」を参照することで、エイリアスを含まない鋸歯状波を得る。これは、現在発生中の周波数とサンプリング周波数を考慮し、エイリアスが発生しない限界までの高調波を含む鋸歯状波テーブルを参照することで得られる。これは、
基本波のみ(正弦波)
基本波+第2次高調波
基本波+第2次高調波+第3次高調波
基本波+第2次高調波+第3次高調波+第4次高調波
:
というように、全ての倍音構成の鋸歯状波をテーブルで持っておき、発振周波数により切り替える(前述のEZ-KIT写真のROMはこのテーブル)
■PWM波
アナログシンセサイザーにはPWM波が不可欠である。PWM波の生成方法をいろいろ考えたが、これもエイリアスが出ないようにするため、以下の方式を採用した。前述のエイリアスを含まない鋸歯状波と、それより少し位相のずれた鋸歯状波を生成し引き算をする。こうすることで、鋸歯状波のスロープ部分が相殺されて水平になり、位相のずれのパルス幅を持つパルス波が得られるのである
■サイン波
サイン波は、前述の鋸歯状波テーブルのうち、基本波のみが含まれているテーブルを用いることで得られる
VCF
VCFのフローグラフを次に示す
VCF回路図その1
VCF回路図その2
VCFはディジタルフィルタだが、シンセサイザの場合は、フィルタのカットオフ周波数がバリアブルなので、リアルタイムでフィルタ設計を常時行うようなシステムになっていしまう。vcf1.pdfがこの「フィルタ設計部」で、vcf2.pdfがフィルタ自身である。
フィルタは、ディジタルバタワースフィルタを用いる。カットオフ周波数の変更は、バタワースフィルタの極の回転で行う。
また、レゾナンス効果は、フィルタにフィードバックをかけるとカットオフ周波数が移動してしまうので、カットオフを形成する極を,偏角を保存したままz平面の単位円に接近させることで、ピーク状の周波数特性を得ることができ、レゾナンスと同様な効果が得られる。
フィルタの制御について
こうして設計されたフィルタ係数を、フィルタ本体に設定することで、フィルタの制御を行う
その他のモジュール
その他のモジュールは比較的単純である。VCAは単なる乗算機、EG(ADSR)は、所定のパラメータにしたがって値の増減を行うシーケンスロジックなので、ソフトウェアで容易に実現できる
システム
これらの音源モジュールをDSP上にソフトで実現する。各モジュールは1サンプル時間(44.1KHzの逆数だったかな?)だけ動作したあと、次のモジュールが動作する、というように、全モジュールが同時並行動作をする。モジュール間は共有メモリ上で値のやり取りを行うことで「結線」され、最終的に音出力がD/Aに設定され音が出る。
音は、処理が一瞬途切れてもよいようにFIFOにバッファリングされる
当初計画
問題点
(1)ユーザインターフェースが作りきれなかった
ここまでやったのであれば、マイコンを1台使って、MIDIをつければ演奏できた。
ただし、音色編集のユーザインターフェースは面倒で、GUI画面も検討したがあまりに作業が多くやめてしまった
(2)演算精度の問題
今回、VFCは32bit固定小数点演算を用いているが、カットオフ周波数が低い場合は、内部の演算値が大きくなるので、これでも分解能が足りない。その結果、音がひずんだりする。今後開発を行う場合は、浮動小数点DSPを使うのがよいだろう
電子楽器に戻る