在音频文件集合中查找指定的音频模式

Posted

技术标签:

【中文标题】在音频文件集合中查找指定的音频模式【英文标题】:Find a specified audio pattern in a collection of audio files 【发布时间】:2018-10-24 18:30:03 【问题描述】:

我收集了 1000 个音频文件。这些文件是以 MP3 格式存储的音乐文件,有的 10 分钟长,有的 15 秒长。

我还有一个 1 秒长的音频文件,也是 MP3 格式。我想从我的收藏中找出哪些文件包含这个 1 秒的音频文件。这个 1 秒的音频文件的音频质量可能比我的收藏稍差,因为它被重新编码、重新压缩等,所以我需要一些比简单的二进制搜索更智能的比较方法。

如果我想创建一个小程序来搜索我的音频文件集合中的这个 1 秒音频模式,我应该阅读哪些内容?

编辑:换句话说:我收集的 1000 个文件中的每个文件都是一首歌。我正在搜索的这个 1 秒片段是该专辑中某首歌曲的片段,我想知道它来自哪首歌。

【问题讨论】:

【参考方案1】:

这是使用len(audiosegment) 的pydub 的一种方法。

"../so/*.mp3" 保存您的音频文件。或者您可以使用glob 遍历各种文件夹。

from glob import glob
from pydub import AudioSegment

for mp3_file in glob("../so/*.mp3"):
  tmpAudioSegment = AudioSegment.from_mp3(mp3_file)
   #Note: pydub len returns in milliseconds.
  print("  :  ".format(mp3_file,len(tmpAudioSegment)/1000)) 

结果

../so/Bubbles.mp3  :  10 sec
../so/Drone Dark Suspense 2.mp3  :  30 sec
../so/Sci-Fi Sweep.mp3  :  8 sec
../so/Pinball Machine.mp3  :  22 sec
../so/Title Flange Sweep Hit.mp3  :  3 sec
../so/Whale Sounds.mp3  :  6 sec
../so/Ambient Hit.mp3  :  2 sec
../so/Golf Hit 3.mp3  :  1 sec

【讨论】:

我已经用更多信息更新了这个问题,我的问题是什么。如果我正确理解您的解决方案,如果我想在我的 mp3 文件集合中搜索 1 秒歌曲,它将适用。但我想在我的所有文件集合中匹配 1 秒 mp3 模式,并且所有这些文件都超过 1 秒。这意味着其中一个匹配项可能是文件号 537,其持续时间为 5:30 分钟,位置为 0:13 秒。这个匹配会告诉我,在文件 537 的第 13 秒,有一个与我的 1 秒文件匹配的音频模式。 你要找的是“音频指纹”,结帐github.com/worldveil/dejavu 有详细的实现。如果遇到困难,请尝试并提出具体问题。 看来这确实是我要找的东西!

以上是关于在音频文件集合中查找指定的音频模式的主要内容,如果未能解决你的问题,请参考以下文章

从音频文件中查找每秒频率

如何使用附加模式将音频录制到现有的音频文件中?

unity中如何播放音频的指定区间?

Android - 查找当前是不是正在播放音频并停止它

图像集合内的音频集合

Adobe Auditon使用功能:将音频文件切分成多段,并将每段音频分别保存到不同的文件中