麦克风停止向 NAudio 提供数据
Microphone stops providing data with NAudio
我正在使用 NAudio
中的 WaveInEvent
来记录麦克风数据。一段时间后它工作正常,但几次后,它停止提供输入数据 - 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 试图从线程池工作者调用 WaveInBuffer.Reuse() 时引发访问冲突异常。我不确定为什么这不会做比丢弃音频数据更严重的事情。
对于我没有重新创建 WaveInEvent 的情况,我得到了一个 MmException - 在同一个地方调用 waveInPrepareHeader 的句柄无效。
坦率地说,我得到不同结果的事实在很大程度上意味着 NAudio 正在做一些时髦的事情,它不应该在实例之间共享状态,并且查看 Codeplex 上的源代码,我不确定 WTF 是否会继续上。
似乎 USB 麦克风的驱动程序运行不正常。当缓冲区通过 WIM_DATA 消息发送给用户时,它已满。然而,当 waveInUnprepareHeader 被调用时,它仍然在队列中,即使它实际上只是作为完整传递。所以我认为麦克风的驱动程序是最终的罪魁祸首。
我一直在仔细观察麦克风,似乎这个特定的单元实际上已经损坏。
我正在使用 NAudio
中的 WaveInEvent
来记录麦克风数据。一段时间后它工作正常,但几次后,它停止提供输入数据 - 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 试图从线程池工作者调用 WaveInBuffer.Reuse() 时引发访问冲突异常。我不确定为什么这不会做比丢弃音频数据更严重的事情。
对于我没有重新创建 WaveInEvent 的情况,我得到了一个 MmException - 在同一个地方调用 waveInPrepareHeader 的句柄无效。
坦率地说,我得到不同结果的事实在很大程度上意味着 NAudio 正在做一些时髦的事情,它不应该在实例之间共享状态,并且查看 Codeplex 上的源代码,我不确定 WTF 是否会继续上。
似乎 USB 麦克风的驱动程序运行不正常。当缓冲区通过 WIM_DATA 消息发送给用户时,它已满。然而,当 waveInUnprepareHeader 被调用时,它仍然在队列中,即使它实际上只是作为完整传递。所以我认为麦克风的驱动程序是最终的罪魁祸首。
我一直在仔细观察麦克风,似乎这个特定的单元实际上已经损坏。