【Unity】音声ファイルのインポート設定はこうしとくといい

[PONOS Advent Calendar 2024](https://qiita.com/advent-calendar/2024/ponos) 15日目の記事です。

<hr>

Unityでオーディオクリップ(wav,mp3など)をインポートした際、その再生方法や圧縮方法を設定する事が出来ます。
このインポート設定を適切に設定する事で、データサイズの圧縮・再生負荷の軽減に繋がります。

特に音声データはファイルサイズが大きいので、パフォーマンスの低下に繋がりやすいです。「画面がカクッとすると思ったら音声設定が原因だった」というケースも実際に遭遇した事があります。

適切な設定を行い、パフォーマンスの向上に繋げましょう。

公式のマニュアル：https://docs.unity3d.com/ja/2018.4/Manual/class-AudioClip.html

# 早くオススメ設定出して

明確な答えは無いのですが、自分はこうすると良いと思いました。
BGMとSEの特徴を加味して、以下の2パターンで設定しています。

### ◆ BGMファイル向け

![BGM_Import.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/924601/c1bf6d6f-33ae-dec9-0b08-d6623c4d236f.png)

|LoadType|CompressFormat|Quality|
|:--:|:--:|:--:|
|Streaming|Vorbis|70%ぐらい ここはお好み|

容量の大きいBGMファイルは圧縮でファイルサイズの軽減をすべきです。一方で同時に複数再生される事は少ないので、再生負荷はあまり考えなくても良いです。
Vorbisで圧縮率を高めに、Streamingによる随時ロードにしてメモリを消耗しすぎない様にします。音質は少し劣化するかもしれません。

### ◆ SEファイル向け

![SE_Import.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/924601/922e4113-7787-c8ba-5f38-d5b3884a2ff6.png)

|LoadType|Compressed In Memory| 
|:--:|:--:|
|Streaming|ADPCM = Vorbis (> PCM)|

SEファイルは再生時間が短い代わりに再生回数が多く、再生による処理負荷がネックとなります。
再生負荷を低くするなら圧縮方式はADPCM。音質も重視したければBGMと同じくVorbisで。
再生方式はバランスの良いCompressed In Memoryにします。

もしもっと再生負荷を軽減したい場合は圧縮方法をPCMにして下さい。

### + 追加で確認できると良い

<b>◆ Load In Background</b>
非同期で読み込ませたい場合はオンにします。
負荷軽減になりますが再生に遅延が出る可能性があります。

<b>◆ Preload AudioData</b>
シーン読み込み時、同時に音声ファイルを読み込みたい場合はオンにします。
再生した瞬間、ロードによる負荷が掛かるのを阻止できます。

<hr>

以下、各設定項目の解説です。


# 各項目について

|項目|説明|
| --- | --- |
|Force To Mono|オンにすると強制的にモノラルになる。ファイルサイズは1/2になります。|
|Load In Background|オンにすると非同期読み込みになり、メインスレッドを止めずにロード出来ます。ただし再生が遅れる事があります。|
|Ambisonic|アンビソニックオーディオの場合はオンにします。立体音響の設定ですが基本はオフでOK。|
|LoadType|音声のロード方法を指定する。再生負荷に影響します。|
|Preload Audio Data|シーン読み込み時、事前に音声ファイルを読み込みます。オフの場合は再生時に読み込みが開始されます。(AudioClip.LoadAudioDataで手動で読み込み可能)|
|Compression Format|圧縮形式を指定する。ファイルサイズ・再生負荷に影響します。|
|Quality|圧縮の品質に影響します。|

## LoadType
音声のロード方法について。

### Decompress On Load
データを全て展開してメモリにロードします。

PCM(無圧縮方式)に変換され、容量の大きい状態でメモリにロードされます。
メモリは喰いますが、再生負荷は最も軽いです。

<font color="#ff0000">デフォルト設定ですが一番メモリを使います。基本は下2つにした方が良いです。</font>


### Compressed In Memory
データは圧縮されたままメモリにロードされ、再生中に展開されます。

展開処理による負荷はかかりますが、メモリの消費は少なく済みます。
 

### Streaming
メモリには置かず、再生中にロードしながら展開されます。

メモリ消費量を抑える事が出来ますが、再生中にストレージへのロードが走ります。また展開による負荷とロードによる遅延が起こります。

### ◆ 各項目の比較

|種類|メモリ|処理負荷|
| :--: | :--: | :--: |
|Decompress On Load|<b>無圧縮のデータがそのまま入る。重い</b>|小|
|Compressed In Memory|圧縮されたデータが入る。普通|中|
|Streaming|随時ロードされる。軽い|大|

## Compress Format
圧縮形式について。

### PCM
無圧縮。
デコードしないので負荷は最も小さいですが、容量がかなり大きくなります。


### Vorbis(OGG)
圧縮率が高い設定。
ファイルサイズは低くなりますがデコードによる負荷は大きいです。

Qualityで品質が設定できる。品質を下げると音質は下がるがファイルサイズは小さくなります。
 

### ADPCM
Vorbisよりも再生負荷が低い事が利点。
音質は設定出来ず、やや品質は低め。

### ◆ 各項目の比較

|種類|容量|品質|再生負荷|
| :--: | :--: | :--: | :--: |
|PCM|無圧縮。大きい|高い|最も小さい|
|Vorbis (OGG)|調整可能|調整可能|大|
|ADPCM|小さいがVorbisより大きい|低い|小

## デフォルト設定
何も設定しないデフォルトの設定は以下の通りです。
個人的にはこれをそのまま使うのはお勧めできません。

![Audio_DefaultImport.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/924601/1be21703-f13f-ce30-cb56-13248bf17556.png)

|項目|値|
| --- | --- |
|Force To Mono|オフ|
|Load In Background|オフ|
|LoadType|Decompress On Load|
|Compression Format|Vorbis|
|Quality|100|

圧縮設定はこれで大体30％前後ほどのサイズになります。
しかしロード方法の「Decompress On Load」は一番メモリを消費する設定なので、ここはデフォルトからは変えた方が良いです。

# まとめ

テクスチャに比べてオーディオのインポート設定は見逃されやすいポイントです。
また設定を変えても目視では違いが確認出来ない事も設定が難しい要因の一つとなっています。

圧縮によるファイルサイズの変動はエディタ上でも確認出来るので、まずは適切な圧縮設定を見つける所から始めてみて下さい。
そしてこの設定に加えて音声ファイルを事前にロードする処理を導入できれば完璧です。再生時にカクついたりロードに時間がかかったりする事は無くなります。

次回は[@honeniq](https://qiita.com/honeniq)さんの記事です。お楽しみに〜。