チュートリアル 31:プロセッシング
コムフィルタ

コムフィルタ(櫛形フィルタ):comb~

tapin~ tapout~ を使用したディレイラインへのフィードバックに使用できる最小のディレイタイムは、シグナルベクタサイズによって決定されます。しかし、多くの面白いフィルタのための公式は、わずかに1 〜 2サンプルのディレイタイムによるフィードバックを必要とします。このようなフィルタ処理は、1つのMSPオブジェクト内でプログラムしなければなりません。

このようなオブジェクトの例として、コムフィルタ(櫛形フィルタ)の公式を実装する comb~ があります。一般的に言って、オーディオフィルターは、周波数依存型の増幅器(アンプ)です。これは、シグナルのある周波数成分の振幅を増加させ、他の周波数成分の振幅を減少させるものです。コムフィルタは、一定の間隔の周波数値(ある基本周波数の整数倍)で、入力シグナルを強調し、減衰させます。

技術的な詳細:コムフィルタの基本周波数は、ディレイタイムの逆数で与えられます。例えば、もしディレイタイムが2ミリ秒(1/500秒)ならば、500Hz間隔(500、1000、1500、その他)でシグナルの強調が発生し、減衰はその周波数の間で発生します。フィルタ効果の程度は、フィードバックがスケールされる係数( 0 〜 1の間)によります。スケーリング係数が 1 に近づくにつれ、強調と減衰の幅は、より大きく極端になります。これは、基本周波数の高調波で音の共振(「リンギング」サウンド)効果を引き起こします。

comb~ オブジェクトは、a )入力シグナル、b )特定の時間だけ以前に受信した入力シグナル、c) 同じ時間だけ以前に出力したシグナル(このシグナルは、それ以前のディレイも含んでいます)の組み合わせを出力します。comb~ のインレットではこれら3つ(a, b , c)の各々の量を自由に指定できます。また、同様にディレイタイム(これを d と呼びます)も指定できます。


コムフィルタのパラメータは調整できます

技術的な詳細:comb~ は、時間内のあらゆる瞬間(この瞬間をtとします)で、入力信号(xt)の値を使って、以下の方法でアウトプット yt を計算します。

yt=axt + bx(t-d) + cy(t-d)

コムフィルタの基本周波数はディレイタイムによって決まり、フィルタリングの強さは他の3つのパラメーターによって決まります。フィードバックのためのスケーリング係数(右のインレット)が通常1を超えないように注意して下さい。その理由は、だんだん大きくなっていくシグナルがフィードバックされ、フィルタの出力が絶えまなく増加してしまうためです。

コムフィルタの試用

チュートリアルパッチでは、様々なサウンドを使って、コムフィルタを試してみることができます。パッチには、フィルタのための3つの音源(コンピューターのオーディオ入力、バンドリミテッド・パルス波形、ホワイトノイズ)および、フィルタのための3つのオプション(フィルタなし、パラメータを手動で調整するコムフィルタ、パラメータを他のシグナルで連続してモジュレートするコムフィルタ)があります。


ポップアップメニューを使って音源を選び、希望するフィルタへ送ります

preset のボタンをクリックし、パラメータのセッティング例による様々な組合せを試して下さい。フィルタの効果を聞き、その後、パラメーターを変えて実験してみて下さい。シンセサイザからのMIDIノートメッセージによって、パルス波のピッチ、ベロシティ(周波数と振幅)情報を送ることができます。また、モジュレーションホイールを使って、フィルタのディレイタイムを変更することができます。

コムフィルタでは、振幅のピークや谷間が等しい周波数の間隔で存在するため、特徴的な倍音の共鳴が生じます。(振幅のピークと谷間によって作られる)櫛型が周波数領域で上下に「スウィープ」する場合、この特徴は特に効果的で、結果として音源のいろいろな部分を強調します。ディレイタイムを変化させるだけで、この周波数の「スウィープ」を引き起こすことができます。

バンドリミテッド・パルス

フィルタの効果は、フィルタを適用する音源が様々な周波数を数多く含んでいる場合に最も顕著になります。倍音のスペクトルを伴った「ピッチ」を持つサウンドにコムフィルタを適用しようとする場合、多くの部分音(高調波成分)を持つノコギリ波や矩形波を用いることは、最も理にかなっています。


これらの数学上理想的な波形はコンピュータのサウンドウェイブとして扱うには「パーフェクト」すぎます

しかし、このような数学的に導かれた波形の場合、現実には、高い部分音を豊富に含みすぎるという問題点があります。こういった波形は、ナイキスト・レートより上の周波数帯に、不協和なエリアシングを引き起こしてしまう程の強さを持った部分音を含んでいます。(この問題についてはチュートリアル5で詳しく説明されています。)

このチュートリアルでは、バンドリミテッド・パルスと呼ばれる波形を使用しています。バンドリミテッド・パルスは、すべての倍音が等しいエネルギーを持つような倍音スペクトルを含んでいますが、エリアシングを発生させないために倍音の数を制限しています。このチュートリアルパッチで使用される波形は、同じエネルギーをもつ10個の倍音を含んでいるため、その最も高い周波数成分は基本波の10倍の周波数を持っています。このことから、サンプリングレートが44,100Hzである場合、演奏に用いることができるバンドリミテッドパルスは基本周波数が2,205Hzまでのものになります。(この時の最も高い倍音の周波数は22,050Hzですが、これはナイキスト・レートと同じです。)61鍵のMIDIキーボードの最も上のキーは2,093Hzですから、これを上限とすれば、この波形はエリアシングを起こすことはありません。


