Модуль Python для разделения аудиомиксов

#python #python-2.7 #audio #audio-fingerprinting #pydub

#python #python-2.7 #Аудио #аудио-отпечатки пальцев #pydub

Вопрос:

Я долго искал, но не нашел ничего, что действительно работало.
Идея в том, что у меня есть музыкальный микс (в основном .mp3), из которого я пытаюсь составить список треков, используя pyechonest для идентификации треков. Однако это будет идентифицировать только отдельные дорожки (поправьте меня, если я ошибаюсь), поэтому я хотел бы иметь другой модуль, который мог бы разделить микс на отдельные дорожки.

Я заглянул в pydub для разделения звука, но у меня все еще возникли проблемы с обнаружением.

Заранее спасибо.

Редактировать: Итак, я нашел способ вырезать файлы, но теперь pyechonest возвращает название подкаста вместо имен треков, мой код (скажем, для 5 частей):

 >>> from pyechonest import track
>>> resultlist = []
>>> path = "C:\WinPython\OwnScripts\Convert"
>>> for i in range(0, 5, 1):
       #for file parts I tried 25-30 second long, 128k mp3 and wav
...    filename = path "\unleashed16_part" str(i 1) ".wav"
...    resultlist.append(track.track_from_filename(filename))
>>> resultlist
[<track - 001 Digital Punk - Unleashed>, <track - 001 Digital Punk - Unleashed>, <track - 001 Digital Punk - Unleashed>, <track - 001 Digital Punk - Unleashed>, <track - Defqon.1 2013 Continuous mix by Frontliner>]
 

Явно не то, что я хочу… Есть ли какой-либо способ заставить echonest не просматривать подкасты или возвращать несколько возможностей или что-то в этом роде?

Комментарии:

1. Я думаю, вы можете разбить микс на сегменты по 30 секунд или 1 минуту (т. Е. Аудио [startsample: endsample]), Затем использовать метод echonest identify для каждой части, а затем удалить повторяющиеся возвраты идентификатора дорожки.

2. Хм, да, я действительно думал об этом, но проблема в том, что стандартный echonest API допускает только 20 вызовов в минуту, что, боюсь, вызовет проблемы, если я урежу m в этих частях. Вот почему я подумал, что было бы лучше сначала определить разные треки, а затем вырезать части. Если это невозможно, я думаю, я вынужден использовать вашу идею да.

Ответ №1:

Если вы можете установить разумную минимальную длину песни, вы можете использовать идею CounterFlame, не отправляя каждую секунду аудио в их API.

Например, если вы знаете, что самая короткая песня длится не менее 3 минут, вы можете отправлять 30-секундный фрагмент каждые 2 минуты в echo nest

  14 minutes: ("=" is 15 seconds)
|===|===|===|===|===|===|===|===|===|===|===|===|===|
 song 1 (3:00)   song 2 (5:15)     song 3 (4:30)
|============|====================|=================|
 ^^        ^^        ^^        ^^        ^^        ^^   <-- send these chunks
 

математика работает следующим образом:

 # everything in seconds
minimum_song_length = 3 * 60

chunk_size_to_send = 30

throw_away_between_chunks = minimum_song_length - (2 * chunk_size_to_send)
 

по сути, вы хотите, чтобы в самой короткой песне было отправлено 2 фрагмента для идентификации, чтобы по крайней мере один не перекрывал песню до / после

Комментарии:

1. Хорошо, спасибо, я решил написать свою собственную оболочку ffmpeg, так как у меня были серьезные проблемы с памятью при загрузке аудио из pydub, поэтому я переключился на командную строку, чтобы вырезать аудиофайлы. Теперь у меня есть проблема с тем, что echonest довольно часто возвращает название подкаста вместо самого названия трека, есть идеи, как это обойти? Я обновил свой пост, как я отправляю его в echonest.