从麦克风中检测沉默

时间:2017-03-28 00:12:34

标签: c# windows mcisendstring

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

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

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

感谢。

1 个答案:

答案 0 :(得分:2)

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

以下是StackOverflow question that lists several digital audio libraries的链接。

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

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

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

更先进的过程会尝试滤除环境噪音或线路噪音(例如60 hz滤波器以消除家用AC引起的嗡嗡声)。如果你愿意的话,你可以对此深入了解。