使用C#检测WAV文件中的音频静音
我的任务是构建一个.NET客户端应用程序,以检测WAV文件中的静默状态。
内置的Windows API是否可以实现?或者,是否有任何好的图书馆可以呢?
解决方案
回答
http://www.codeproject.com/Articles/19590/WAVE-File-Processor-in-C
这具有剥离静音和混合波形文件所需的所有代码。
享受。
回答
我认为我们不会找到用于检测静默的任何内置API。但是,我们始终可以使用良好的数学/离散信号处理来找出响度。
这是一个小示例:http://msdn.microsoft.com/zh-cn/magazine/cc163341.aspx
回答
音频分析是一件困难的事情,需要大量复杂的数学运算(例如傅立叶变换)。我们要问的问题是"什么是沉默"。如果我们要编辑的音频是从模拟源捕获的,则很可能没有任何静音...它们只会是柔和的噪声(线路嗡嗡声,环境背景噪声等)区域。
综上所述,一种有效的算法将是确定最小音量(振幅)阈值和持续时间(例如,<10dbA超过2秒),然后简单地对波形进行音量分析,以寻找满足此条件的区域(也许有一些过滤器可用于毫秒峰值)。我从来没有用C#编写过这篇文章,但是这篇CodeProject文章看起来很有趣。它描述了绘制波形的Ccode ...与可用于其他幅度分析的相同类型的代码。
回答
如果要有效地计算滑动窗口上的平均功率:将每个样本平方,然后将其添加到运行总计中。从先前的N个样本中减去平方值。然后转到下一步。这是CIC过滤器的最简单形式。 Parseval定理告诉我们,此功率计算适用于时域和频域。
另外,我们可能希望向系统添加迟滞,以避免在功率水平在阈值水平左右波动时快速打开和关闭。
回答
使用Sox。它可以消除开头和结尾的静音,但是我们必须从应用程序中将其作为exe调用。