如何使用 NAudio DataAvailable 回调创建干净的样本列表

问题描述

我想使用 DataAvailable 上的 WaveInEvent 回调来填写我的示例列表。

我目前正在做的是我有一个 _totalPlayBack 变量,允许调用播放 100 次。

每个回调将 WaveInEventArgs 的缓冲区转换为 float[] 并将其附加到样本列表中。

private void OnDataAvailable(object sender,WaveInEventArgs e){

    if(_totalPlayBack > 100) return;

    float[] samples = new float[e.Buffer.Length];

    RawSourceWaveStream stream = new RawSourceWaveStream(e.Buffer,samples.Length,new 
WaveFormat(16000,1));

    stream.ToSampleProvider().Read(samples,samples.Length);

    _samples.AddRange(samples);

    _totalPlayBack++;
}

问题是当我将 _samples 列表的样本放入音频文件并播放时,它坏了。它不完全是噪音,它包含我的声音,但它根本不干净,它有回声,它比应有的速度慢,而且在我的耳朵里,它听起来像是包含空白样本,因为如果你愿意的话,它会结巴。

我尝试了不同的类而不是 RawSourceWaveStreamWaveBuffer 来从回调方法创建的 byte[] 中获取 float[] 。产生了完整的噪音。

我还尝试了 BufferedWaveProvider 并将 DataAvailable 回调的返回样本添加到其中并将它们读入 float[]

它也有和RawSourceWaveStream完全一样的问题。

我的目标是组合 DataAvailable 回调的返回样本并从中制作一个干净的音频文件,我唯一需要帮助的就是将这些样本干净地组合在一起。

重要如果您知道任何其他方法可以帮助我每 0.05 或 0.1 秒干净地读取样本 请与我分享

非常感谢任何帮助,

最好的问候

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)