我正在使用WaveInEvent of NAudio记录麦克风数据。它可以正常工作一段时间,但几次之后,它就不再提供输入数据了-- 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来描述波形格式之外,该项目中没有其他n音频代码。
NAudio抛出一个访问冲突异常,试图从线程池工作者调用WaveInBuffer.Reuse()。我不知道为什么这样做没有比直接丢弃音频数据更严重的事情。
对于没有重新创建WaveInEvent的情况,我得到一个MmException --无效句柄调用waveInPrepareHeader,在相同的位置。
坦率地说,我得到了不同的结果,这很大程度上意味着NAudio正在做一些奇怪的事情--它不应该在实例之间共享状态,并且查看Codeplex上的源代码,我不太确定WTF是否在运行。
发布于 2015-01-23 15:40:06
似乎USB麦克风的驱动程序行为不正确。当通过WIM_DATA消息将缓冲区发送给用户时,缓冲区已满。然而,当waveInUnprepareHeader被调用时,它仍然处于队列中,尽管它实际上是作为满的传递的。因此,我认为麦克风的驱动者最终应该受到责备。
我一直在仔细观察麦克风,似乎这个特殊的装置实际上已经损坏了。
https://stackoverflow.com/questions/28108389
复制相似问题