Комментарии 22
В посте про Shazam без этой картинки не обойтись
![image](https://habrastorage.org/r/w780q1/getpro/habr/comment_images/a2d/b08/d34/a2db08d348a11dd376bf1a3c634f1425.jpg)
![image](https://habrastorage.org/getpro/habr/comment_images/a2d/b08/d34/a2db08d348a11dd376bf1a3c634f1425.jpg)
+41
Спасибо! Как раз интересует смежный вопрос: существует ли готовое десктопное решение — софт или библиотека — аналог Шазама? Хочется скормить ему пару терабайт музыки с локального HDD, той о которой Эвери Ли Чунь Вонг ни сном ни духом…
+3
если я правильно помню, что когда то была tunatic для десктопа
0
Когда я сидел на винде, то наводил порядок в музыке с помощью программы TagScanner — прям полностью всё ей скормить вряд ли получится, но вообще она довольно здорово ищет инфу для всяких там «Track 2» в сети, особенно если речь не об отдельном треке, а об альбоме.
0
Кажется я плохо сформулировал запрос… Мне нужно а) создать базу данных по 2 ТБ музыки с локального HDD, б) пробить 20-секундный отрывок по этой базе. Всё на одном локальном компьютере. То есть делать ровно то же что делает Шазам, серверная + клиентская часть.
Вот, кстати, ещё одна частная разработка — audiotag.info от создателя websound.ru, но опять же это — грустный веб-сервис, только клиент.
А тагсканнер ищет по CDDB — это неинтересно.
Вот, кстати, ещё одна частная разработка — audiotag.info от создателя websound.ru, но опять же это — грустный веб-сервис, только клиент.
А тагсканнер ищет по CDDB — это неинтересно.
0
НЛО прилетело и опубликовало эту надпись здесь
Есть еще the.echonest.com — недавно купленное Spotify'ем решение. В документации API есть вариант со скармливанием музыки и ее определением. Не просто конечно, но как вариант.
0
В открытом MusicBrainz Picard есть схожая функция.
0
Если кому интересно, есть еще более подробная статья о принципах работы Shazam, начиная с основ звука и музыки: http://coding-geek.com/how-shazam-works/
+1
Статья имеет такое же отношение к алгоритмам по которым Shazam работает, как фраза «автомобили собирают из железа» к производству автомобилей. То что написал постом выше nile1 куда ближе. Но всё равно далеко.
Ещё ближе, но уже не очень далеко — писал Яндекс в своём блоге: habrahabr.ru/company/yandex/blog/181219
В реальности, как я подозреваю, всё куда сложнее. И куда интереснее настроено. Например, мне кажется, что для сравнения двух спектрограмм могут неплохо зайти свёрточные сети. Но боюсь, что реально как устроен Шазам только Шазам и может статью написать.
Ещё ближе, но уже не очень далеко — писал Яндекс в своём блоге: habrahabr.ru/company/yandex/blog/181219
В реальности, как я подозреваю, всё куда сложнее. И куда интереснее настроено. Например, мне кажется, что для сравнения двух спектрограмм могут неплохо зайти свёрточные сети. Но боюсь, что реально как устроен Шазам только Шазам и может статью написать.
+3
Описанный алгоритм точно работает. Конечно в шазаме всё сложнее. Но базовый алгоритм именно такой (или как минимум был таким). Я использовал данный подход для автоматического определения стандартных приветствий автоответчиков. На российских операторах мобильной связи работает «на отлично». Преимущественно из-за того, что приветствия голосовых почтовых ящиков изменять нельзя (или никто этого не делает).
0
Этот алгоритм не будет работать на записях музыки поле нескольких десятков, максимум сотен сэмплов. Особенно зашумлённых. Не смущайте людей, а то попробуют сделать. Парочку записей автоответчиков вы им, безусловно, распознаете.
А базовый алгоритм не такой, а через поиск отпечатка на спектрограмме. Как в статье, что привёл nile1 или я.
А базовый алгоритм не такой, а через поиск отпечатка на спектрограмме. Как в статье, что привёл nile1 или я.
-1
Даже и не думал смущать никого.
Как уже написал чуть ниже — год назад реализовал данный алгоритм для продукта Naumen Phone.
Он по первым нескольким секундам (не 20-30, как шазам) телефонного разговора определяет является ли удалённая сторона шаблонным приветствием какого либо оператора связи (всякие абонент недоступен и тп). Шаблонов и правда немного — несколько десятков. Но работает всё прекрасно. Основное отличие — сравнение «потока частотных характеристик» с шаблоном (а не «фингерпринта») сделано для уменьшения длительности требуемого участка звука.
Код по понятным причинам опубликовать не могу… :)
Как уже написал чуть ниже — год назад реализовал данный алгоритм для продукта Naumen Phone.
Он по первым нескольким секундам (не 20-30, как шазам) телефонного разговора определяет является ли удалённая сторона шаблонным приветствием какого либо оператора связи (всякие абонент недоступен и тп). Шаблонов и правда немного — несколько десятков. Но работает всё прекрасно. Основное отличие — сравнение «потока частотных характеристик» с шаблоном (а не «фингерпринта») сделано для уменьшения длительности требуемого участка звука.
Код по понятным причинам опубликовать не могу… :)
0
теперь понятно, почему шазам ни фига не распознает :(
-2
Прекрасная статья, спасибо!
Есть одно небольшое замечание — я бы слова «вот этот программист» заменил на что-нибудь более уважительное. Год назад писал библиотеку для распознавания приветствий стандартных автоответчиков операторов связи для продукта Naumen Phone и статья, на которую вы ссылаетесь, буквально howto. И, насколько я могу судить по вашему коду, она вам тоже очень помогла. Не сочтите за «наезд» — просто мнение и очень трепетное отношение к «нетикету»
Кстати «вот этот программист» долго бодался чтобы эта статья не была «выпилена» самим шазамом — можете почитать соседние посты в блоге. Дорогого стоит.
Есть одно небольшое замечание — я бы слова «вот этот программист» заменил на что-нибудь более уважительное. Год назад писал библиотеку для распознавания приветствий стандартных автоответчиков операторов связи для продукта Naumen Phone и статья, на которую вы ссылаетесь, буквально howto. И, насколько я могу судить по вашему коду, она вам тоже очень помогла. Не сочтите за «наезд» — просто мнение и очень трепетное отношение к «нетикету»
Кстати «вот этот программист» долго бодался чтобы эта статья не была «выпилена» самим шазамом — можете почитать соседние посты в блоге. Дорогого стоит.
0
Ох сколько там еще под капотом, даже сверх описанного тут. Особенно поиск по базе интересен становится…
0
Интереснее было бы услышать о SoundHound. Алгоритмы, скорее всего, схожи, но SoundHound умеет распознавать даже напевание определенной песни (понятно, что напевающий должен уметь петь). Или шазам тоже уже этому научился?
+1
Я предполагал что там используется не простой БПФ а вэйвлет-преобразования или типа того.
Это учитывало бы не тольоко спектр а и его изменение на временном промежутке.
Это учитывало бы не тольоко спектр а и его изменение на временном промежутке.
+1
Интересно, а есть ли связь алгоритма и высокочастотной торговли? То есть, можно ли составив базу по торгам достоверно предсказывать поведение рынка? Ведь задача весьма и весьма похожа.
-1
Практическая значимость статьи — думаю ok.)
Я лишь хотел высказать правду про математику под капотом.
Мне очень не нравится, что людям кто не очень в теме приподносится неправильные фундаментальные штуки:
1. Про преобразования
ДПФ, Ряды Фурье, Фурьеринье (интегро-дифференциальный оператор)-- три соверешенно разные операции, работающие с разными видами сигналов — кортеж, периодический сигнал, просто сигнал соотвественно. (Опуская вопрос о существовании таковых для последних двух)
«С его помощью можно преобразовать конечный набор образцов сигнала, взятых с равными промежутками времени, в список коэффициентов конечной комбинации комплексных синусоид, упорядоченных по частоте, принимая во внимание, что эти синусоиды были дисретизированы с одной и той же частотой. „
1. Комплексных синусоид — ни о каких sin-ах от комплексных величин речи не идёт (Если есть предложение как ввести эту операцию — скажите пожалуйста). Если вы имееты ввиду комплексные экспоненты — то выражайтесь правильно.
2. Дискретное преобразование Фурье — это просто операция на векторах длины N состоящих из скаляров.
3. Вы подумайте сами о чём говорите — семлы взяты на отрезке [0,L] лежащие друг от друга на расстоянии 1/2B для сигнала. Вы работаете с непериодическим сигналом — и вы говорите, что какие-то cos-сы (непрерывные функции) в линейной комбинации представляют кортеж. Чушь.
Про ДПФ:
Первая точка зрения происходящую ситуацию:
Это преобразование не соответствует обычному преобразованию Фурье. Это отображения из вектора конечной длины N с действительными числами в вектор такой же длинны N но с комплексными числами. Но оно часто обладает теми же важными свойствами, которыми обладает непрерывный аналог.
Вторая точка зрения на происходящую ситуацию:
Если очень постараться, и применить некоторые, строго говоря неверные, приближения, то всё таки можно “свести” дискретное преобразование к обычному.
2. Про Фурье
“В 19 веке Жан Батист Джозеф Фурье сделал выдающееся открытие. Заключается оно в том, что любой сигнал во временной области эквивалентен сумме некоторого количества (возможно, бесконечного) простых синусоидальных сигналов, при условии, что каждая синусоида имеет определённую частоту, амплитуду и фазу. „
первое замечание: Жан Батист Джозеф Фурье ошибался
второе замечание: Вы даже треугольный сигнал (sawtooth) не можете представить таким рядом.
Фурье заложил основы, но к этому преобразованию приложили свои руки: Риман, Лебега, Шварц, Хевисайд (в неявном виде)
p.s. Я из-за отрициательной кармы не могу писать полноценные статьи на этом ресурсе, где я как понимаю можно писать научно-популярные статьи, но я не парюсь по этому поводу, и залил себе на хоум пейдж:
https://sites.google.com/site/burlachenkok/articles/faq_ft
Пишите на burlachenkok@gmail.com — если что.
Я лишь хотел высказать правду про математику под капотом.
Мне очень не нравится, что людям кто не очень в теме приподносится неправильные фундаментальные штуки:
1. Про преобразования
ДПФ, Ряды Фурье, Фурьеринье (интегро-дифференциальный оператор)-- три соверешенно разные операции, работающие с разными видами сигналов — кортеж, периодический сигнал, просто сигнал соотвественно. (Опуская вопрос о существовании таковых для последних двух)
«С его помощью можно преобразовать конечный набор образцов сигнала, взятых с равными промежутками времени, в список коэффициентов конечной комбинации комплексных синусоид, упорядоченных по частоте, принимая во внимание, что эти синусоиды были дисретизированы с одной и той же частотой. „
1. Комплексных синусоид — ни о каких sin-ах от комплексных величин речи не идёт (Если есть предложение как ввести эту операцию — скажите пожалуйста). Если вы имееты ввиду комплексные экспоненты — то выражайтесь правильно.
2. Дискретное преобразование Фурье — это просто операция на векторах длины N состоящих из скаляров.
3. Вы подумайте сами о чём говорите — семлы взяты на отрезке [0,L] лежащие друг от друга на расстоянии 1/2B для сигнала. Вы работаете с непериодическим сигналом — и вы говорите, что какие-то cos-сы (непрерывные функции) в линейной комбинации представляют кортеж. Чушь.
Про ДПФ:
Первая точка зрения происходящую ситуацию:
Это преобразование не соответствует обычному преобразованию Фурье. Это отображения из вектора конечной длины N с действительными числами в вектор такой же длинны N но с комплексными числами. Но оно часто обладает теми же важными свойствами, которыми обладает непрерывный аналог.
Вторая точка зрения на происходящую ситуацию:
Если очень постараться, и применить некоторые, строго говоря неверные, приближения, то всё таки можно “свести” дискретное преобразование к обычному.
2. Про Фурье
“В 19 веке Жан Батист Джозеф Фурье сделал выдающееся открытие. Заключается оно в том, что любой сигнал во временной области эквивалентен сумме некоторого количества (возможно, бесконечного) простых синусоидальных сигналов, при условии, что каждая синусоида имеет определённую частоту, амплитуду и фазу. „
первое замечание: Жан Батист Джозеф Фурье ошибался
второе замечание: Вы даже треугольный сигнал (sawtooth) не можете представить таким рядом.
Фурье заложил основы, но к этому преобразованию приложили свои руки: Риман, Лебега, Шварц, Хевисайд (в неявном виде)
p.s. Я из-за отрициательной кармы не могу писать полноценные статьи на этом ресурсе, где я как понимаю можно писать научно-популярные статьи, но я не парюсь по этому поводу, и залил себе на хоум пейдж:
https://sites.google.com/site/burlachenkok/articles/faq_ft
Пишите на burlachenkok@gmail.com — если что.
+3
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Shazam: алгоритмы распознавания музыки, сигнатуры, обработка данных