data | オーディオデータを持つ float 配列 |
channels | デリゲートに渡されたオーディオデータのチャネルの数を格納する int |
OnAudioFilterRead が実装されている場合、Unity は DSP チェーンにカスタムフィルターを挿入します。
フィルターはインスペクターに表示されている MonoBehaviour スクリプトと同じ順番で挿入されます。
OnAudioFilterRead は毎回呼ばれているオーディオのチャンクをフィルターに通すルートです。(これはサンプルレートやプラットフォームに応じて毎回 ~20ms で頻繁に発生します。)
オーディオデータは-1.0f から 1.0f までの float 値の配列で、チェーンのフィルター前のオーディオ、または AudioSource の AudioClip を含みます。これがチェーンの最初のフィルターでオーディオソースがアタッチされていない場合、このフィルターはフィルタリングしたことになります。そうすれば手続き的にオーディオの生成を行い、オーディオクリップのようにフィルターを使用することができます。
OnAudioFilterRead が実装されている場合、VU メーターはサンプルレベルを出力を表示するためにインスペクターに表示されます。フィルターの処理時間も測定され、使用済みのミリ秒は次の VU メーターに表示されます。(ミキサーがオーディオデータを開始したときに、フィルターが多くの時間を費やしている場合、赤色に変わります)
また、OnAudioFilterRead はメインスレッドとは異なるスレッド(すなわちオーディオスレッド)上で呼び出されるため、大多数の Unity の関数を呼び出しは許可されていないことに注意してください(警告が表示されます)。
See Also: Audio Filters.
// This custom filter controls the gain by filtering the samples by multiplying each sample with a <i>gain</i> parameter.
public var gain : float;
function OnAudioFilterRead(var data:float[], var channels:int) { for (var i = 0; i < data.Length; ++i) data[i] = data[i] * gain; }