2016-09-06 86 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垃圾回收的事件發生?