環境
Unity2021.3.4f1
概要
プロシージャルに音階の波形を生成して、かえるのうたを流してみました。
このままだとノイズがひどいので、AudioMixerを作成してLowpassフィルタを追加して値調整するとノイズが軽減されます。
OnAudioFilterReadはAudioスレッドから呼ばれています。
AudioSourceにAudioClipを設定しなくても、第1引数のdataに値を設定するとその音が鳴ります。
ここに全コード記載しています。
private void OnAudioFilterRead(float[] data, int channels)
{
...
for (int i = 0; i< data.Length; i++)
{
float time = begin + (float)currentSampleIndex / _outputSampleRate;
data[i] = volume * Mathf.Sin(2.0f * Mathf.PI * time * note.tone);
currentSampleIndex++;
if (channels == 2)
{
data[i + 1] = data[i];
i++;
}
}
}
参考
https://tomari.org/main/java/oto.html
https://fabeee.co.jp/column/employee-blog/sugichan02/