SilverSprite サウンドループで悪戦苦闘

こんなところでハマることになるとは。
SilverSpriteでは、XACTが使えないので、SoundEffectを使うことになるのですが、ワンショットの効果音を鳴らすのには問題ないのですが、ループするBGMを鳴らすときに問題が発生しました。
SoundEffect.Play()メソッドにループ再生するかどうか指定するbool型の引数があるのですが、これをtrueにしてもループ再生されないんです。


他に手がないか探してみました。
次に試したのは、SoundEffect.CreateInstance()でインスタンスを取得して、そのインスタンスのIsLoopedプロパティからループ指定してみようとしました。
ところが、コンパイル時にSoundEffectクラスにCreateInstance()がないと怒られました。
SilverSpriteの準拠しているXNAのバージョンが古いのでしょうか…


それなら…とSoundEffect.Play()の戻り値でインスタンスを取得してから無理やりIsLoopedプロパティでループ指定してみようと思いました。
でも、コンパイル時にIsLoopedは読み出し専用だと怒られます(XNAのヘルプには読み書きできると書かれているのに…)。
他に、Loopというプロパティを見つけたので、trueを書きこんでみると、今度は書き込んだところで
インスタンス メソッドへのデリゲートに null の 'this' を指定することはできません。」
と怒られます。
もう考える気力もなく、日本語でおk?と突っ込みたくなりましたww


ここまで来ると、もう、SilverSpriteにはループの処理自体が実装されていないんじゃないかと思うことにしました。


仕方が無いので、苦肉の策で、再生開始から時間を計測し出して、そのBGMの長さ分の時間が経過したらもう一度先頭から再生しなおすことでループすることにしました。
全く強引でしょうもない方法ですね…
1フレームに一回チェックするので、ループ時に最悪16~17ミリ秒の誤差が出ます。
スレッドを立てて非同期にチェックさせるのも考えましたが、面倒だし、今はいいや…と(まだC#でのスレッドの立て方を知らないし…色々調べ疲れました。あ、タイマーで定期的にハンドラを呼び出してもらう方法もあるか)。


SilverSpriteの方で普通にループ再生してくれれば良いんですけどね…