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

从mp3文件中提取和分析声音,mp3,Mp3,我有一套mp3文件,其中一些文件有延长的静音时间或定期的静音间隔。如何以编程方式检测此问题 我正在寻找一个C++库,或者最好是C语言,这将允许我检查这些文件的声音内容以消除沉默。 编辑:我应该详细说明我试图实现的目标。我正在使用VLC捕获流媒体体育评论,并将其保存到mp3中。当游戏被延迟或取消时,流媒体评论将被一条重复消息取代,该消息表示评论不可用。通过寻找这些周期性沉默(或完全沉默),我可以检测到是否没有评论,并停止流媒体录制 出于这个原因,我不愿意解压mp3,因为如果这意味着我对这些静音的测

我有一套mp3文件,其中一些文件有延长的静音时间或定期的静音间隔。如何以编程方式检测此问题

我正在寻找一个C++库,或者最好是C语言,这将允许我检查这些文件的声音内容以消除沉默。 编辑:我应该详细说明我试图实现的目标。我正在使用VLC捕获流媒体体育评论,并将其保存到mp3中。当游戏被延迟或取消时,流媒体评论将被一条重复消息取代,该消息表示评论不可用。通过寻找这些周期性沉默(或完全沉默),我可以检测到是否没有评论,并停止流媒体录制

出于这个原因,我不愿意解压mp3,因为如果这意味着我对这些静音的测试将非常缓慢。除非我能破解文件的最后5分钟

谢谢
Andrew

我不知道有哪一个库可以直接检测MP3编码数据中的静默,因为在不首先解压缩的情况下检测静默不是一项简单的任务。幸运的是,很容易找到对MP3文件进行解码并将其作为PCM数据访问的库,而检测PCM数据中的静默也很简单。这里有一个我找到的C#图书馆,但我肯定有很多:

解码数据后,您将获得PCM样本列表。在最基本的形式中,检测静默所需的算法只是简单地分析一个小数据块(可以是.25秒或几秒钟),并确保数据块中每个样本的绝对值低于阈值。您使用的阈值决定了声音“安静”的程度必须被视为静音,而块大小决定了音量需要在该阈值以下多长时间才能被视为静音(如果你使用非常短的块,由于样本接近零交叉点,你会得到很多误报,但是.25s或更高应该可以。基本方法有一些改进,例如使用historesis(基本上使用两个阈值,一个用于过渡到静默,一个用于从静默过渡到静默)和过滤

遗憾的是,我不知道C++或C语言的库,它可以实现水平检测,而且在谷歌上没有什么东西能立即弹出,但是至少对于简单的版本来说,它非常容易编码。 编辑:此外,这个库似乎很有趣:

此外,虽然不是一个真正重复的问题,但此处的答案将对您有用:


这些沉默到底有多沉默?它们来自一条小溪,所以我认为它们是“沉默的”沉默。我在上面详细阐述了我的问题,这使得这个解决方案不那么有利-但我感谢你的建议,因为我没有想到这一点,这可能是我唯一的选择-因为这些人能够在不解码的情况下分割MP3文件,但在他们的手册深处,他们说为了检测沉默,他们必须解码。不过,至少你是这样“你能用这种方法分割出一段mp3,然后只解码总是来自同一个站点的评论,总是相同的消息吗?如果是这样,他们可能只是在循环中播放一段罐装mp3,你可以作弊,只需将流信号与已知的评论进行逐字节比较