首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >麦克风停止提供NAudio数据

麦克风停止提供NAudio数据
EN

Stack Overflow用户
提问于 2015-01-23 10:59:03
回答 1查看 1.4K关注 0票数 2

我正在使用WaveInEvent of NAudio记录麦克风数据。它可以正常工作一段时间,但几次之后,它就不再提供输入数据了-- DataAvailable回调从来没有用新数据调用过。

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

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

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

代码语言:javascript
复制
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是否在运行。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-23 15:40:06

似乎USB麦克风的驱动程序行为不正确。当通过WIM_DATA消息将缓冲区发送给用户时,缓冲区已满。然而,当waveInUnprepareHeader被调用时,它仍然处于队列中,尽管它实际上是作为满的传递的。因此,我认为麦克风的驱动者最终应该受到责备。

我一直在仔细观察麦克风,似乎这个特殊的装置实际上已经损坏了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28108389

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档