夏までにiPhone アプリつくってみっか!

趣味でiPhone/Androidアプリを開発し、日々勉強した事を書いています。オープンワールド系レースゲームをUnityで開発中です。

【cocos2d】CocosDenshionでSEを出してみた

敵が爆発する音と自機が弾を撃つ音をつけてみました。

音の素材はGarageBandのFXループのAbstract Atmosphere 155とSwirly Filter 14です。もしかするとGarageBand標準のループではなくMainStage 2に付属してくるJam Packに入っている物かもしれません。私はこのJam PackのためにMainStage 2を買いました。GarageBandで使えるループの数が数倍に増えますので、音選びの選択肢が増えます。Abstract Atmosphere 155の方はちょっと長過ぎたので少し短くして、音がぶつ切りにならないようにフェードアウトさせています。

cocos2dでSEを出すのは簡単です。CocosDenshionというオーディオ機能が付属していますので、これを使います。

#import "SimpleAudioEngine.h"

[[SimpleAudioEngine sharedEngine] playEffect:@"explosion.caf"];

基本的にはこの2行で音が出ます。explosion.cafは今回作成した爆発音のファイルです。シングルトンなので"SimpleAudioEngine.h"さえインポートすればプログラムのどこからでも音を出せます。また、事前に音声ファイルを読み込むことで音声ファイルの読み込みがアプリの実行速度に影響を与えるのを防ぐことができます。これにはイニシャライザなどで

[[SimpleAudioEngine sharedEngine] preloadEffect:@"explosion.caf"];

としておけばOKです。Learn cocos2d 2: Game Development for iOSによると、MP3などのデコードが必要なファイルはBGMのために取っておいて、SEはcafファイルなどの非圧縮の音声ファイルがおすすめとの事です。複数のMP3ファイルを同時に再生することも可能ですが、ハードウェアでデコードできるのは1つだけなのでCPUの負荷が増えてしまうとの事です。
さて、GarageBandから非圧縮音声ファイルを書き出すには、メニューより、共有→曲をディスクに書き出し...を選択し、表示されるドロップダウンメニューの圧縮のチェックボックスの選択を外します。書き出しを押すとAIFF形式で保存する事ができます。このままXCodeのプロジェクトにドラッグしてcocos2dから使う事もできますがこれはサンプリング周波数44.1KHzのCD音質でファイルサイズが大きいので、少しだけ設定を変えてサイズを小さくしてみます。
オーディオファイルの変換ツールとして、afconvertが標準で用意されていますのでこれを使ってみます。残念ながらGUIはないのでターミナルから実行します。

afconvert -f caff -d LEI16@22050 explosion.aif explosion.caf

元の.aifファイルがある場所で上記のコマンドを入力するとオーディオフォーマットの変換が行われ、eplosion.cafが作成されます。@の後ろの数字でサンプリング周波数を指定します。ここでは44.1KHzの半分の22.05KHzにしましたのでファイルサイズも半分になります。
CCActionで実装している敵の動きがぎこちないので次回はこれを滑らかにしたいと思います。