先日、海苔音源の補正にDe-limiterやAudacityでのオールパスフィルターなどを試しましたが、それだとストリーミング対応が難しいだろうなということで、Roonの畳込みフィルターを使ったオールパスフィルター適用を試してみました。
なお前回もそうでしたが、そうしたハードウェアを否定する意図は全くありませんし、それと類似のパラメータを”リバースエンジニアリング”しているということも一切ありません。
そもそも発売前なので実機の処理方法自体が分からないですからね。
前置きはそのくらいにして、Roonには標準でMUSEと呼ばれるDSP機能が搭載されています。
サンプリングレート変換からヘッドホンの補正、ルーム補正まで多彩な処理が可能です。
今回はその中の「畳込みフィルター」を用います。
ルーム補正だとREWで生成したIR(インパルス応答)をここで指定したりするものですね。
IRはWAVファイルで用意する必要があり、以下の手順で生成することになります。
1. インパルス音声を用意
2. これにオールパスフィルターを適用
3. その結果音声をIRとして保存
4. 3で保存した音声を畳込みフィルターにファイル指定
作り方としては大きく2つの方法があり、1つはPythonでコードを書いて生成するやり方。
もうひとつはAudacityのNyquistプロンプトで作る方法です。
まずはPythonでの生成ですが、コードは色々と語弊を生む可能性があるので非公開とします。
生成されたIRの特性はこんな感じです。
ちなみに設定は当然変更可能で、下のグラフは位相回転量:0.12ms,減衰量:0.72とし、48kHz/32bit Floatで保存しています。
また正規化係数(ゲインを下げる意味合い)は0.6としていますが、実際はクリップしないようにもう少し小さいほうが良いです。
パラメータ変更による変化ですが、位相回転量:0.12ms,減衰量:0.72が試した中ではいちばん癖が少なめで低域寄りのバランスとなってドラムが自然でした。
減衰量を0.75にすると少し上寄りの重心になり、安定している印象はあるものの、ややブリージングっぽさがありました。
さらに位相回転量0.13msに増やすと、やや硬めになって厚みも出て変化はよりわかりやすくなり、シャキッとする印象です。
加えて減衰量を0.78に増やすとブリージングはやはりかすかにあり、カッチリして空間が出る印象ですが、硬さは少し減りました。
曲によっても最適値は違ってくるでしょうけど、やりすぎないバランスという意味では最初の設定値が良かったように思います。
次にAudacityのNyquistプロンプトで作る方法を試します。
これならオフライン再生のWAV変換と同じオールパスフィルターを適用することが可能になります。
ただNyquistプロンプトの書き方が悪いのか、前述の1-3の処理を一発で通すのがうまくいかなかったので、1と2-3を分けてスクリプトを書きました。
まずはインパルス生成から。
なお実行前に新規プロジェクトを立ち上げ、ステレオトラックを追加しておく必要があります。
生成する長さは2秒くらいが良いと思います。
;version 4
;type generate
;control len “Length” real “sec” 1.0 0.1 5.0(defun mono-impulse ()
(let* ((sr *sound-srate*)
(num-samples (round (* len sr)))
;; 全て 0.0 のサンプル配列を作成
(samples (make-array num-samples)))
(dotimes (i num-samples)
(setf (aref samples i) 0.0))
;; 最初のサンプルだけ 1.0 に設定
(setf (aref samples 0) 1.0)
;; サンプルの配列からサウンドオブジェクトを作成
(snd-from-array 0.0 sr samples)));; 左右にインパルスを配置してステレオで出力
(vector (mono-impulse) (mono-impulse))
そして前回も書いたオールパスフィルタの適用です。
こちらはさきほど生成されたインパルス波形を全選択してから実行します。
;version 4
;type process
;name “Simple Allpass”
;action “Apply Allpass Filter”
;author “Custom”
;control decay “Decay (sec)” real “” 0.5 0.1 2.0
;control freq “Frequency (Hz)” real “” 1000 100 10000(defun allpass (s decay freq)
(alpass s decay freq))(allpass *track* decay freq)
これで生成されたIRの特性はまた別のPythonプログラムで解析させてみました。(プログラム自体は非公開)
自前のPythonプログラムとは異なり、こちらはどうやら多段直列のオールパスフィルターになっているようです。
オールパスフィルター自体、リバーブとして使われるニーズが多いのでこうなってるのでしょう。
またゲイン調整は組み込んでいないので、生成されたインパルス応答を「増幅」で-3dBあるいは-6dBくらいにしておいたほうが良いです。
聴いた印象は前回WAVファイルを変換して試したのと似た雰囲気で、自前のプログラムよりは効きとしては強い感じではあります。
ただ海苔音源の補正だけに特化して考えると一段の素直なもののほうが向いているかもしれません。
もちろんプログラムで帯域分割して並列にしたり、Audacityと同様に多段にすることも可能ではあります。
まぁこんな感じでRoonのコンボリューションを使えばオールパスフィルターを使った補正は可能です。
ゲインをうまく設定しないとクリップしがちだったり、ゲインを下げるとオン・オフで比べて音量が当然明らかに下がるのでそちらのデメリットもあるでしょう。
なお生成したIRファイルは配布の予定はありません。
またAudacityのスクリプトに関しても一切の動作保証はしませんし、サポートもしませんので、あらかじめご了承ください。





コメント