BGMを鳴らしながら効果音再生するときの落とし穴

通常、長い音はAVFoundation.frameworkのAVAudioPlayerで、短い音はAudioToolbox.frameworkのSoundIDを使って再生します。
しかしAudioToolboxには以下の様な問題があります。

  • マナーモードにすると鳴らない(イヤホンをつけて聴くとよくわかります。)
  • AirPlayでアプリのシミュレーションをしている状態で再生すると音が鳴らない
  • AVAudioPlayerでBGM再生中に音を鳴らすと、BGMがフェードイン/アウトされてしまう


ということで、AudioToolboxはたしかに便利ではありますが、ゲーム開発には向いていません。

各種人気ゲームを調べたところ、AudioToolboxを使った音声再生は一つも見つかりませんでした。
ツールアプリで言えば、Twitterの更新時の「パッ」という音は短い音なのでAudioToolboxかと思いきや、きちんとマナーモードでもAirPlayでも再生されたので、恐らくAVAudioPlayerでしょう。しかし、Facebookメッセンジャーの更新時の「チュイッ」という音は完全にAudioToolboxの条件と同じでしたので、AudioToolboxを使用していることが予測されます。


アプリ名 使用フレームワーク
Twitter 引っ張って更新するときの音 AVFoundation
Facebookメッセンジャー 引っ張って更新するときの音 AudioToolbox


ということは、まず第一の前提として、ゲームアプリを作る時は「AudioToolboxは使わない」ということになります。


さて、ゲームアプリ開発においてAVAudioPlayerでの音声再生が優位であることが決まりました。次に、BGMと効果音の同時再生についてです。
音声ファイルは、馴染みのある.mp3形式をよく使うのですが、同時再生には「.caf」形式が推奨されています。mp3のファイルは再生に負荷がかかると言われており、iPhoneでは動作にもたつきの出る可能性があります。そのため、ターミナルを使ってmp3ファイルをcaf形式に変換し、それをアプリ内で使用してあげるとよいでしょう。

【ターミナルでのコマンド】
デスクトップにSoundというフォルダを置いてその中にmp3ファイルを保存していた場合
①「-cd」コマンドで移動
Masuhara:~ User$ cd /Users/User/Desktop/Sound/
②「afconvert」コマンドでmp3をcafに変換し、同じフォルダ内に保存
Masuhara:Sound User$ afconvert -f caff -d ima4 -d LEI16@22050 hoge.mp3 hoge.caf
最終更新:2014年02月10日 05:27