ゲームプログラマー向けのサウンド入門を目指して
自分は仕事でゲーム開発する際に、サウンドから入りました。
たまたまそういうアサインだったのです。
ただ、基礎がまとまってなくて結構苦労したのを覚えています。
ググッてもあんまり情報が出てきません。
まだ、おそらくじぶんの知らない部分もいっぱいあるけれど
全然知らない人がこれから取り組むときに参考にできるものを目指して
まとめてみようと思います。
※Unityで使えるサウンド機能についてもちょこちょこ触れてます。
前提
- サウンド自体は、別のだれかが作ってくれる
- わたし(読者)は、それを適切に取り込まないといけない人
例1: どのファイル形式で、とか
例2: どれくらいのサンプリングレートで、とか
ファイル形式
一番良い音質になるのは当然非圧縮形式ですが、それだとBGMのような再生時間の長いもので問題が起きます。
例えば、wav形式であれば
- 5分 (=300秒)
- 44100Hz (サンプル数/秒)
- 16bit (bit/サンプル数)
- 2ch (2つ分)
だと、
300 * 44100 * 16 * 2 = 52920000 (Byte) = 52.92 (MB)
となり、1つのBGMでこんなに重いと100個で5Gになってしまいます笑
サウンドだけでこんな容量になってしまうと全体のアプリの容量も増えて非常に困るわけです。
例えばiPhoneの一番少ないストレージだと16GB (でしたっけ)なので、
サウンドだけで5GBだと困るし、アセットをダウンロードするにも異常に時間かかります。
なので、BGMのような大容量ファイルは圧縮形式にした上で、
適切に音質をコントロールしつつ、できるだけ容量を下げる必要があります。
WAV (WAVEとも書く)
MP3
- Moving Picture Experts Group (MPEG !) というワーキンググループが開発
ー 専門家の集団らしい - 圧縮形式
- mp3の技術には特許があり、利用すると訴訟リスクがあり、あまり使われていない (はず)
- なのにUnityではiOSでビルドするとoggというサウンドファイル形式がmp3に変換されてしまう…
ー UnityではAIFF, WAV, Ogg, MP3の4種類サポートで、圧縮形式はOggとMP3の2種類しかないから詰んでる
特許云々の話は以下にまとまっております。
実際にMicrosoftが訴訟されたりしています。
MP3のライセンス問題はその後どうなったのか : Timesteps
iOSでビルドすると云々の話は以下です。
ちなみにUnityでサポートしてるサウンド形式については、以下に書かれています。
Ogg
- Xiph.org Foundation (ザイフォ財団)という非営利団体が開発
- パテントフリー (特許なし)
- 圧縮形式
すばらしいですね。Oggを利用する、という結論でよさそうです。
AAC
音質(と容量)を決める重要な指標
ファイル形式とは別に、音質を許容範囲まで下げることで容量を減らすこともできます。
容量を減らす必要がなかったとしても、サウンドライブラリ・エンジンの仕様で指定した形式のデータでないとそもそも再生できなかったりするので、各指標を把握するのは必須です。
サンプリングレート/サンプリング周波数
1秒あたりのサンプルデータ数。
アナログデータは連続ですが、デジタルデータは非連続なのです。
サンプルデータ数を増やすほど、アナログデータの音に近づきます。
ちなみに、音楽CDは44.1kHz/16bit (こっちはビット深度。後述)らしいです。これを超えたやつがハイレゾ。
ビット深度 /量子化ビット数
サンプリングデータ1つあたりのデータ量(bit)のこと。
CDで使っている16bitなら、2^16で0-65535の値でデータを表現できる。
8bitとかにすると音が雑になって、ノイズが出る(らしい)。これを量子化誤差と呼ぶ。
ビットレート
単位はbps (bits per second)。1秒にどれくらいのデータ量が処理されるかを表す。
音楽CDの目安は128kbpsだとか。
こちらとか聴いてみると面白いかも。
チャンネル数
よく言われるモノラル/ステレオのことです。ステレオだと2チャンネル使います。
モノラルで再生できるものならモノラルで納品されるので、それを把握した上で組み込む必要があります。
ゲーム開発でよく出てくるサウンド周りのキーワード
あとはざっとまとめます。
ポイントループ
同じBGMをまるっとループ再生するのではなく、指定したポイント(ループポイント)からループして再生することがよくあります。
サウンド作成ソフトで、ループポイントを指定できて、それはバイナリファイルのコメント部分に直接埋め込まれています。
WAVEで納品されて、例えばoggに変換するときにループポイント指定部分が除かれてしまったりしないように注意する必要があります。
Wavosaurというフリーソフトがあるので、これを使って変換すれば(CUIじゃなくて面倒ですが)ポイントループを引き継いで変換できます。
同時再生数
SEを何かのアクションに合わせて再生させるとき、最大いくつまで再生出来る、という設定を入れることで音が重なりすぎて変な音になることを防ぐ仕組みがあります。
・・・なければ作る必要があります汗
フェードイン/アウト
これくらいできないと、ゲームとして結構微妙な演出になります。
あれ、もっとあった気がするけど思い出せない・・・汗
また書きます。
最後に
また後日、追記して一部具体的なやり方についても書きます。