大変ご無沙汰しています!
最近ピュアサウンドではUnityでの開発に関わることが多くなっています。
高度なオーディオ処理のためにCRIWAREやWwiseといったサウンドエンジン使用は定番になりつつありますが、それらを使わずUnityの標準オーディオシステムのみで完結させたい、というケースも多いのではないでしょうか。
そんなUnityのオーディオシステムについて、あらためて向き合って気づいた点、気になった点などを数回にわたり掘り下げていきたいと思います。
第一回は、オーディオクリップ内の「Compression Format」で選択できるオーディオデータフォーマットについてのお話です。
※以降は、Unityのバージョン2019.4.2における情報です。
フォーマットの種類
Unityのオーディオクリップでは、いろいろな種類のオーディオファイルを扱うことができますが、ビルドの際にどのフォーマットでパッケージに含めるか、以下三種類から選ぶ必要があります。
・PCM
パルス符号変調 – Wikipedia
PCMは無圧縮のデータなので当然原音再現は完璧です。
圧縮データのデコードなどのプロセスも必要ないのでCPU負荷もほぼないですが、とにかくデータサイズがデカイ。
パッケージのサイズは大きくなってしまいますし、よほど短い音でないとメモリに置くのもためらうレベルです。
・ADPCM
適応的差分パルス符号変調 – Wikipedia
ADPCMはその変換の仕組み上、ノイズのようなギザギザ波形(=サンプル間のデータの差が著しく大きい波形)の再現が苦手と言われます。
データサイズは1/4~1/3程度になります。
変換の仕組みそのものはシンプルなので、CPU負荷も抑えめです。今でも組み込み機器など様々な場面で使われていますね。
・Vorbis
Vorbis – Wikipedia
Vorbis(Ogg Vorbis)はMP3のような強力な圧縮方式です。
Unity上ではQualityの値を調整することで圧縮率と音質のバランスを選べます。
ボイスやBGMなど音質重視のものは高Qualityに、重要度の低いサウンドを低Qualityに……など、自由度は高いです。
ただし、高度な変換処理を行うため上二つに比べCPU負荷、処理時間がかかります。
即応性・タイミングの正確性が重要な場面では事前ロードを使用したり、そもそも別フォーマットにしたほうが良い……というのが一般的な見解です。
……とまぁ、概要に関しては公式ドキュメント含め様々なところで説明がなされていると思います。
ここからは、実際に変換したサウンドをキャプチャして、いろいろと比較してみましょう!
聞いた感じの比較
検証用に、48000Hz/16bitステレオの音を5つ用意しました。
・アコースティックギター
・ドアの音
・ピンクノイズ
・サイン波
・水の音
これらの音を、インスペクター上で「PCM -> ADPCM -> Vorbis(Quality100) -> Vorbis(Quality50) -> Vorbis(Quality1)」の順で切り替え、鳴らしてみます。
まずはアコースティックギターから。
VorbisのQuality1ではさすがに音がガタガタですが、それ以外では特に遜色ない感じですね!
こういったサウンドは、ゲームではBGM、ジングルなどで扱われる事が多い部類にあたるので
プロジェクトの総容量と相談の上クオリティを決めるのが良いと思います。
次にドアの音。
Quality1だとさすがに歪んでいますが、アコースティックギターほど違和感はないかも?
こういった音程低めのインパクト音ならQualityを下げるという選択もアリですね。
頻繁に使われそうな音はオンメモリに置かれることが多いので容量を調整する際に最初に手を付けやすい候補かと思います。
続けてピンクノイズ。
Quality1だと高周波帯域の音が若干薄れて聞こえますが集中して聞いてようやく気付く程度ではないでしょうか。
前述の通り本来ノイズ系の音はADPCMだと音が丸まりやすいのですが、特に遜色なく再現できていますね。
続けてサイン波。
アコースティックギター同様、VorbisのQuality1ではガタガタになります。
音程感のあるサウンドはQualityの影響がより目立つようです。
特にサイン波のようなシンプルで倍音が少ない音色は影響を大きく受ける傾向にあるようです。
最後に水の音。
サイン波と違い多様な周波数帯域を持つようなサウンドはQualityを下げた影響を受けづらい印象です。
ノイズと近似して高周波帯域の音が若干薄れて聞こえる印象ですね。
ADPCMはいずれのサンプルでも大きな変化はなく優秀な圧縮フォーマットである印象ですね。
PCMは上記の中で最高品質ですので、BGMで採用する機会が多いのではないでしょうか。
スペクトルアナライザでの比較
スペクトルアナライザで視覚的にも確認してみましょう。
Cubaseのスペクトルアナライザを使用します。
画像は上段左からPCM->ADPCM、下段左からVorbisのQuality100->Quality50->Quality1です。
(ちょっと画像は小さいですが、クリックすれば拡大可能です!)
・アコースティックギター
・ドアの音
・ピンクノイズ
・サイン波
・水の音
全体を通して、以下の傾向が見られます。
・Quality1のVorbisは、15kHzくらいから上をごっそり削られる
VorbisのQualityは、主に高周波域の再現性に影響する、と考えてよさそうです。
データサイズ圧縮率の比較
最後に、インスペクター上で変換した際のデータサイズの変化をまとめました。
ADPCMはサウンドごとの差は少なく、おおむね30%程度までサイズダウンします。
対してVorbisはサウンドによって削減率にも違いが生じています。サイン波など倍音成分の少ないシンプルな音ほど、大きな削減率となる傾向ですね。
おわりに
今回は主にデータサイズと音質に重点を置いた話となりました。
ゲームでサウンドを扱う場合、CPU負荷やロード時間といった点も避けて通れない重要な要素です。
次回はUnityで実際にテストプログラムを動かして、フォーマットごとにどんな違いが生じるか検証したいと思います。