我有一个.Net Winforms应用程序,我正在使用NAudio播放和合并音频文件。NAudio - 通过终端服务器连接斩波音频播放
传统上这个应用程序已经在个人电脑上运行,并且音频播放没问题。最近有一些请求能够在登录到终端服务器时远程运行应用程序。该应用程序可以正常工作,但音频播放不稳定,有时音频只会退出播放文件的一部分。如果我用Windows Media Player播放相同的音频文件,它不会起伏不定。
我创建了一个简单的测试应用程序(下面的代码片段),并在终端服务器连接上播放音频时遇到同样的问题。
有没有不同的方式,我应该播放音频时,连接到终端服务器本地在PC上?还是有一些需要调整的设置?
WaveOutEvent wo = new WaveOutEvent();
var wavReader = new WaveFileReader(String.Format(@"{0}\{1}", AssemblyDirectory, "5_3712.wav"));
wo.DeviceNumber = comboSelectDevice.SelectedIndex;
wo.Init(wavReader);
wo.Play();
.NET Framework 3.5的
的Windows Server 2008 R2
谢谢
解决方案
基于以下马克希思的建议下,我从增加默认的缓存时间300ms到500ms,从终端服务器播放时摆脱了不连贯的播放er connection
WaveOutEvent
上的DesiredLatency
属性是更改缓冲区持续时间的地方。
从马克的博客文章之一:Link
“您还可以设置DesiredLatency,它的单位是毫秒 这个数字实际上是设置所有缓冲区的总持续时间,从而在 其实你。可能会认为实际的延迟时间更短,在未来的NAudio中,我可以通过替换 BufferDuration属性来减少混淆。默认情况下,DesiredLatency是300ms,这应该可以确保大多数计算机上的流畅播放体验。还将NumberOfBuffers设置为一些除了默认值2 以外的其他值,尽管3是唯一真正值得使用的值。“
更新代码示例:
WaveOutEvent wo = new WaveOutEvent();
var wavReader = new WaveFileReader(String.Format(@"{0}\{1}", AssemblyDirectory, "5_3712.wav"));
wo.DeviceNumber = comboSelectDevice.SelectedIndex;
wo.DesiredLatency = 500;
wo.Init(wavReader);
wo.Play();