BANXの日記

ゲームとか、たまにプログラムとか。

XNA メモ - 謎の音声再生停止 原因と解決策

XNAでBGMをループ再生させようとした時、
XACTで無限ループに指定したはずの音声が
何故か突然再生停止し、悩まされたのでメモ。


【現象】
XACTで無限ループ指定したはずのCueを再生中、
突然再生が停止する。


【原因】
WaveBankかSoundBankがGCで破棄されていた


【詳細】
1. LoadContentメソッドでAudioEngine、WaveBank、SoundBankを生成
2. 生成したSoundBankからCueを取得
3. AudioEngine、Cueはメンバ変数として保持
4. WaveBank、SoundBankは保持していなかった
Cueはメンバ変数として保持していたため破棄されていなかったが
Cueに紐付くBankがGCで破棄され、Cueの再生が停止していた。
この時、CueはIsPlayingもIsStoppingもIsPausingもIsDisposingもfalseという
不思議な状態になっていた。


【解決策】
生成したWaveBank、SoundBankをメンバ変数として保持することで
GC対象とならないようにする