使用DirectSoundOut播放声音数组时需要thread.sleep()

时间:2017-04-26 18:50:01

标签: c# winforms naudio

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()

的原因

1 个答案:

答案 0 :(得分:1)

Play的调用没有阻止。它只是开始播放。因此,您必须保持dso活着,直到播放结束或您已手动停止播放。

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

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