[cocos2d] SimpleAudioEngineを使った効果音作成での注意点 曲数制限

[cocos2d] SimpleAudioEngineを使った効果音作成での注意点 曲数制限
   

現在、効果音をSimpleAudioEngineで利用しようかと思っているのですが、ある問題点に出くわしたのでブログで紹介したいと思います。
[SimpleAudioEngineについてはこのサイトが綺麗にまとまっています]
ゲームを作るなら、効果音、声、BGMも必要だよね – iPhoneアプリ開発覚書


ロードできる曲数は最大32曲まで?

SimpleAudioEngineを使う際には、事前に音楽ファイルをloadしておくことで、スムーズに音楽を鳴らせます。
そこで、私がゲームで利用している効果音を、一気にロードしようと以下の様なコードをinit内で書きました。
2013 2 13 2211

そうすると、途中でエラーが出ます。
コンソールには以下の様な注意文が、
2013-02-13 16:00:00.000 Mygameprpject[14157:c07] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** setObjectForKey: object cannot be nil (key: ******)'
*** First throw call stack:
(0x223c012 0x1c19e7e 0x22bf0de 0x904cd 0x8f822 0xf9e34 0x14faf5 0xf918a 0x7628 0x734a 0x8844 0xb5e80f 0xb5ee01 0xb5ffab 0xb71315 0xb7224b 0xb63cf8 0x2f44df9 0x2f44ad0 0x21b1bf5 0x21b1962 0x21e2bb6 0x21e1f44 0x21e1e1b 0xb5f7da 0xb6165c 0x71b0 0x2595)
libc++abi.dylib: terminate called throwing an exception
Current language:  auto; currently objective-c


試しに曲数を1曲にして、ロードしてやってみると上手く音がでます。
曲数がある程度増えるとエラーがでるのです。

色々調べてみた結果

日本語のサイトはあまりなかったのですが、海外のフォーラムにチラホラ同じような意見が見えました。
そこでは、Memoryの制限で32曲までしかロードをすることができないと書いてあります。

つまり、SimpleAudioEngineでロードできる曲数は32曲ということです。

ただ、これは32曲しか使えないということではなく、ロードできる曲数ということ。
都度、unloadEffectを使って曲を開放して上げれば、問題みたいです。
//このメソッドを利用数のかな。
-(void) unloadEffect:(NSString*) filePath
{
	CDLOGINFO(@"Denshion::SimpleAudioEngine unloadedEffect %@",filePath);
	[bufferManager releaseBufferForFile:filePath];
}


さいごに

私の利用するゲームには32曲以上効果音があるので、一気に音楽ファイルを読み込むより、必要な数だけ都度読んで使わないといけません。
そうするとコードが複雑になる可能性がるので、これに関してSimpleAudioEngineを継続して利用するかどうか考え中です。
もし何か良い方法があれば、教えてください。


[参考にしたサイト]



Related Posts Plugin for WordPress, Blogger...