检测麦克风静音

使用mcisendstring ,我想停止录音,如果一个沉默的时期(从麦克风input没有达到)。 我知道一个计时器将会涉及,所以在x秒后需要进行检查,但是要检查什么?

目前我使用的是:

 i = mciSendString("record capture", Nothing, 0, 0) 

谢谢。

您将需要一个音频库,允许您在录制过程中访问录制缓冲区。 我不认为MCI会让你这样做。 所以这听起来像是你在市场上有一个更细致的音频库。

这里是一个StackOverflow问题的链接,列出了几个数字音频库 。

你也可以考虑使用像NAudio这样的开源.NET框架,他们已经为你做了很多工作。

要进行录制,您很可能需要分配一个主缓冲区,再加上根据需要分配辅助/永久缓冲区的回调(例如,随着录制时间越来越长)。 要检测静音,您需要在添加字节时在主缓冲区上执行某种信号处理。

在这种情况下,“信号处理”可能非常简单,例如,您可以采用移动平均(本质上是低通滤波器),并确定平均幅度是否低于某个阈值水平,可以在开始的静音期间进行校准的录音(这大概会给你一个体面的基线)。

一个更先进的过程将试图过滤掉周围的噪音或线路噪音(例如60赫兹的过滤器,以消除家庭交流引起的嗡嗡声)。 如果你愿意的话,你可以深入这一点。