gpt4 book ai didi

c# - 麦克风停止向 NAudio 提供数据

转载 作者:太空宇宙 更新时间:2023-11-03 13:12:06 41 4
gpt4 key购买 nike

我正在使用 NAudioWaveInEvent 来记录麦克风数据。一段时间后它工作正常,但几次后,它停止提供输入数据 - DataAvailable 回调永远不会用新数据调用。

我每次都尝试创建一个新的 WaveInEvent,但这并没有解决问题。我也尝试过使用 WASAPI 输入,它总是调用 DataAvailable - 数据为零字节。

如何使用 NAudio 从麦克风可靠地录制音频?

目前,我的代码如下所示:

StartRecording() {
microphone = new WaveInEvent();
microphone.DeviceNumber = 0;
microphone.WaveFormat = outformat;
microphone.BufferMilliseconds = 50;
microphone.DataAvailable += (_, recArgs) =>
{
session.OnAudioData(recArgs.Buffer, recArgs.BytesRecorded);
};
microphone.StartRecording();
}
StopRecording() {
if (microphone != null)
{
microphone.StopRecording();
microphone.Dispose();
microphone = null;
}
}

项目中除了使用 WaveFormat 描述波形格式外,没有其他的 naudio 代码。

NAudio 抛出访问冲突异常,试图从线程池 worker 调用 WaveInBuffer.Reuse()。我不确定为什么这不会做比丢弃音频数据更严重的事情。

对于我没有重新创建 WaveInEvent 的情况,我得到了一个 MmException - 在同一个地方调用 waveInPrepareHeader 的句柄无效。

坦率地说,我得到不同结果的事实在很大程度上意味着 NAudio 正在做一些不应该在实例之间共享状态的时髦狗屎,并且查看 Codeplex 上的源代码,我不确定 WTF 是否正在进行。

最佳答案

似乎 USB 麦克风的驱动程序运行不正常。当缓冲区通过 WIM_DATA 消息发送给用户时,它已满。然而,当 waveInUnprepareHeader 被调用时,它仍然在队列中,即使它实际上只是作为完整传递。所以我认为麦克风的驱动程序最终是罪魁祸首。

我一直在更仔细地观察麦克风,似乎这个特定的单元实际上已经损坏。

关于c# - 麦克风停止向 NAudio 提供数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28108389/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com