2012-03-21 50 views
0

私は、以下のコードブロックを使用してマイクからサンプルを受信し、SIPコールでRTPチャンネルに渡します。問題は200msごとにサンプルが到着しているのに対し、20msごとにサンプルが到着することです。サンプルは、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

通常、2つ以上のバッファがあるため、別のバッファが満たされている間は検査できます。 WaveInが対処するには、20msは少し速いかもしれません。 DataAvailableコールバックバッファ内のバイト数を確認します。あなたの値で、一度に320バイトを取得する必要があります。

+0

一度に320バイトを取得していますが、何らかの理由で20ミリ秒ごとではなく200ミリ秒ごとに取得しています。 – sipwiz

+0

OK、バッファサイズが正しいので、それだけでは追いついていません。 2つまたは3つのバッファと100msを試して、どの周波数になるか見てみましょう。 –

+0

それはうまくいった。私は50msと4つのバッファを使用することができました(違いがあるかどうかは分かりません)。 NAudioはバッファをキューに入れますか?私は、各サンプルごとにDataAvailableイベントを呼び出すことができますか、または1つのイベントで2つ以上のサンプルがキューに入れられている可能性がありますか? – sipwiz