NAudio - 通过终端服务器连接播放断断续续的音频
NAudio - Choppy Audio Playback Over Terminal Server Connection
我有一个 .Net Winforms 应用程序,我在其中使用 NAudio 播放和合并音频文件。
传统上,此应用程序在 PC 上 运行,音频播放正常。最近有一些请求能够在登录到终端服务器时远程 运行 应用程序。该应用程序可以运行,但音频播放时断断续续,有时音频会在文件播放到一半时停止播放。如果我用 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 服务器 2008 R2
谢谢
分辨率
根据下面 Mark Heath 的建议,我将默认缓冲持续时间从 300 毫秒增加到 500 毫秒,这消除了从终端服务器连接播放时播放时断断续续的问题
WaveOutEvent
上的 DesiredLatency
属性 是更改缓冲持续时间的地方。
来自 Mark 的一篇博文:Link
"You can also set DesiredLatency, which is measured in milliseconds.
This figure actually sets the total duration of all the buffers. So in
fact, you could argue that the real latency is shorter. In a future
NAudio, I might reduce confusion by replacing this with a
BufferDuration property. By default the DesiredLatency is 300ms, which
should ensure a smooth playback experience on most computers. You can
also set the NumberOfBuffers to something other than its default of 2
although 3 is the only other value that is really worth using."
更新的代码示例:
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();
您可以尝试增大默认缓冲区大小,看看是否有帮助。或者您可以尝试使用 DirectSoundOut 看看是否有任何不同。您的应用程序中是否发生了任何可能导致 .NET 垃圾回收发生的事情?
我有一个 .Net Winforms 应用程序,我在其中使用 NAudio 播放和合并音频文件。
传统上,此应用程序在 PC 上 运行,音频播放正常。最近有一些请求能够在登录到终端服务器时远程 运行 应用程序。该应用程序可以运行,但音频播放时断断续续,有时音频会在文件播放到一半时停止播放。如果我用 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 服务器 2008 R2
谢谢
分辨率
根据下面 Mark Heath 的建议,我将默认缓冲持续时间从 300 毫秒增加到 500 毫秒,这消除了从终端服务器连接播放时播放时断断续续的问题
WaveOutEvent
上的 DesiredLatency
属性 是更改缓冲持续时间的地方。
来自 Mark 的一篇博文:Link
"You can also set DesiredLatency, which is measured in milliseconds. This figure actually sets the total duration of all the buffers. So in fact, you could argue that the real latency is shorter. In a future NAudio, I might reduce confusion by replacing this with a BufferDuration property. By default the DesiredLatency is 300ms, which should ensure a smooth playback experience on most computers. You can also set the NumberOfBuffers to something other than its default of 2 although 3 is the only other value that is really worth using."
更新的代码示例:
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();
您可以尝试增大默认缓冲区大小,看看是否有帮助。或者您可以尝试使用 DirectSoundOut 看看是否有任何不同。您的应用程序中是否发生了任何可能导致 .NET 垃圾回收发生的事情?