从mp3文件中提取和分析声音

时间:2011-04-17 01:24:25

标签: mp3

我有一组mp3文件,其中一些有长时间的静音或周期性的静音间隔。我怎样才能以编程方式检测到它?

我正在寻找一个用C ++编写的库,或者最好是C#,这样我就可以检查这些文件的声音内容以获得沉默。

编辑:我应该详细说明我想要实现的目标。我正在使用VLC捕获流媒体体育评论并将其保存为mp3。当游戏延迟或取消时,流媒体评论被重复消息所取代,表示评论不可用。通过查找这些周期性静音(或完全静音),我可以检测是否没有评论并停止流媒体录制

由于这个原因,我不愿意解压缩mp3,因为如果这意味着我对这些沉默的测试将非常缓慢。除非我能解码文件的最后5分钟?

由于 安德鲁

1 个答案:

答案 0 :(得分:1)

我不知道哪个库会直接在MP3编码数据中检测到静音,因为在没有首先解压缩的情况下检测静音并不是一项微不足道的任务。幸运的是,它很容易找到解码MP3文件并将其作为PCM数据访问的库,并且很容易检测PCM数据中的静音。这是我发现的一个C#库,但我确定有吨:http://www.robburke.net/mle/mp3sharp/

解码数据后,您将获得PCM样本列表。在最基本的形式中,您需要检测静音的算法只是分析一个小块(可能只有.25秒或多达几秒),并确保块中每个样本的绝对值是低于门槛。您使用的阈值决定了声音被设置为静音的“安静”程度,并且块大小决定了音量需要低于该阈值的时间才能被视为静音(如果你选择非常短的块,你将会由于样本接近零交叉而得到大量误报,但是.25或更高应该没问题。基本方法有所改进,例如使用组织学(基本上使用两个阈值,一个用于过渡到沉默,一个从沉默过渡,过滤。

不幸的是,我不知道C ++或C#的库实现了手头的水平检测,谷歌没有立即出现,但至少对于简单版本来说它非常容易编码。

编辑:此外,这个库看起来很有趣:http://naudio.codeplex.com/

此外,虽然不是真正重复的问题,但这里的答案对您有用:

Detecting audio silence in WAV files using C#

相关问题