使用 DirectSoundOut 播放声音阵列时需要 thread.sleep()

Need for thread.sleep() when playing a sound array using DirectSoundOut

dso = new DirectSoundOut(Guid.Parse(AudioOutDevice));
var ms = new MemoryStream(soundArray.ToArray()))
{
    IWaveProvider provider = new RawSourceWaveStream(ms, new WaveFormat());
    dso.Init(provider);
    dso.Play();
    Thread.Sleep(3000);
}

我可以使用上面的代码通过所需的输出设备播放声音阵列,如果有thread.sleep我听不到声音。但是我无法理解使用 thread.sleep 的原因。谁能告诉我 thread.sleep()

的原因

Play 的调用没有阻塞。它只是开始播放。所以你必须保持 dso 活动直到播放结束或者你手动停止它。

如果您想屏蔽自己,可以使用这样的代码(显然只有当您的音频不是无限长时才使用此代码)

dso.Play();
while (dso.PlaybackState == PlaybackState.Playing)
{
    Thread.Sleep(500);
}
dso.Dispose();