チュートリアル 28:プロセッシング
フィードバックを伴ったディレイライン

反射をエミュレートするディレイ

tapin~tapout~ オブジェクトを使用して、指定された時間の長さでシグナルをディレイ(遅延)させることができます。tapin~ オブジェクトは、絶えず更新され続けているバッファとして、受信した直前のシグナルをストアします。また、tapout~ はストアされている時間の中の1つ以上の特定のポイントでそのバッファにアクセスします。


tapin~tapout~ によるシグナルのディレイ

サウンドを、それ自身のディレイされたものと組み合わせることは、壁で反射してから耳へ届くような音波をエミュレートするシンプルな方法です。これによって、後に反射音が続いているダイレクトなサウンドを聞くことができます。現実の世界では、サウンドのエネルギーの幾分かは反射する壁によって吸収されますが、これは下の例のようにディレイサウンドの振幅を減少させることでエミュレートすることができます。


サウンドの吸収をエミュレートするための、ディレイシグナルの振幅のスケーリング

技術的な詳細:様々な素材は色々な度合いでサウンドを吸収しますが、ほとんどの素材において、サウンドの吸収は周波数によって変化します。一般に、高い周波数は低い周波数よりも多く吸収されます。この事実は、ここでは無視されています。

「ディレイシグナル」のディレイ

また、現実の世界では、たいてい2つ以上のサウンドの反射面が存在します。例えば、部屋の中では、サウンドは壁、天井、床そして、室内の物体に無数の方法で反射し、反射波はかわるがわる他の面に反射します。この「反射の反射」をモデル化する簡単な1つの方法は、ディレイシグナル(最初の「吸収」の後の一部)をディレイラインにフィードバックすることです。


フィードバックを伴ったディレイ

上のような1つのフィードバックを持つディレイラインは、現実の世界でサウンドが響いている状態のように聞こえるためにはあまりにもシンプルですが、多くの面白い効果を生成することができます。フィードバックを伴ったステレオディレイは、このチュートリアルのサンプルパッチで実装されています。それぞれのオーディオ入力チャンネルは、ディレイされ、スケールされてディレイラインにフィードバックされます。


個別のディレイタイムとフィードバック量をもつステレオディレイ

・"Output Level" と記されたナンバーボックスを1にセットして下さい。そして、hsliderを中央の位置に動かし、"Direct Level"、"Delay Level" ナンバーボックスが0.5であることを読み取って下さい。オーディオをオンにして、コンピュータのオーディオ入力にサウンドを送って下さい。様々なディレイタイム、フィードバック量で実験してみて下さい。例えば、ぼやけたような効果を出すために上に示したようなセッティングを使用してみてもよいでしょう。フィードバック量を増加させ、フィードバックのレート(1000/ディレイタイム)でより大きな共鳴音の響きを得られるようにしてみて下さい。ディレイタイムを増加させ、分離して聞こえるエコーを作ってみて下さい。HsliderでDry/Wetのミックスの度合いを変えることもできます。

オーディオ信号をシステムにフィードバックする場合、常にオーバーロードを起こす可能性がある点に注意して下さい。このため、シグナルをディレイラインにフィードバックする前に、( *~ オブジェクトや "Feedback" ナンバーボックスによって)1.0より小さい係数でスケーリングすることが重要です。そうでないと、ディレイサウンドは際限なく続き、新規に入力されるオーディオとの加算によって増加してしまう場合さえあります。

振幅のコントロール:normalize~

このパッチでは、レベルセッティング(特にフィードバックレベル)をユーザが変更でき、さらに、どんなサウンドがパッチに入力されてくるかわからないため、最終のアウトプットレベルをどのくらいスケーリングする必要があるかについて実際に予測することができません。アウトプットの振幅をスケールするために *~ オブジェクトを ezdac~ の前に使っていれば、アウトプットレベルを設定することはできますが、後々、フィードバックレベルを増加させた場合、アウトプットの振幅は限度を超えてしまいます。normalize~ オブジェクトはこのような予測できない状況を扱う場合に適しています。

normalize~ オブジェクトは、アウトレットから送信したいピーク(最大)振幅を指定することができます。normalize~ は入力のピーク振幅値を観察し、最大値として指定されたピーク振幅を保つようにシグナルをスケールするための係数を計算します。そのため、normalize~ を使った場合、アウトプットのピーク振幅値は決して指定された最大値を超えることはありません。


normalize~ は、(現在の入力値×ピーク出力/ピーク入力)を出力します

normalize~ に起こりうる1つの問題点は、入力シグナルに1つの大きなピークがあると、たとえ残りのシグナルが非常に弱い場合でも、normalize~はシグナル全体のスケールを低くしてしまうということです。normalize~ の左インレットに数値、または、reset メッセージを送ることによって、使用する新しいピーク入力値を与えることができます。

・オーディオをオフにして、次の章に進む前にパッチャーウィンドウを閉じて下さい。

まとめ

tapout~ のアウトプットをtapin~ のインプットにフィードバックし、さらにそれをDACに送る方法は、シグナルの多重ディレイされたバージョンを作る1つの方法です。フィードバックされたディレイシグナルは、tapin~のインレットで新たに入力されるシグナルに加算されるため、tapin~ にフィードバックさせる前に tapout~ のアウトプットを減少させておくことは良い方法です。

振幅の変化するシグナルの追加を含むようなパッチでは、DACに送られる合計のシグナルの振幅値の予測はしばしば困難になります。シグナルの振幅をコントロールする1つの方法は、normalize~ を使うことです。normalize~ は入力されるシグナルのピーク振幅値を使って、シグナルを出力する前にどのくらい振幅を減少させなければならないかを計算します。

参照

normalize~ 最大振幅に基づいたスケールを行ないます
tapin~ ディレイラインへの入力
tapout~ ディレイラインからの出力