NAudio - 通过终端服务器连接播放断断续续的音频

Posted

技术标签:

【中文标题】NAudio - 通过终端服务器连接播放断断续续的音频【英文标题】:NAudio - Choppy Audio Playback Over Terminal Server Connection 【发布时间】:2016-09-06 16:34:58 【问题描述】:

我有一个 .Net Winforms 应用程序,我在其中使用 NAudio 播放和合并音频文件。

传统上,此应用程序已在 PC 上运行,并且可以播放音频。最近有一些请求能够在登录到终端服务器时远程运行应用程序。该应用程序可以工作,但音频播放不连贯,有时音频会在文件的中途停止播放。如果我用 Windows Media Player 播放相同的音频文件,它不会断断续续。

我创建了一个简单的测试应用程序(下面的代码 sn-p)并在通过终端服务器连接播放音频时遇到了同样的问题。

在连接到终端服务器时播放音频与在 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 框架 3.5

Windows Server 2008 R2

谢谢

分辨率

根据以下 Mark Heath 的建议,我将默认缓冲持续时间从 300 毫秒增加到 500 毫秒,这样就消除了从终端服务器连接播放时的断断续续的播放

WaveOutEvent 上的 DesiredLatency 属性是更改缓冲区持续时间的地方。

来自 Mark 的一篇博文:Link

"你也可以设置DesiredLatency,以毫秒为单位。 这个数字实际上设置了所有缓冲区的总持续时间。所以在 事实上,你可以争辩说真正的延迟更短。在未来 NAudio,我可能会通过将其替换为 BufferDuration 属性。默认情况下,DesiredLatency 为 300 毫秒,即 应确保在大多数计算机上的流畅播放体验。你可以 还将 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 垃圾回收的事情?

【讨论】:

以上是关于NAudio - 通过终端服务器连接播放断断续续的音频的主要内容,如果未能解决你的问题,请参考以下文章

利用TCP服务器接收多客户端的音频数据,通过Naudio进行播放及音频处理TCP服务器

wav 文件连接异常与 naudio 库

使用 NAudio 发送正在播放的音频

使用 naudio 捕获音频并使用 javascript 播放

NAudio,Windows服务,多线程

是否可以使用 NAudio 从短 [] 而不是字节 [] 播放音频?