1

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

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

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

谢谢。

4

1 回答 1

2

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

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

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

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

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

更高级的过程将尝试滤除环境噪声或线路噪声(例如,一个 60 赫兹的滤波器来消除由家用交流电引起的嗡嗡声)。如果您愿意,您可以对此进行深入研究。

于 2017-03-28T00:48:57.590 回答