OnAudioFilterReadでオーディオの振幅を取得する
2020/09/21
Unity
audio
環境
- Unity 2020.1.3f1
実装
AudioSourceがアタッチされたオブジェクトのMonoBehaviourで、ライフサイクルメソッドOnAudioFilterRead
[1]を利用することで
振幅の生データを取り扱うことができる。
private void OnAudioFilterRead(float[] data, int channels)
{
int dataLength = data.Length / channels;
float volumeRate = data.Sum(d => Mathf.Abs(d)) / dataLength;
// use volumeRate
}
元々OnAudioFilterRead
はオーディオフィルタを実装するためのメソッドで、data
の要素に値を再代入することでフィルターを実装するためのもの。
この処理はオーディオがオーディオフィルターに送られる間に挿入される。
OnAudioFilterRead
はメインスレッドとは別スレッドから呼ばれることに注意する。OnAudioFilterRead
からの処理で描画の更新などをすると怒られる。