检测麦克风静音
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 赫兹的过滤器可以去除家用交流电引起的嗡嗡声)。如果你愿意,你可以深入了解这个。
使用 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 赫兹的过滤器可以去除家用交流电引起的嗡嗡声)。如果你愿意,你可以深入了解这个。