#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.