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からの処理で描画の更新などをすると怒られる。

© 2019-2022 hassakulab.com, built with Gatsby