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