Cockatiel技術ブログ

株式会社ピュアサウンドのオーディオソリューション。いろいろ音を鳴らしています。

Unity

Unityオーディオの負荷について-各フォーマットのメリットデメリット

投稿日:

前回は100個のサウンドを鳴らして、CPU使用率やメモリサイズの比較を行いました。
単純比較ではストリーム再生がCPUとメモリともに負担が大きいという結果が出ましたが、やはり長いファイルを演奏するときにストリーム再生は真価を発揮します。

今回は、長さの違うサウンドファイルも用意して、より実際のゲーム製作に近いシチュエーションで調べていきましょう!

今回使うファイル定義

まず、サウンド「BGM」「ジングル」「効果音」の三種類に分類します。
Compression Formatごとのデータサイズは、以下の通りです。

長さPCMVorbis
(Quality100)
Vorbis
(Quality1)
ADPCM
BGM120秒21.9MB6.5MB0.8MB6.2MB
ジングル10秒1.83MB507.4KB55.1KB0.5MB
効果音1.5秒283KB61.8KB6.9KB79.2KB
フォーマットは48000Hz/16bit/Stereo。

そのうえで、BGMを20ファイル、ジングルを10ファイル、効果音を100ファイル用意します。

Compression Formatごとの合計データサイズは、以下の通りです。

  • PCM:約485MB
  • Vorbis(Quality100):141.4MB – 圧縮率29%
  • Vorbis(Quality1):16.9MB – 圧縮率3.5%
  • ADPCM:136.5MB – 圧縮率28%

これら130個のファイルを同時に再生して、負荷を調べます。

CPU使用率

CPU使用率の違いは以下の通りです。

Decompress On LoadCompressed In MemoryStreaming
PCM3.00%3.20%4.40%
Vorbis
(Quality 100)
3.00%21.50%21.80%
Vorbis
(Quality 1)
3.40%10.70%10.60%
ADPCM6.90%8.80%7.10%

赤文字の二か所が特にCPU負荷がかかっていることが分かります。
Unity上の圧縮の選択肢としては、音質と圧縮率に優れたVorbisが一番にあがりますが、発音体が多い場合はCPU負荷が顕著に表れます。

メモリ使用量

続いて、メモリ使用量の違いは以下の通りです。

Decompress On LoadCompressed In MemoryStreaming
PCM489.4MB489.4MB29.8MB
Vorbis
(Quality 100)
491.1MB145.7MB31.5MB
Vorbis
(Quality 1)
491.1MB21.2MB31.5MB
ADPCM489.4MB140.8MB29.8MB

Decompress On Loadでは無圧縮のPCMをメモリに置くことになるので、膨大なデータサイズとなります。
オリジナルのデータサイズがそのままメモリに載るといえます。

Compressed In MemoryではCompression Formatの合計サイズに4MB程度の「Other Memory」「Sample Sound Memory」が加わった値になります。
圧縮後のデータサイズの合計を見れば、オーディオメモリサイズの予測がつきますね。

Streamingは前回の記事で触れたように、オブジェクトが増えるごとにおよそ248KBメモリサイズが増加します。
今回は130個のオブジェクトで音を鳴らしているので、130×248KB=約31.5MBとなります。
誤差はありますが、ほぼほぼ予想通りの値です。
このことから、発音オブジェクトの最大数が分かれば、オーディオの使用メモリサイズが予測できます。
また、Vorbisは他と比べて「Other Memory」として若干多くメモリを使うようなので、その分が増えています。

今回のまとめ

今回は「データサイズ」「CPU使用率」「メモリ使用量」の三つの視点で調査を行いました。
それぞれでメリット・デメリットがはっきりしたかと思います。

たとえばBGMや環境音など長いサウンドではStreaming。
システム効果音やバトルで使われそうな短めのサウンドはCompressed On Memory。
頻繁に呼ばれそうなサウンドは、CPU負荷が最も少ないDecompress On Load……というような振り分けが理想的といえます。

Compression Formatは容量が許せばPCMが理想ですが、今回のような500MBものデータサイズはさすがに大きすぎるので、VorbisやADPCMの特性を理解したうえで設定するのがベストです。

-Unity
-,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

seven − 7 =

関連記事

no image

Unityのエディタ拡張『CTAudioPreviewer』をリリースしました

昨日4/16、Unityアセットストアにてエディタ拡張『CTAudioPreviewer』をリリースしました。 CTAudioPreviewer – Asset Store CTAudio …

no image

UnityオーディオクリップのCompression Formatについて

大変ご無沙汰しています! 最近ピュアサウンドではUnityでの開発に関わることが多くなっています。 高度なオーディオ処理のためにCRIWAREやWwiseといったサウンドエンジン使用は定番になりつつあ …

no image

Unityオーディオの負荷について-Load Type&Compression Format比較編

前回の記事では、実際にUnity内で音を鳴らした場合の、オブジェクト数や2D/3Dの有無による計測を行いました。 今回は、オーディオクリップのLoad TypeやCompression Formatの …

no image

Unityオーディオの負荷について-オブジェクト数&2D/3D比較編

前回の記事ではオーディオクリップのCompression Formatによる音質とデータサイズの違いに触れました。ここからは複数回に分けて、様々な条件でCPUやメモリ負荷の比較をしていきたいと思います …