SimpleAudioEngineではチャンネルを制御できないため、内部で割り当てられたチャンネルの1つでサウンドエフェクトを再生するだけです。最終的には、すべてのチャンネルでオーディオが再生されます。その場合、新しいオーディオファイルが再生され、すべてのチャネルがすでに再生されていると、SimpleAudioEngineは既存のオーディオファイルの1つをキャンセルします。時々、これはあなたのバックグラウンドミュージックになります。ダン。
これを修正するために通常行うことは、バックグラウンドミュージック専用に1つのオーディオチャネルを割り当てる(割り当てる)ことです。他のオーディオがそのチャネルでオーディオを再生しようとすることはありません。「通常の」CocosDenshionAPIを使用する必要があります。CDAudioManagerまたはCDSoundEngineのいずれかを使用する必要があるようですが、 CocosDenshionでチャネルを使用した経験はありません。
個人的には、CocosDenshionを使用したことはありません。より詳細な制御が必要なときはいつでも、ObjectAL APIの方が理解しやすく、優れたドキュメントがあります。特定のチャンネルでサウンドを再生するObjectAL用に次のヘルパー関数を作成しました。私は単にバックグラウンドミュージックのALChannelSourceをインスタンス化し、そのチャネルを介してのみバックグラウンドミュージックを再生しました。返されたALSoundSourceを使用すると、オーディオの再生中にピッチやパンなどを変更することもできます。
+(id<ALSoundSource>) playEffect:(NSString*)effect channel:(ALChannelSource*)channel loop:(bool)loop
{
id<ALSoundSource> soundSource = nil;
if (channel)
{
ALBuffer* buffer = [[OALAudioSupport sharedInstance] bufferFromFile:effect];
soundSource = [channel play:buffer loop:loop];
}
return soundSource;
}
OALSimpleAudioクラスで再生している他のすべてのオーディオファイル。