我想要做的是播放循环 wav,但具有特定的循环开始位置,如音乐模块文件(.it、s3m..mod 等)中使用的样本。SoundPlayer 没有这个功能,所以我创建了两个单独的文件:原始 wav 和开头截断到循环开始处的 wav。我想无缝地连续播放这两个文件,首先是使用 PlaySync() 的原始 wav 文件,然后是使用 PlayLooping() 的循环部分。
不幸的是,在我 PlaySync() 第一个 wav 之后,它和 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();
}
这在播放两个不同的不同声音时可能不明显,但在尝试拉出我想要的循环机制时非常明显。声音 wav 是乐器样本,非常小(通常不超过 0x1000 字节)。