#DSP Buffer Sizeを「Best Latency」にしたらノイズが乗った
正確に言えばノイズが乗るときと乗らない時がありました。
これ自体はよくある話ですが、どこを見ても「Good Latencyにしろ」位しかないので少し詳しく調べてみました。
結論から言えば「SystemSampleRateを下げる」と言う対策をとりました。
DSP Buffer Sizeを測定するコード
こちらの関数を使います
GetDSPBufferSize
環境
OS: Windows 10 Pro
CPU: i5 9600K
メモリ: 32GB
オーディオインターフェース: FOSTEX HP-A3(USB接続)
測定結果
||bufferLength|numBuffers|
|:--|--:|--:|--:|
|Best Latency|256|4|
|Good Latency|512|4|
|Best Performance|1024|4|
スクリプトで設定する
前述のGetDSPBufferSizeにも書かれていますが、現在はスクリプトからの変更には対応していません。こちらを参照してスクリプトからBufferSizeを設定することは出来ましたが、適切な値でないとクラッシュします。サポート範囲外でもあるので使用しない方が良いでしょう。
private void SetBufferSize(int bufferSize)
{
AudioConfiguration ac = AudioSettings.GetConfiguration();
ac.dspBufferSize = bufferSize;
AudioSettings.Reset(ac);
}
具体的な対策
どうしてもノイズなくレイテンシーが欲しい場合には、「SystemSampleRateを下げる」が私の環境では有効でした。0に設定していましたが、デフォルトでは48000になるようです。CD音源ですら44100ですから、よっぽど音質にこだわるゲームじゃない限りはこの値まで低くしても十分だと考えています。
他に対策があれば教えてください。