使用mcisendstring
,如果达到静音期(没有麦克风输入),我想停止录制。我知道会涉及到一个计时器,所以在 x 秒后需要进行检查,但是要准确检查什么?
目前,我使用以下方式录制:
i = mciSendString("record capture", Nothing, 0, 0)
谢谢。
使用mcisendstring
,如果达到静音期(没有麦克风输入),我想停止录制。我知道会涉及到一个计时器,所以在 x 秒后需要进行检查,但是要准确检查什么?
目前,我使用以下方式录制:
i = mciSendString("record capture", Nothing, 0, 0)
谢谢。
您将需要一个音频库,允许您在录制过程中访问录制缓冲区。我不认为 MCI 会让你这样做。因此,听起来您正在市场上寻找更细微的音频库。
这是一个StackOverflow 问题的链接,其中列出了几个数字音频库。
您也可以考虑使用像NAudio这样的开源 .NET 框架,他们已经为您完成了很多工作。
要进行录制,您很可能需要分配一个主缓冲区,以及一个回调,该回调将根据需要分配辅助/永久缓冲区(例如,随着录制变得越来越长)。要检测静音,您需要在向主缓冲区添加字节时对主缓冲区执行某种信号处理。
在这种情况下,“信号处理”可能非常简单,例如,您可以取一个移动平均值(本质上是一个低通滤波器)并确定平均幅度是否低于某个阈值水平,这可以在开始时的静音期间进行校准录音(大概会给你一个不错的基线)。
更高级的过程将尝试滤除环境噪声或线路噪声(例如,一个 60 赫兹的滤波器来消除由家用交流电引起的嗡嗡声)。如果您愿意,您可以对此进行深入研究。