【问题标题】:Wavein_DataAvailable gives twice as much data as expectedWavein_DataAvailable 提供的数据是预期的两倍
【发布时间】:2019-03-27 14:07:38
【问题描述】:

我正在使用 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

如果我的数学不太好,8000 Hz 的 1 字节(8 位)(即 = 8000 字节/秒的数据)应该等于 400 字节/50 毫秒?

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

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

【问题讨论】:

    标签: c# naudio


    【解决方案1】:

    您实际上并未以 8 位捕获,因为您从未设置过 WaveIn.WaveFormatWaveIn 对象将能够告诉您 WaveFormat 正在捕获音频的位置,默认为 16 位。

    【讨论】:

    • 谢谢,这就解释了 :)
    猜你喜欢
    • 2011-08-14
    • 2021-12-03
    • 2021-02-06
    • 1970-01-01
    • 2011-06-01
    • 1970-01-01
    • 2018-02-20
    • 1970-01-01
    • 2015-12-06
    相关资源
    最近更新 更多