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

3
我有一组mp3文件,其中一些有延长的沉默期或周期性的沉默间隔。如何以编程方式检测这些声音中的沉默?
我正在寻找一个C++或更好是C#库,可以让我检查这些文件的声音内容以查找沉默。
编辑:我应该解释一下我的目标。我使用VLC捕获流式体育评论,并将其保存为mp3。当比赛延迟或取消时,流媒体评论会被替换为重复的消息,表示评论不可用。通过查找这些周期性的沉默(或完全沉默),我可以检测是否没有评论并停止流式记录。
因此,我不愿意解压缩mp3,因为这样测试这些沉默就会变得非常慢。除非我能解码文件的最后5分钟?
谢谢 安德鲁

这些沉默到底有多安静? - orlp
它们来自于一个流,所以我想它们是“静默”的沉默。 - user236520
1个回答

1

我不知道是否有一个库可以直接检测MP3编码数据中的静默,因为在未解压缩之前检测静默并不是一项微不足道的任务。幸运的是,很容易找到解码MP3文件并将它们作为PCM数据访问的库,而在PCM数据中检测静默则非常简单。这里是我找到的一个C#库,但我相信还有很多:http://www.robburke.net/mle/mp3sharp/

一旦您解码数据,您将获得PCM样本列表。在最基本的形式中,检测静默所需的算法只是分析小块(可以少至0.25秒或多达几秒),并确保每个样本的绝对值都低于阈值。您使用的阈值确定被视为静默的声音有多“安静”,而块大小确定需要多长时间才能将音量降至该阈值以下才被视为静默(如果您选择非常短的块,则由于接近零交叉的样本,您将获得大量误报,但0.25秒或更高应该没问题。基本方法有改进,例如使用滞后(基本上是使用两个阈值,一个用于过渡到静默,另一个用于从静默过渡),以及过滤。

不幸的是,我不知道C ++或C#的库可以立即实现级别检测,谷歌上也没有立即出现什么,但至少对于简单版本,编码相当容易。

编辑:此库似乎很有趣:http://naudio.codeplex.com/

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

使用C#检测WAV文件中的音频静默


我在上面详细阐述了我的问题,这使得这个解决方案不太可行 - 但是我感谢您的建议,因为我没有想到它,它可能是我的唯一选择 - AS - user236520
这些人能够在不解码的情况下拆分MP3文件,但是在他们的手册深处,他们说为了检测静音,他们确实需要解码。尽管如此,至少您可以使用此方法来拆分mp3的一部分,然后仅对该部分进行解码。http://mp3splt.sourceforge.net/mp3splt_page/ - bdk
评论总是来自同一个网站并且总是相同的信息吗?如果是这样,他们可能只是在循环播放一个预先录制好的mp3文件,您可以通过逐字节比较流信号和已知的评论来欺骗系统。 - bdk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接