检测麦克风静音

Detect Silence from Microphone

使用 mcisendstring,我想在达到静默期(麦克风无输入)时停止录音。我知道会涉及一个计时器,所以在 x 秒后需要进行检查,但究竟要检查什么?

目前,我使用以下方式录制:

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

谢谢。

您将需要一个音频库,允许您在录制过程中访问录制缓冲区。我不认为 MCI 会让你那样做。所以听起来您正在寻找一个更细致的音频库。

这里是 link 到 Whosebug question that lists several digital audio libraries

您也可以考虑使用开源 .NET 框架,例如 NAudio,他们已经为您完成了很多工作。

要进行录制,您很可能需要分配一个主缓冲区,以及一个回调,根据需要分配 secondary/permanent 个缓冲区(例如,当录制变得越来越长时)。要检测静音,您需要在向主缓冲区添加字节时对其执行某种信号处理。

本例中的"signal processing"可以很简单,例如您可以采用移动平均值(本质上是低通滤波器)并确定平均幅度是否低于某个阈值水平,这可以在录音开始时的静音期间进行校准(这可能会给您一个不错的基线)。

一个更高级的过程会尝试过滤掉环境噪音或线路噪音(例如,一个 60 赫兹的过滤器可以去除家用交流电引起的嗡嗡声)。如果你愿意,你可以深入了解这个。