2012-03-21 37 views
0

我正在使用下面的代碼塊從我的麥克風接收樣本,並將它們傳遞到SIP呼叫上的RTP通道。問題是樣本每200毫秒到達一次,而我期望它們每20毫秒。 20ms採樣間隔爲20ms採樣間隔的正確大小,只是20ms採樣只能每200ms到達一次。我可能在設置WaveInEvent時做一些傻事?WaveInEvent示例事件頻率

var _waveInEvent = new WaveInEvent(); 
_waveInEvent.BufferMilliseconds = 20; 
_waveInEvent.NumberOfBuffers = 1; 
_waveInEvent.DeviceNumber = 0; 
_waveInEvent.DataAvailable += RTPChannelSampleAvailable; 
_waveInEvent.WaveFormat = new WaveFormat(8000, 16, 1); 

回答

1

您通常至少有兩個緩衝區,因此您可以檢查一個而另一個被填充。 對於WaveIn來說20ms可能有點快。檢查DataAvailable回調緩衝區中有多少個字節。使用您的值,您應該一次獲得320個字節。

+0

我每次獲得320個字節,但由於某種原因每200毫秒而不是每20毫秒。 – sipwiz 2012-03-21 19:48:00

+0

好的,所以緩衝區大小是正確的,它不只是跟上。嘗試2或3緩衝區和100ms,看看你得到什麼頻率。 – 2012-03-22 09:57:50

+0

工作。我能夠使用50ms和4個緩衝區(不知道這是否有所作爲),並每隔50ms獲取一次採樣。 NAudio是否將緩衝區排隊?我的意思是我可以依賴DataAvailable事件觸發每個樣本,還是一個事件可以有兩個或更多個樣本排隊? – sipwiz 2012-03-22 11:19:43