2016-09-06 57 views
0

我有一个.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(); 

回答

1

你可以试着加大了默认缓冲区大小,看看有没有什么帮助。或者你可以尝试DirectSoundOut,看看是否有任何区别。您的应用程序中是否有可能导致.NET垃圾回收的事件发生?

相关问题