[ Main Page ]

リバーブ(残響)について少々

はじめに

大きなホールで音楽を聴くと、楽器が演奏を停止した後もしばらく音が響いているのに気づくと思う。 もちろん、演奏中も音は響いていて、それが音楽に艶やかさを与えるので、好んでホールで演奏が行われている。 響きの美しいホールというのは色々とあって、東京赤坂のサントリーホールなど有名なものはいくつもある。 それらのホールを使うのは、時間・金銭的に難しいことが多く、特に、実際のホールでの収録でないCDをマスタリングする時には、 仮想的にホールの響きを作り出すソフトを使うことになる。 Freeverb3は、その一つである。響きを作り出す方法には大きく分けて2つあり、一つはホールで残響を録音してそれを畳み込んで利用する(FIR)方法、 もう一つは、デジタル音声の様々なアルゴリズムに基づいて人工的に作り出す(IIR)方法である。 商用で非常に高価であることでも有名なものの一つにLexiconのリバーブがあるが、これは後者にあたる。 FIRは実際のホールで録音してしまえばそのまま使えるので、簡単だが、IIRについてはアルゴリズムが昔から色々と研究されてきた。 今回はこれらについての話題である。

アルゴリズム

Schroeder Reverb

昔から実装されて、フリーソフトでも良く使われているのが、comb filterとallpass filterを使用したリバーブで、 ARI-WEBのページに大変詳しく説明されている。 いわゆるシュレーダ(Schroeder)のリバーブと言われており、Freeverb3の前身であるFreeverbもこのアルゴリズムに基づいている。 大変簡単なアルゴリズムなので、簡易的なアルゴリズムとして広く使われているが、金属的な音がする、特定の周波数でリンギングが発生しやすい、 という問題がある。そのため、いわゆる高品質さを求められる場面では使われることが少ない。Freeverbは経験的に求めた数値に基づいてフィルタが 作成されているので、比較的金属的な音が少ないと言われているが、それでも難しいところがある。 もう一種類、簡易的なものに、allpass filterのみで作られたものがあるが、これも同様の問題がある。 これらのいわゆる「低品質な」リバーブは「金属的」なことからプレートリバーブ(デジタルでなく、実世界では、金属板にスピーカで音を入力して、 振動を出力としてとるもの)の代わりとして使われることが時々ある。ただ、ホールの残響を作るためのアルゴリズムとしては不足がある。 Freeverb3_VSTには、Freeverbベースの実装であるFreeverbと、同様のアルゴリズムのCCRMA NRevと、 NRevをallpass filterの入れ子と入力フィードバックを利用してリンギングを極力抑えたアルゴリズムを実装したNVerb (v2)がある。 NVerbの方は、allpass filterで入れ子(通常のallpass filterのディレイ部分に、別のリバーブのアルゴリズムを挿入する)にしたことで、 低音の響きがかなり良くなったようである。allpass filterの入れ子としてのアルゴリズムは、 かなり昔からあったが、品質的には、直列のオールパスフィルタよりかなり良いということはあまり知られていない。シュレーダ自身、入れ子のアルゴリズム に関しては昔から述べていたようである。ちなみに、comb filterの部分をmodulationによってchorusとすることで、リンギングの発生が抑えられやすく、 おそらく、LexiconのConcert Hallのアルゴリズムは、Chorus comb filterとallpass filter、入れ子allpass filterに基づいていると思われる。

FDN Reverb

シュレーダのリバーブの問題を解決するために色々な方法が作られたが、その一つがFDN(Feedback Delay Networks)である。 いくつかの異なった長さのdelaylineと、それを撹拌・出力するための行列からなるアルゴリズムで、8個以上のディレイラインとアダマール行列を使えば、 かなり簡単に高品質な残響が作れる。実際の残響にあるような周波数の位相の変化等については、リアルタイムに行列を変化させることで対応していることが多い。 初期残響音の生成にもアルゴリズム的に対応しやすく、そこでも良く使われている。FreeverbではHibiki Reverbで実装した。

