
よくリバーブとかの仕組みでコンボリュージョンと聞きますが、具体的にどんなことをしているのかはよくわかっていませんでした。



畳み込み処理、みたいにも呼ばれるね~
JUCEチュートリアルの「Add distortion through waveshaping and convolution」を進めていきます。今回は、「What is Convolution?」の項目について、勉強しながら、理解を深めていこうと思います。よくリバーブでコンボリューションリバーブというものを使いますが、どこかの場所のリアルな残響が得られるんだなーくらいの認識でした。
今回は、JUCEチュートリアルの内容に沿って、コンボリューションについて勉強を進めてみた備忘録になります。
公式のチュートリアルページはこちらを進めています。
こんな人の役に立つかも
・コンボリューションの仕組みについて大まかに知りたい人
・残響の畳み込みのイメージをつかみたい人
・JUCEチュートリアルの「Add distortion through waveshaping and convolution」を進めている人
コンボリューションについて知る
DTM的にいうと、リバーブ(残響)をいろいろな空間に似せることができる手法、みたいな理解になります。コンボリューションを日本語にすると、畳み込み、となります。畳み込みは、数学的な操作です。
https://ja.wikipedia.org/wiki/%E7%95%B3%E3%81%BF%E8%BE%BC%E3%81%BF
JUCEチュートリアルの冒頭の説明を翻訳すると、
「特定の空間の特性を表す録音済みのインパルス応答を用いて、その空間の残響特性をシミュレートすることです」となりました。ここから、インパルスという信号を使って特定の空間の残響を録音(インパルス応答)して、この音響特性を別の音声に反映させるというような理解ができます。



インパルス応答ってなんでしょうか??
インパルス応答について
早速、インパルス応答という言葉が出てきたので、調べてみました。
「インパルス応答」は、真似したい空間でインパルスを発音、録音して得られた音声で、この録音されたインパルスは空間の残響まるごと録音されています。
インパルスはとても短いパルスで、インパルス応答を作成するための方法にもいろいろな方法があるようです。インパルス応答について、もう少し詳しい説明は、こちらのサイトがわかりやすいと感じました。
インパルス応答は、残響感といってしまうと少し限定的な表現になってしまうのですが、この後にいろいろと調べたサイトによると、「システム自体の応答の特性」ということで、なにかしらの回路からの出力(もちろん、インパルス応答の録音場所時点の残響感も含まれる)特性の特徴も含むようなイメージとなります。
具体的な録音方法(インパルスの位置やマイクの設置場所など)までは調べきれませんでしたが、何となく次のようにインパルス応答が得られるようです。インパルス応答は、録音しているマイクなどを通過しているので、これら録音機材の録音特性が含まれるという点も何となくイメージできます。


JUCEチュートリアルでは、ギターアンプとカセットテープレコーダーのインパルス応答が例に出されています。
zipをダウンロードすると、「cassette_recorder.wav」と「guitar_amp.wav」が付属してきますので、これを聴くとさらにイメージができます。


録音しているマイクの特性や録音機材の回路特性なども影響するとのことから、より厳密に、マイクの特性を無響室などであらかじめ録音しておいて、マイクの影響をなくしたりと、いろいろと工夫がなされているようです。
畳み込みの処理について
理解のために、こちらのサイトの「2.1畳み込み」を参考にさせて頂きました。
https://www.noe.co.jp/technology/18/18inv1.html
次のような音声波形にインパルス応答の残響感を反映させたいと考えます。


音声信号は、デジタルな音声としています。
残響感を付加したい原音の音声データのサンプルひとつづつに、インパルス応答を掛け合わせます。





何となくイメージがわいてきたよ
それぞれのサンプルが完全にドライな音サンプルだと考えると、それぞれの音声サンプルに残響があるというようなイメージです。


これらの「サンプル音にインパルス応答を掛け合わせたデータ」すべてを、最後に足し合わせて一つの波形に戻します。これで、インパルス応答が織り込まれた波形になるようなイメージです。
この畳み込みの方法は、とても計算コストがかかるようで、高速化する手法があるようです。JUCEでは、「dsp::Convolusion」に準備されていますので、すぐに利用することができるようです。



詳細な実装は、JUCEの開発者にまかせて、アプリケーションにすぐに使えるようになっているんだね~