Wavein_DataAvailable提供的数据量是预期的两倍

时间:2019-03-27 14:07:39

标签: c# naudio

我正在使用Naudio从麦克风读取数据,但考虑到正在使用的波形,我得到的数据是预期的两倍。

... bunch of constructor code ....

    waveFormat = new WaveFormat(8000, 8, 1);

    bwp_MicToModem = new BufferedWaveProvider(waveFormat);
    bwp_MicToModem.DiscardOnBufferOverflow = true;
    bwp_MicToModem.BufferLength = 1000;
    bwp_MicToModem.ReadFully = false;

    wavein = new WaveIn();
    wavein.DeviceNumber = 0;
    wavein.BufferMilliseconds = 50;
    wavein.DataAvailable += Wavein_DataAvailable;
 }

private void Wavein_DataAvailable(object sender, WaveInEventArgs e)
{
    bwp_MicToModem.AddSamples(e.Buffer, 0, e.BytesRecorded);
    threadSafeAppendText("data event, bytes " + e.BytesRecorded, true);
}

这有点用,但是每50毫秒产生800字节的数据。

从我的日志文件中:

2019-03-27 14:41:26.765 : data event, bytes 800
2019-03-27 14:41:26.775 : readRate (ms) 0 numBytes 63
2019-03-27 14:41:26.775 : writeRate, modem.write (ms) 47 bytesFrMic 400
2019-03-27 14:41:26.785 : readRate (ms) 0 numBytes 96
2019-03-27 14:41:26.795 : readRate (ms) 3 numBytes 1
2019-03-27 14:41:26.805 : readRate (ms) 0 numBytes 63
2019-03-27 14:41:26.815 : readRate (ms) 0 numBytes 64
2019-03-27 14:41:26.815 : data event, bytes 800

如果我的数学还不够完善,那么1字节(8位)的8000 Hz(即8000字节/秒的数据)应该等于400字节/ 50毫秒吗?

看看我得到的800个字节,它们看起来都是合法的,因为没有填充零或类似的东西。

有人知道我可能会出错吗?

1 个答案:

答案 0 :(得分:1)

由于您从未设置wx,因此实际上并没有捕获8位数据。 WaveIn.WaveFormat对象将能够告诉您捕获音频的WaveIn是什么,默认情况下为16位。