2012-03-21 221 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