私がやろうとしているのは、ループwavを再生することですが、音楽モジュールファイル(.it、s3m、.modなど)で使用されるサンプルのような特定のループ開始位置を使用します。SoundPlayerにはこの機能がないため、元のwavとループの開始位置までカットオフされたwavの2つの別々のファイルを作成しました。2つのファイルをシームレスに連続して再生したいのですが、最初に元のwavファイルをPlaySync()で再生し、次にループセクションをPlayLooping()で再生します。
残念ながら、最初のwavをPlaySync()した後、PlayLooping()がループwavの再生を開始すると、その間に一瞬の中断があります。
private static void PlayThread(SoundPlayer soundPlayer, byte[] wav, byte[] loop)
{
MemoryStream stream1 = new MemoryStream(wav);
MemoryStream stream2 = new MemoryStream(loop);
soundPlayer.Stream = stream1;
soundPlayer.PlaySync();
// here is where the split second interruption occurs
soundPlayer.Stream = stream2;
soundPlayer.PlayLooping();
}
これは、2つの別々のサウンドを再生する場合は目立たない場合がありますが、必要なループメカニズムを解除しようとすると非常に目立ちます。音波は楽器のサンプルであり、非常に小さい(通常は0x1000バイト以下)。