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

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

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

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

そうすると、途中でエラーが出ます。 コンソールには以下の様な注意文が、 [c] 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

[/c]

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

色々調べてみた結果

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

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

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

さいごに

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

[参考にしたサイト]