RX62N 用FM音源プログラム -- TGRX62N (9)
現状の RX62N 用FM音源プログラムでは、下の図に示すような簡単な「ディジタル・リバーブ」を内蔵しています。
しかし、処理の簡略化のため、「リバーブ」というより、実際は「フィードバック・ディレイ」による「エコー」になっています。
ディレイ部分は、サンプリング周波数によらず、約 120 ms 分のメモリを確保するようになっているので、48 kHz サンプリングでは約 12 Kバイトもの RAM を消費する割に、冴えない性能となっています。
そのため、少し処理量を増やして、もう少しまともなリバーブを実装することにしました。
また、ついでに、「コーラス」も搭載することにしました。
CPU 計算時間の消費量としては、同時発音数にして 3 音程度の減少となりました。
このリバーブ/コーラスの追加だけで新たなリリースとはせず、別の部分の変更が完了した時点で、リリースしたいと思います。
上の図の現状のリバーブでは、処理の簡略化のために、直接音 (ドライ) / エフェクト音 (ウェット) の混合比率は 1:1 に固定し、フィードバック・ゲインは 1/2 に固定になっています。
音響エネルギーが 60 dB 減少する時間で残響時間を定義する「RT60」の値に換算すると RT60 = 1.2 秒ということになります。
ディジタル信号処理的に「エコー」ではなく「リバーブ」を実現するアルゴリズムとして、最も古い部類に属する「Shroeder」(シュレーダー) の約 50 年前の論文があります。
Manfred R. Schroeder,
http://www.aes.org/e-lib/browse.cfm?elib=343
"Natural Sounding Artificial Reverberation"
J. Audio Eng. Soc., vol. 10, p.219 (1962 July)
上記のリンクをクリックすると AES のサイトに飛びますが、無償では読めないようです。
「Shroeder 法」について解説してあるサイトとして、株式会社エー・アール・アイの
ソフトウェアとデジタル信号処理(DSP):ARI CO.,LTD. 音響と開発
を見つけました。
この「リバーブ、残響 2/4 : リバーブレーター(残響装置) 」のページに、サンプリング周波数 48 kHz の場合の具体的なパラメタの値が記載されています。
「全てのパラメータは以下のテーブルのように〜」と書かれていますが、ブロック図での各コムフィルタ出力の乗数 c1 c2 c3 c4 の値の記載がありません。
これは、その後のインパルス応答のグラフを見ると、4 本のコムフィルタの最初の出力がすべて「1」となっており、 c1 = c2 = c3 = c4 = 1 を前提にしていると思われます。
Shroeder 法は、計算量は少なくてすみますが、リバーブの音質としては「良くない」方に属するようです。
リバーブの音質はパラメタの値の選択に依存し、上記のサイトでは、良好な結果を得るためには「試行錯誤」や「人海戦術」が必要というような記述もあります。
Shroeder 法の解説としては、「DSPWiki」のページ
http://dspwiki.com/index.php?title=Reverberation
もあります。
こちらのページでは、コムフィルタ部分のディレイ値が 29.7 ms 〜 43.7 ms と記述されており、エー・アール・アイのページの 30 ms 〜 40 ms の範囲から選ぶという記述と多少の違いがあります。
DSPWiki のページのディレイ値に基づくパラメタでも実験してみましたが、正直、両者のパラメタの違いによる優劣は分かりませんでした。
そんな訳で、良い結果を与えるパラメタを探索するのはあきらめ、、各コムフィルタのディレイ・サンプル数を互いに素に選ぶという必要条件だけを満たす値を各サンプリング周波数ごとに選ぶことにしました。
詳しくは、「リバーブ」のカテゴリとして、別の記事にしたいと思います。