识别文件中的音频样本
我想要能够在我手上的一个音频文件(mp3格式)中找到用户提供的音频样本。
这个mp3文件是我为了测试目的保存的一个广播流,我有节目的前奏部分。我想在这个文件中找到它,并获取它播放的时间戳。
注意:解决方案可以用以下任何一种编程语言:Java、Python或C++。我不知道怎么分析这个音频文件,任何相关的参考资料都会对我有帮助。
2 个回答
2
我会先计算一下“干草堆”和“针”的文件的快速傅里叶变换(FFT)谱图。然后你可以尝试模糊匹配这两个谱图。如果把它们格式化成图片,你甚至可以使用现成的算法来进行匹配。
我不确定这是不是最标准或最好的方法,但我觉得这样应该能行。
3
这个问题属于音频指纹识别的范畴。如果你已经把一个样本和一首歌匹配上了,那么你肯定知道这个样本在这首歌中的具体时间点。Shazam的团队写了一篇很棒的论文,详细描述了他们的技术:http://www.ee.columbia.edu/~dpwe/papers/Wang03-shazam.pdf。他们的基本思路是从声谱图中找出局部最大值,然后根据这些最大值的位置关系创建一个哈希值。
这里有一篇关于音频指纹识别算法的好评审文章:http://mtg.upf.edu/files/publications/MMSP-2002-pcano.pdf
无论如何,你可能会经常使用快速傅里叶变换(FFT)和声谱图。这篇文章讲述了如何在Python中实现这一点。