この記事は「Applibot Advent Calendar 2023」の12日目の記事になります!
Unityでゲームを作る時にオーディオの設定を蔑ろにしてはいないでしょうか??
よく知らないからそのままで...
なんて方に向けて今回はSystemSampleRateとDSPBufferSizeの設定についてまとめました!
ノイズとレイテンシーの改善に役立つはずです!
Unityでサンプリングレートを設定する
Unityでサンプリングレートを設定するには...
-
ProjectSettingsのSystemSampleRateから全体のサンプリングレートを設定
初めは0が設定されていて0の場合はプラットフォームごとの設定になる
デフォルト設定はPC 48000,モバイル 24000
そもそもサンプリングレートとは
アナログの音をデジタルで表現するとき、
毎秒〜回のサイズで音を細切れにし、それぞれの時点の情報をデジタルの情報にします。
何回に分割したサイズかを決めるのがサンプリングレート、
一つ一つの情報量を決めるのがビットレートです。
例えばCDの基準の 44100Hz 16Bitだと…
一秒間を44100個に分割して、その一つを2の16乗(=65536段階)で表現されています。
ゲームでのサンプリングレート
ファイル容量と音質
音声ファイルは、(秒数×サンプリングレート×ビットレート×チャンネル数)
でサイズが決まるため、サンプリングレートが高くなるとファイル容量が大きくなります。
例)
300 * 44100 * 16 * 2 = 52920000 (Byte) = 52.92 (MB)
300 * 48000 * 16 * 2 = 57600000 (Byte) = 57.6 (MB)
そのかわりに、細かく音を表現できるようになるので音質が上がります。
ノイズとレイテンシー
コンピューターは音を確実に再生するために予めいくらかバッファを設けて音を再生しています。
このバッファのサイズにサンプリングレートが関係しており、
サイズが大きいと読み込みに時間がかかり、レイテンシーが発生します。
逆に小さいと、次の読み込みが間に合わずノイズが発生することがあります。
悩ましい...
Unityでサンプリングレートを調整する
ここを触ることになるタイミングは主にノイズやレイテンシーを改善する時です。
UnityのバッファサイズはProjectSettingsのDSPBufferSizeで決められています。
Best Latency(256)
Good Latency(512)
Best Performance(1024)
こちらがおそらくサンプル数になっており、サンプリングレートと合わせて、
48000HzのBest Performanceだと
1024 / 48000 = 0.021333...秒(約21.3ms)
約21.3ms秒のバッファになっています。
これを踏まえて、DSPBufferSizeとSystemSampleRate二つを上げ下げすることで、
バッファサイズを調整し、ちょうどいいノイズとレイテンシーのバランスを探して行きます。
結局何入れればいいの?
DSPBufferSizeは3択で選ぶことしかできませんが、
SystemSampleRateは数値で指定することができます。
DVDなど動画の世界では48000Hz
CD業界の基準は44100Hz
それより下げるのであれば、
16000Hz、24000Hz、32000Hzなど8の倍数や、
22050Hz、11025Hzなど、44100Hzの1/2、1/4倍の値がおすすめです。
人間が聞こえる音を表現するために必要なサンプリングレートはおよそ44000Hz
と言われているので、CD音源と同じ44100Hzまでは下げてもほとんど違いはわかりません。
逆にそれ以上下げるとわかりやすく音質が低下しますが、高音から消えていくため、
低音の効果音などは低く設定しても影響を受けにくいです。
まとめ
バッファサイズの仕組みを理解して調整することでノイズを軽減することができます。
困っている方はぜひ試してみてください!
間違っている点などあればご指摘お願いいたします。