【发布时间】:2012-08-23 23:25:45
【问题描述】:
我要做的是播放循环 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 字节)。
【问题讨论】:
标签: c# soundplayer