Loop Tank Reverb

ビンテージデジタルリバーブとしてよく取り上げられるLexicon 224やEMT 250は、「暖かい」きれいなリバーブとして かなり広まったが、オールパスフィルタを利用したループ(タンク)のアルゴリズムによるところが大きい。 大きなループを作ることで、FDNと同様に時間と共に密度が高くなるリバーブを作ることができる。 EMT 250は、pre delay、allpass filterによる3つのdiffuserと、全長80msから120msになるallpass filterを 基本としたfeedback loopからなっている。出力は、feedback loopの中のいくつかのtapから取られ、schroeder decorrelator (直列allpass filter群)に通され、そのうちの一つはLPFとHPFを通されてから入力にfeedbackされる。 アルゴリズム的には単純だが、それぞれの最適なdelayの長さとgainを探すのが大変である。

Lexicon 224は、リバースエンジニアリングによってESPのリバーブとしても実装され、論文にも掲載されている 有名なアルゴリズムに基づいている。ESPのマニュアルはFreeverb3のサイトにミラーしているので、一度見てみると 面白いかも知れない。入力に対するdiffuser、allpass補完によるmodulationを含んだ左右8の字型の feedbackが特徴的で、そこから数tapの出力加算を得る。feedback loopの長さがあまり長くなく、plate reverbとされているが、 係数を調整すればそれなりの響きを得ることができ、 Freeverb3_VSTでは、STRev、ホール用の別のループに基づいたProG Reverb(Progenitor Reverb)として実装している。 Progenitor Reverbの方は、Dattorroの公開したアルゴリズムに基づいているが、メインのfeedback loopしか公開されておらず、入力のdiffuser、出力のタップは 自身の経験に基づいて決めている。ループ内部やdiffuserのallpass filterのfeedbackの係数は0.5程度が基本であるが、いくつかの 実験によると、およそ0.4から0.8の間に最適な数値があるらしい。(係数自体は、非線形計画法で、凸最適化の手法を利用できるらしいが、 デジタル音声処理とはかなり遠い話になる。ならしていうと、whitenoise入力に対するallpass filterの出力のRMSが、 ある一定のカーブを描きかつ、最大の密度を得、それぞれのフィルタを繋いだときに周波数的に大きな乱れがないような係数を探すということである。 但し、リバーブの出力全体は、実世界では指数関数を描いて減衰するといわれているが、この方法だと、ガウス関数を描いて減衰するようになる。 実世界には即応していないが、少なくとも「悪くはないし、結構いい」音となるようである。)

ある程度新しいLexiconのリバーブは、周波数分割により、それぞれの帯域に最適なアルゴリズムを利用して 残響を生成するようになっているようである。例えば、いわゆるプレートリバーブ用のアルゴリズムは、ループの長さが短く、 内部で低周波の残響を生成し辛いし、逆にホール用のそれは、ループが長いので、高周波の残響が生成し辛い。 パラメータにBass XOVというのがあるが、低周波を分割処理して、低音域の残響時間を延長等するための仕組みである。 かなり初期からこの分割アルゴリズムを採用しているため、Lexiconのリバーブは、低音に強い暖かみのあるリバーブとなっている。 実際の環境でも、低音は指向性が低く、高音は指向性が高く、分割処理の採用には一理あるのだろう。

参考

Chuck Norris does not code; when he sits at a computer, it just does whatever
he wants. (By: *Kattana*.)

    -- Kattana
    -- Chuck 
                      Norris Facts by Shlomi Fish and Friends ( http://www.shlomifish.org/humour/bits/facts/Chuck-Norris/ )

ech`echo xiun|tr nu oc|sed
'sx\([sx]\)\([xoi]\)xo un\2\1 is xg'`ol

	-- One of Nadav Har'El's Email Signatures.


Powered by UNIX fortune(6)
[ Main Page ]