我正在嘗試創建類似於NAudio中的網絡聊天演示的應用程序。無法在NAudio waveOut上順利播放,WaveProvider被快速清空
但是,在接收/偵聽端,我正在緩衝接收到的音頻數據包,直到我在調用WaveProvider.addSamples()之前得到其中的2個音頻數據包。我嘗試過不緩衝,緩衝大量等等,但問題仍然存在,所以我不認爲這是明確的原因。
我遇到的問題是,無論我嘗試添加示例的速度有多快,在播放音頻時,WaveProvider都會反覆耗盡(BufferedBytes == 0)。我跑了一些測試,我的調試輸出是這樣的:
- 0.690s WaveProvider空
- 0.695s樣品加入到WaveProvider
- 0.871s WaveProvider空
- 0.875s樣品添加到WaveProvider
- 1.013s WaveProvider空
...等
WaveProvider不會顯示「空」,直到每150毫秒左右,這是有道理的,因爲addSamples調用會添加對應於100毫秒音頻數據的數據。
有趣的部分是WaveProvider爲空和嘗試下一個addSamples之間4ms到5ms的時間。緩衝區大小沒有變化,或者加快採樣速度的努力似乎可以減小這種差距,因此回放的音頻總是具有這些微小的寂靜間隙,聽起來像是爆裂/爆裂。
我在想,如果這個微小的時間延遲可能是由waveProvider在waveOut設備正在播放時被鎖定引起的,並且因此我被鎖定在WaveProvider的AddingSamples中,直到它完成播放?有什麼方法可以糾正這個問題嗎?
我的初始化代碼如下:(他們應該是正常的,我希望)
WaveProvider =新BufferedWaveProvider(新WAVEFORMAT(16000,1));
WaveProvider.BufferDuration = new TimeSpan(0,0,10);
AudioPlayer = new WaveOut(WaveCallbackInfo.FunctionCallback());
AudioPlayer.Init(WaveProvider);
我將不勝感激任何幫助。 謝謝
感謝Mark的建議。如果我確實收到的數據太慢,那麼如果我收到的數據量較大,這應該可以緩解一些問題。我已經嘗試過,但我會繼續嘗試和測試所有選項。 – user1473324