Cocos2d-x を使用して効果音を同時に再生した場合に Android では5音が上限となります。
この上限をあげる方法です。

Cocos2dx の修正

Cocos2dx の SimpleAudioEngine は Android の効果音再生に SoundPool を使用しています。SoundPool はひとつのインスタンスで複数の音を再生するのですが、インスンス生成時に最大数を決めて生成します。今回はこのインスンス生成時の最大数を変更します。

下記行が SoundPool の同時再生数になるので、この値を修正する。デフォルトでは 5 になっています。
android/src/org/cocos2dx/lib/Cocos2dxSound.java

private static final int MAX_SIMULTANEOUS_STREAMS_DEFAULT = 5;


ただやみくもに数を多くするとメモリが厳しくなってきます。SoundPool はロード時にデコードしてメモリに展開します。そのために再生時のレスポンスがよい利点があるのですが、ロードに時間がかかるのとメモリをそれなりに消費します。そのためにメモリは要注意です。再生しない音声ファイルは使用後は解放した方がよいです。

フォーマット

iOS と Android で再生するために wav または ogg 。

再生時間

ひとつのファイルの再生時間を 10秒以内(SoundPool の上限値)にする(Androidのみ)

再生時の注意

SimpleAudioEngine::preloadEffect で予め音声ファイルをロードしておき、
SimpleAudioEngine::playEffect で再生する。
SimpleAudioEngine::unloadEffect で音声ファイルを解放する。
※ SoundPool はデコードしてメモリに展開するため、ロードに時間がかかる。ロード完了前に playEffect しても再生されない。

関連する投稿