使用 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();
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();