Найти определенный звуковой паттерн в коллекции аудиофайлов

У меня есть коллекция из 1000 аудиофайлов. Эти файлы - это музыкальные файлы, хранящиеся в формате MP3, некоторые - 10 минут, некоторые - 15 секунд.

У меня также есть один аудиофайл длиной 1 секунду, также в MP3. Я хотел бы найти, какие файлы из моей коллекции содержат этот 1-секундный аудиофайл. Этот 1-секундный аудиофайл может иметь немного хуже качество звука, чем моя коллекция, потому что он был перекодирован, повторно сжат и т. Д., Поэтому мне понадобится более интеллектуальный метод сравнения, чем простой бинарный поиск через мою коллекцию файлов.

Что я должен прочитать о том, хочу ли я создать небольшую программу для поиска по моей коллекции аудиофайлов для этого 1-секундного звукового шаблона?

Редактировать : Другими словами: каждый файл в моей коллекции из 1000 файлов - это песня. Этот 1-секундный фрагмент, который я ищу, представляет собой фрагмент какой-либо песни из этой коллекции, и я хотел бы знать, из какой песни она взята.

Всего 1 ответ


Вот один из способов сделать это, используя len(audioSegment) feaure 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

Есть идеи?

10000