見出し画像

サウンドミドルウェアについて

良いゲームサウンドを実現する上でサウンドミドルウェア(実行時サウンド管理ライブラリ)の重要性についての話。

音のサイズについて

結論からいうとwavはmp3より10倍くらいでかいということを、少し細かく書きます。

(なお、単純に比較できるものではない&でてくる数値も厳密ではないので、だいたいこんな感じなのだなくらいにとらえてもらえると幸い)

音を鳴らすには、wavファイルなどの音声を量子化したデータを扱うのですが、wavは1秒間に44100x16bitの情報量で音を持っていたりします。

1秒あたり88200バイト=88.2KB

1分で5292000=5.3MB ステレオなら約10MB
CDサイズなら74分として740MBでしょうか。
曲数なら4分の曲が18曲くらい入るでしょうか。
作るにはこれくらいあれば、とりあえずいろいろなゲームのサウンドは作れそうですね。

でも、オーディオデータだけで740MBは大きすぎます。
これは、mp3なら128kbps 1秒あたり128kbit
wavだと44100*16=705600 つまり 705.6kbps
ステレオなら倍の1411kbps

まぁ、でかい。 大きいと扱いづらいです。 
大量にあると非常に困りもの。

ゲームサウンド扱う音の数

数え方なのですが、ゲームの場合同時に複数の音が鳴ります。
iPodとかみたいに1音BGM鳴らせばよいとか
youtubeみたいに1音オーディオトラックがあればよいとかとは違い、

例えばファミコンなら5音なるとか
つまり、メロディー、と効果音くらいは最低限なって欲しいのです。

昨今のゲームだと、8音くらいは最低でも多ければ200音とか超えてそうです。
(聞こえる音は64音くらいが限界かもですが、裏で待機しているとか、同時に複数鳴らして1音に聞こえるようにしているとか含めるともっと増える可能性もある)

大量の同時再生を極力軽くする必要がある

CPUやメモリの読み出し速度が高速化したとはいえ、限界があります。
すべてwavで扱っていたら、間に合いそうにありません。
DAWとかはそのレベルで扱って1曲作るのに数百トラックとかもありますが、ゲームでは音の処理以外にグラフィックの処理などでもリソースを使うので、そこまで贅沢に扱えません。
軽いことは重要だったりします。

いろんな音を鳴らしたいけど容量は小さくしたい

音が鳴っていると豪華に感じるのですが、そのためにダウンロードに時間がかかってしまうとかだと、なかなか厳しい。
さらに何十時間分のボイスを入れておくなんて場合には、圧縮の技術はとても大事。
このシーンでは曲を追加したいとか思っても容量制限で入れられないとかだともったいないですよね。

サウンドミドルウェアが目指しているところ

ゲームサウンドの実現には、大量の音を扱うのと、それらを同時に鳴らす必要があります。ですが、リソースは限られています。

そこで、不要な音を鳴らさないといった。グラフィックでいうところのカリングみたいなことが、サウンドでも必須になります。

シンセサイザーとかでの同時発音数リミットと同じ考えて、古いものや、目立たない音など、音に優先度をつけて、目立つ音のみ残すという処理があります。

これは、音量だったり、距離だったり、時系列で古いものだったりを適宜間引きます。


これらは、何かしらのツールで設定が必要になり、
優先度や圧縮設定をサウンドミドルウェアの付属のツールで行います。
(オーディオデータの元データはwavなので、圧縮などを事前処理しておくことで、ゲームデザイン時にコンパクトになり扱いやすくなります)

サウンドのプログラムは結構難しい

グラフィックでは映像の更新が滞ると、画面がガクついたり、更新にノイズが入ったりします。

同じように音も途切れると 耳障りなブツブツといった音が鳴りだします。

音の場合、少しでも間があると、すぐにノイズになります。

あと、止められません。 
映像なら処理落ちしてても静止画でなんとかごまかせる場合もあるのですが、
音の場合振幅を生み続ける仕組みが絶え間なく、揺らぎなく動き続けている必要があります。
処理落ちしていても音だけは鳴らし続ける必要があります。
(無音にすればごまかせるのですが、瞬時に無音にしてもノイズになる)

VRでは立体音響化に欠かせないエフェクト類もノイズ無く鳴らす必要があります。


これらのノイズにならないように、処理管理を代行してくれるのがサウンドミドルウェアです。

とてもありがたいものですし、良い音を目指すのであれば、サウンドミドルウェア必須です。

不要な音の管理とか音質を損なわない圧縮テクニックも重要です。
これらの話は長くなりそうなので、また別の機会で。

この記事が気に入ったらサポートをしてみませんか?