前回の記事ではオーディオクリップのCompression Formatによる音質とデータサイズの違いに触れました。
ここからは複数回に分けて、様々な条件でCPUやメモリ負荷の比較をしていきたいと思います。
初回は、オブジェクト数による比較と、3D音響を使用する/しない場合の比較を行ってみます。
はじめに
オーディオ関連の計測には、UnityのProfiler内にあるAudioグラフを使用します。
検証を行った環境は以下の通りです。
| OS | Windows10 Home |
| CPU | Intel Core i7-7700 |
| メモリ | 16GB |
| Unityバージョン | 2019.4.2 |
また、オーディオクリップは前回も使用したサウンドを、以下の設定で使用します。
| Load Type | Decompress On Load |
| Preload Audio Data | On |
| Compression Format | Vorbis |
| Quality | 100 |
| Sample Rate Setting | Preserve Sample Rate |
オブジェクト数での比較
スクリプトでAudioSourceのついたオブジェクト(エミッター)を好きなだけ自動生成できるようにして、鳴らすオーディオ数による負荷の違いを確かめます。
発音タイミングはいずれもランダムですが、発音しているオブジェクトが分かるように、発音時には赤くなるようにしています。


ためしに1個と100個で比較をしてみましょう。
鳴らす数が増えれば当然負荷も増えそうですが、実際はどうでしょうか……?
| オブジェクト1個 | オブジェクト100個 | |
|---|---|---|
| Total Audio CPU(%) | 約0.6 | 約1.5 |
| -DSP CPU(%) | 約0.5 | 約1.3 |
| -Streaming CPU(%) | 0.0 | 0.0 |
| -Other CPU(%) | 約0.1 | 約0.2 |
| Total Audio Memory(MB) | 2.3 | 2.5 |
| -Streaming File Memory(MB) | 0 | 0 |
| -Streaming Decode Memory(MB) | 0 | 0 |
| -Sample Sound Memory(MB) | 0.5 | 0.5 |
| -Other Memory(MB) | 1.7 | 1.9 |
やはり100個のほうが総合的な負荷は上がっていますね!
主にDSP CPUが大きな要因となっているようです。
2D/3Dの比較
オブジェクトにランダム速度で円運動する機能をつけてみます。
その際、円運動を有効にした場合はAudioSourceのSpatialBlendパラメータが1.0(3D全振り)になるようスクリプトを組みました。
動く場合は3D音響を適用、動かない場合は2Dで普段通り鳴らすだけ、ということですね。


先ほどのオブジェクト100個の状態で比較をしてみます。
3D音響のほうが空間のパラメータが多く、負荷が大きくなりそうですが、はたして……?
| オブジェクト100個2D | オブジェクト100個3D | |
|---|---|---|
| Total Audio CPU(%) | 約1.5 | 約2.1 |
| -DSP CPU(%) | 約1.3 | 約1.8 |
| -Streaming CPU(%) | 0.0 | 0.0 |
| -Other CPU(%) | 約0.2 | 約0.3 |
| Total Audio Memory(MB) | 2.5 | 2.5 |
| -Streaming File Memory(MB) | 0 | 0 |
| -Streaming Decode Memory(MB) | 0 | 0 |
| -Sample Sound Memory(MB) | 0.5 | 0.5 |
| -Other Memory(MB) | 1.9 | 1.9 |
予想通り、3D音響のほうがCPU負荷が増加しましたね!
今回はここまで!
次回はさらに掘り下げて、Load TypeやCompression Formatの違いによる比較を行っていきたいと思います。