Учитывая два аудиофайла, один из которых является фрагментом другого, есть ли способ python найти, когда фрагмент воспроизводится в исходном файле?

#python-3.x #audio #time #split

#python-3.x #Аудио #время #разделить

Вопрос:

Я записал немного музыки и загрузил в Instagram, что наложило минутную продолжительность на клип. Я потерял исходные файлы и скомпилировал эти минутные клипы таким образом, чтобы song__AA0, song__AA1, song__AA2, ... они соответствовали одной названной песне AA и повторялись для BB, CC, ... . Но поскольку я обрезал видео вручную, начало song__AA1 будет повторять сегмент, который song__AA0 заканчивается; аналогично, начало song__A2 будет повторять сегмент, который song__AA1 заканчивается песней. Я пытался объединить эти минутные клипы, но найти точное время, в которое обрезать файлы, вручную сложно. Есть ли в python метод, который можно использовать для определения времени, в которое начало i 1 -й песни и конец i -й песни перекрываются, чтобы я мог соответствующим образом объединить эти файлы?

Ответ №1:

Одной из идей было бы использовать аудио-отпечатки пальцев, например, Dejavu. Акустический отпечаток пальца — это сжатая цифровая сводка, отпечаток пальца, детерминированно сгенерированный из аудиосигнала, который можно использовать для идентификации образца звука или быстрого поиска похожих элементов в аудиобазе данных.

По сути, dejavu будет создавать хэши поверх спектрограмм аудио.

Во-первых, создайте или подключитесь к MySQL, где Dejavu будет хранить отпечатки пальцев.

 from dejavu import Dejavu
config = {
    "database": {
        "host": "127.0.0.1",
        "user": "root",
        "passwd": <password above>, 
        "db": <name of the database you created above>,
    }
}
djv = Dejavu(config)
num_processes = 8
audio_extension = [".mp3", ".wav"]
djv.fingerprint_directory("directory_with_long_songs", audio_extension, num_processes) 
  

Теперь, когда вы создали отпечатки пальцев, вы можете выполнить распознавание

 from dejavu.recognize import FileRecognizer
song = djv.recognize(FileRecognizer, "your_shorter.wav")
  

Обратитесь к документам для API и интерпретации выходных данных.

Dejavu это одна из многих таких программ. Вы можете создать свой собственный алгоритм снятия отпечатков пальцев, следуя, например, Shazam paper.