Xamarin+CocosSharpでデバッグしているとVisual Studioで以下のようなメッセージにふと気付きました。
結構前からあるバグで、CCAudioEngine.PlayEffectを1024回実行すると「Failed to generate OpenAL data buffer」となって正しく再生されなくなるようです。
確かに、効果音が鳴らなくなることがあるなと感じてはいましたが、あまり考えてませんでした。
nazenaninadesico.hatenablog.jp
上記サイトによると1024回呼び出したら、CCAudioEngineをEndして、GC.Collectすると解消されるようです。
実装すると下記のような感じですかね。
/// <summary> /// Xamarin向けに実装した効果音再生サービスです。 /// </summary> public class SoundService { CCAudioEngine _audioEngine = new CCAudioEngine(); private int _audioPlayCount; /// <remarks> /// <see cref="CCAudioEngine.PlayEffect(string,bool)"/>を1024回実行すると「Failed to generate OpenAL data buffer」となるので1024回ごとにリセットする。 /// </remarks> public void Play(string name, bool isLoop = false) { if (_audioPlayCount > 1024) { ResetAudioEngine(); } _audioPlayCount++; _audioEngine.PlayEffect(name, isLoop); } /// <summary> /// CCAudioEngineをリセットします。 /// </summary> /// <remarks> /// 適宜呼び出されますが、シーンの切り替わるタイミングで呼び出してリセットしてください。 /// </remarks> public void ResetAudioEngine() { _audioEngine.End(); _audioEngine.Dispose(); _audioEngine = null; System.GC.Collect(); _audioEngine = new CCAudioEngine(); _audioPlayCount = 0; } }