MIDIによるバンドリミテッド・パルスの演奏

技術的な詳細:理想とされる(最適な狭さの)パルス・ウェーブでは、波形の各々のサイクルは、1つのサンプルが値1を持ち、それに、値0を持つ残りのサンプルが続きます。これは、すべての倍音が等しい振幅を持ち、それが無限に上方へ続くような倍音スペクトルを生成します。基本周波数とサンプリングレートに基づいて、「折り返し」を起こさない範囲でできるだけ多くの倍音を含むバンドリミテッド・パルスを計算するようなMSPシグナルネットワークを作ることは可能です。しかし、ここでは単に、ストアしてある10個の部分音を持つ波形を使用する方法を選んでいます。

ベロシティと振幅の変換:gain~

「MIDIー振幅」変換を行うサブパッチp Pulse_Wave は、MIDIからMSPのサウンドを演奏するための、シンプルで効果的な方法を含んでいます。これは、ボイスのスティール(借用)を実装するために poly オブジェクトを使い、入力されて来るMIDIノートを1回につき1つに制限します(入力されたノートを演奏する直前に、1つ前のノートに「ベロシティ0」を送って、これをオフにします)。この際、MIDIノートナンバから、MSPで使用する正確な周波数値への変換には mtof を使い、MIDIベロシティによるシグナルの振幅のスケールにはMSPオブジェクトである gain~ を使います。


MIDIのピッチとベロシティのデータをMSPのための周波数と振幅の情報に変換します

gain~ オブジェクトは、左インレットでシグナルと数値の両方を受取ります。数値は、シグナルを送り出す前に、その振幅をスケールするための係数として使用されます。gain~ の特別な機能の1つは、(シグナルをスケールするためのユーザインターフェースオブジェクトであるという有用性を別にすれば)入力されて来る数値を、線形な変化から対数、または指数曲線に変換することができるという点です。これは、ここでの使用に非常に適しています。その理由は、ここでは線形のベロシティレンジ(0 〜 127)を、我々が音量を聞く感覚にほぼ対応するような指数曲線による振幅値(1 〜 0)に変換したいからです。ベロシティの変化 10 は振幅の変化6dBに対応します。gain~ の他の有用な機能は、左のインレットで新しい数値を受取ったとき、急に振幅を変えるのではなく、何ミリ秒かをかけて新しい振幅係数へ段階的に進むことです。この進行にかける時間は、右のインレットにミリ秒単位の時間の値を送ることによって指定できます。このパッチでは、単純に、デフォルトの時間である20ミリ秒を使用しています。

・プリセットされた設定例から1つを選び、"Sound Source"ポップアップメニューから "Pulse Wave" を選んで下さい。MIDIキーボードで長い音を演奏して下さい。ピッチとベロシティのナンバーボックスオブジェクトの値を p Pulse_Wave サブパッチのインレットに送る(最初にベロシティ、次にピッチ)ことによって、任意の振幅と周波数による持続音を得ることもできます。

フィルタのパラメータの変更

このパッチで示されるように、フィルタのパラメータを変えるには、通常、1つの値による急激な変化の代わりに、徐々に変化するシグナルを用いるほうがベストです。そのため、"Adjusted By Hand"(手動で調整)で行う comb~ オブジェクトのパラメータの変更は、最初に line~オブジェクトに送られ25ミリ秒をかけて補間されます。

「モジュレートされた」comb~ オブジェクトのディレイタイムは低周波数のバンドリミテッド・パルス波の形(単純なサイン波より面白い形をしています)で変化を加えられます。実際、モジュレーションは任意の形で変化するシグナルによって行われます。シンセサイザのモジュレーションホイールを使用(または、単にナンバーボックスをドラッグ)して、このモジュレーションの速さ(レート)を変えることができます。x、y ディレイのゲイン(右端の2つのインレット)は、0.01 〜 0.99のレンジを持つサイン波(フィードバック・ゲイン)と、0.01 〜 0.49のレンジを持つコサイン波(フィードフォーワード・ゲイン)でモジュレートされます。一方の振幅が増加するにつれて、他方は減少します。

・パラメータ値の様々な組合せによって実験することによって、ユーザが自分のパッチで設計しようと思っている他のタイプのモジュレーションのアイデアがもたらされるかもしれません。

まとめ

comb~ オブジェクトは、非常に短いフィードバック・ディレイタイムを使用し、シグナルにコムフィルタをかけることを可能にします。コムフィルタは、透過するシグナルに、周波数に従って振幅の増加、減少を引き起こしますが、この現象は等間隔の周波数(すなわち倍音関係)で生じます。この周波数の間隔は、ディレイタイムの逆数によって決定されます。コムフィルタは、フィルタを適用されたシグナルの様々な周波数領域を強調するように、ディレイタイム(言い換えれば、周波数の間隔)が時間上で変化する場合、特に効果的です。

ユーザインターフェースオブジェクト gain~は、シグナルの振幅を、特定の対数または指数曲線でスケールするために役立ちます。gain~ による振幅の変更は、ある一定の時間(デフォルトで20ミリ秒)をかけて徐々に行われるので、出力シグナルで、不必要な突然の不連続を引き起こすことはありません。

参照

comb~ コムフィルタ
gain~ 指数スケールのボリュームスライダ