Как Яндекс.Музыка распознает запись с микрофона?
Поиск по каталогу музыки — это задача, которую можно решать разными путями, как с точки зрения пользователя, так и технологически. Яндекс уже довольно давно научился искать и по названиям композиций, и по текстам песен — сегодня же речь пойдёт о поиске по аудиосигналу, а если конкретно — по записанному с микрофона фрагменту музыкального произведения.
В мире есть всего несколько специализированных компаний, которые профессионально занимаются распознаванием музыкальных треков. Насколько нам известно, из поисковых компаний Яндекс стал первым, кто стал помогать российскому пользователю в решении этой задачи. Несмотря на то, что нам предстоит ещё немало сделать, качество распознавания уже сопоставимо с лидерами в этой области. К тому же поиск музыки по аудиофрагменту не самая тривиальная и освещённая в Рунете тема; надеемся, что многим будет любопытно узнать подробности.
Технически задача формулируется следующим образом: на сервер поступает десятисекундный фрагмент записанного на смартфон аудиосигнала (мы его называем запросом), после чего среди известных нам треков необходимо найти ровно тот один, из которого фрагмент был записан. Если фрагмент не содержится ни в одном известном треке, равно как и если он вообще не является музыкальной записью, нужно ответить «ничего не найдено». Отвечать наиболее похожими по звучанию треками в случае отсутствия точного совпадения не требуется.
База треков
Как и в веб-поиске, чтобы хорошо искать, нужно иметь большую базу документов (в данном случае треков), и они должны быть корректно размечены: для каждого трека необходимо знать название, исполнителя и альбом. Как вы, наверное, уже догадались, у нас была такая база. Во-первых, это огромное число записей в Яндекс.Музыке, официально предоставленных правообладателями для прослушивания. Во-вторых, мы собрали подборку музыкальных треков, выложенных в интернете. Так мы получили 6 млн треков, которыми пользователи интересуются чаще всего.
Малоперспективные подходы
Как лучше сравнивать фрагмент с треками? Сразу отбросим заведомо неподходящие варианты.
- Побитовое сравнение . Даже если принимать сигнал напрямую с оптического выхода цифрового проигрывателя, неточности возникнут в результате перекодирования. А на протяжении передачи сигнала есть много других источников искажений: громкоговоритель источника звука, акустика помещения, неравномерная АЧХ микрофона, даже оцифровка с микрофона. Всё это делает неприменимым даже нечёткое побитовое сравнение.
- Водяные знаки . Если бы Яндекс сам выпускал музыку или участвовал в производственном цикле выпуска всех записей, проигрываемых на радио, в кафе и на дискотеках — можно было бы встроить в треки звуковой аналог «водяных знаков». Эти метки незаметны человеческому уху, но легко распознаются алгоритмами.
- Нестрогое сравнение спектрограмм. Нам нужен способ нестрогого сравнения. Посмотрим на спектрограммы оригинального трека и записанного фрагмента. Их вполне можно рассматривать как изображения, и искать среди изображений всех треков самую похожую (например, сравнивая как векторы с помощью одной из известных метрик, таких как L²):
Но в применении этого способа «в лоб» есть две сложности:
а) сравнение с 6 млн картинок — очевидно, дорогая операция. Даже огрубление полной спектрограммы, которое в целом сохраняет свойства сигнала, даёт несколько мегабайт несжатых данных.
б) оказывается что одни различия более показательны, чем другие.
В итоге, для каждого трека нам нужно минимальное количество наиболее характерных (т.е. кратко и точно описывающих трек) признаков.
Каким признакам не страшны искажения?
Основные проблемы возникают из-за шума и искажений на пути от источника сигнала до оцифровки с микрофона. Можно для разных треков сопоставлять оригинал с фрагментом, записанным в разных искусственно зашумлённых условиях — и по множеству примеров найти, какие характеристики лучше всего сохраняются. Оказывается, хорошо работают пики спектрограммы, выделенные тем или иным способом — например как точки локального максимума амплитуды. Высота пиков не подходит (АЧХ микрофона их меняет), а вот их местоположение на сетке «частота-время» мало меняется при зашумлении. Это наблюдение, в том или ином виде, используется во многих известных решениях — например, в Echoprint . В среднем на один трек получается порядка 300 тыс. пиков — такой объём данных гораздо более реально сопоставлять с миллионами треков в базе, чем полную спектрограмму запроса.
Но даже если брать только местоположения пиков, тождественность множества пиков между запросом и отрезком оригинала — плохой критерий. По большому проценту заведомо известных нам фрагментов он ничего не находит. Причина — в погрешностях при записи запроса. Шум добавляет одни пики, глушит другие; АЧХ всей среды передачи сигнала может даже смещать частоту пиков. Так мы приходим к нестрогому сравнению множества пиков.
Нам нужно найти во всей базе отрезок трека, наиболее похожий на наш запрос. То есть:
- сначала в каждом треке найти такое смещение по времени, где бы максимальное число пиков совпало с запросом;
- затем из всех треков выбрать тот, где совпадение оказалось наибольшим.
Для этого строим гистограмму: для каждой частоты пика, которая присутствует и в запросе, и в треке, откладываем +1 по оси Y в том смещении, где нашлось совпадение:
Трек с самой высоким столбцом в гистограмме и есть самый релевантный результат — а высота этого столбца является мерой близости между запросом и документом.
Борьба за точность поиска
Опыт показывает, что если искать по всем пикам равнозначно, мы будем часто находить неверные треки. Но ту же меру близости можно применять не только ко всей совокупности пиков документа, но и к любому подмножеству — например, только к наиболее воспроизводимым (устойчивым к искажениям). Заодно это и удешевит построение каждой гистограммы. Вот как мы выбираем такие пики.
Отбор по времени: сначала, внутри одной частоты, по оси времени от начала к концу записи запускаем воображаемое «опускающееся лезвие». При обнаружении каждого пика, который выше текущего положения лезвия, оно срезает «верхушку» — разницу между положением лезвия и высотой свежеобнаруженного пика. Затем лезвие поднимается на первоначальную высоту этого пика. Если же лезвие не «обнаружило» пика, оно немного опускается под собственной тяжестью.
Разнообразие по частотам: чтобы отдавать предпочтение наиболее разнообразным частотам, мы поднимаем лезвие не только в само́й частоте очередного пика, но и (в меньшей степени) в соседних с ней частотах.
Отбор по частотам: затем, внутри одного временно́го интервала, среди всех частот, выбираем самые контрастные пики, т.е. самые большие локальные максимумы среди срезанных «верхушек».
При отборе пиков есть несколько параметров: скорость опускания лезвия, число выбираемых пиков в каждом временно́м интервале и окрестность влияния пиков на соседей. И мы подобрали такую их комбинацию, при которой остаётся минимальное число пиков, но почти все они устойчивы к искажениям.
Ускорение поиска
Итак, мы нашли метрику близости, хорошо устойчивую к искажениям. Она обеспечивает хорошую точность поиска, но нужно ещё и добиться, чтобы наш поиск быстро отвечал пользователю. Для начала нужно научиться выбирать очень малое число треков-кандидатов для расчёта метрики, чтобы избежать полного перебора треков при поиске.
Повышение уникальности ключей : Можно было бы построить индекc
Частота пика → (Трек, Местоположение в нём) .
Увы, такой «словарь» возможных частот слишком беден (256 «слов» — интервалов, на которые мы разбиваем весь частотный диапазон). Большинство запросов содержит такой набор «слов», который находится в большинстве из наших 6 млн документов. Нужно найти более отличительные (discriminative) ключи — которые с большой вероятностью встречаются в релевантных документах, и с малой в нерелевантных.
Для этого хорошо подходят пары близко расположенных пиков. Каждая пара встречается гораздо реже.
У этого выигрыша есть своя цена — меньшая вероятность воспроизведения в искажённом сигнале. Если для отдельных пиков она в среднем P, то для пар — P 2 (т.е. заведомо меньше). Чтобы скомпенсировать это, мы включаем каждый пик сразу в несколько пар. Это немного увеличивает размер индекса, но радикально сокращает число напрасно рассмотренных документов — почти на 3 порядка:
Отобрав с помощью пар малое число документов, можно переходить к их ранжированию. Гистограммы можно с тем же успехом применять к парам пиков, заменив совпадение одной частоты на совпадение обеих частот в паре.
Двухэтапный поиск : для дополнительного уменьшения объёма расчётов мы разбили поиск на два этапа:
- Делаем предварительный отбор (pruning) треков по очень разреженному набору наиболее контрастных пиков. Параметры отбора подбираются так, чтобы максимально сузить круг документов, но сохранить в их числе наиболее релевантный результат
- Выбирается гарантированно наилучший ответ — для отобранных треков считается точная релевантность по более полной выборке пиков, уже по индексу с другой структурой:
Трек → (Пара частот, Местоположение в треке) .
Такая двухэтапность ускорила поиск в 10 раз. Интересно, что в 80% случаев результат даже огрублённого ранжирования на первом этапе совпадает с самым релевантным ответом, полученным на втором этапе.
В результате всех описанных оптимизаций вся база, необходимая для поиска, стала в 15 раз меньше, чем сами файлы треков.
Индекс в памяти : И наконец, чтобы не ждать обращения к диску на каждый запрос, весь индекс размещён в оперативной памяти и распределён по множеству серверов, т.к. занимает единицы терабайт.
Ничего не найдено?
Случается, что для запрошенного фрагмента либо нет подходящего трека в нашей базе, либо фрагмент вообще не является записью какого-либо трека. Как принять решение, когда лучше ответить «ничего не найдено», чем показать «наименее неподходящий» трек? Отсекать по какому-нибудь порогу релевантности не удаётся — для разных фрагментов порог различается многократно, и единого значения на все случаи просто не существует. А вот если отсортировать отобранные документы по релевантности, форма кривой её значений даёт хороший критерий. Если мы знаем релевантный ответ, на кривой отчётливо видно резкое падение (перепад) релевантности, и напротив — пологая кривая подсказывает, что подходящих треков не найдено.
Что дальше
Как уже говорилось, мы в начале большого пути. Впереди целый ряд исследований и доработок для повышения качества поиска: например, в случаях искажения темпа и повышенного шума. Мы обязательно попробуем применить машинное обучение, чтобы использовать более разнообразный набор признаков и автоматически выбирать из них наиболее эффективные.
Кроме того, мы планируем инкрементальное распознавание, т.е. давать ответ уже по первым секундам фрагмента.
Другие задачи аудиопоиска по музыке
Область информационного поиска по музыке далеко не исчерпывается задачей с фрагментом с микрофона . Работа с «чистым», незашумлённым сигналом, претерпевшим только пережатие, позволяет находить дублирующиеся треки в обширной коллекции музыки, а также обнаруживать потенциальные нарушения авторского права . А поиск неточных совпадений и разного вида схожести — целое направление, включающее в себя поиск кавер-версий и ремиксов, извлечение музыкальных характеристик (ритм, жанр, композитор) для построения рекомендаций, а также поиск плагиата.
Отдельно выделим задачу поиска по напетому отрывку . Она, в отличие от распознавания по фрагменту музыкальной записи, требует принципиально другого подхода: вместо аудиозаписи, как правило, используется нотное представление произведения, а зачастую и запроса. Точность таких решений получается сильно хуже (как минимум, из-за несопоставимо бо́льшего разброса вариаций запроса), а поэтому хорошо они опознают лишь наиболее популярные произведения.
Как использовать функцию распознавания музыки в Яндекс.Музыке для ПК?
Функция распознавания музыки – это инструмент, позволяющий идентифицировать название и исполнителя незнакомой композиции. Для пользователей Яндекс.Музыки доступна функция распознавания музыки, которая работает на базе технологии «Shazam». В данной статье мы расскажем, как правильно использовать данную функцию в ПК-версии Яндекс.Музыки.
Как найти функцию распознавания музыки?
Чтобы воспользоваться функцией распознавания музыки, необходимо зайти в ПК-версию Яндекс.Музыки и воспользоваться одним из следующих способов:
Нажать на иконку «Громкоговоритель» в правом нижнем углу экрана и выбрать всплывающее окно «Распознать композицию».
Нажать на иконку микрофона на главной странице Яндекс.Музыки и выбрать «Распознать композицию».
Как использовать функцию распознавания музыки?
После того, как вы выбрали функцию распознавания музыки, необходимо включить звук на вашем устройстве и поднести микрофон к источнику звука (например, к динамикам колонок или к телефону, на котором играет музыка). После этого система начнет анализировать звуковой файл и попытается идентифицировать композицию.
После того, как композиция будет распознана, на вашем экране появится информация о названии композиции и исполнителе. Кроме того, вы можете сразу перейти к прослушиванию этой композиции в Яндекс.Музыке, нажав на кнопку «Слушать на Яндекс.Музыке».
Плюсы и минусы функции распознавания музыки
У функции распознавания музыки есть ряд плюсов и минусов.
Плюсы:
- Быстро находит название и исполнителя композиции.
- Дает возможность сразу перейти к прослушиванию композиции в Яндекс.Музыке.
Минусы:
- Может работать только в присутствии источника звука.
- Некоторые композиции могут не быть распознаны из-за низкого качества записи, шумов или других причин.
Вывод
Функция распознавания музыки в Яндекс.Музыке – это удобный инструмент, позволяющий идентифицировать незнакомые композиции и перейти к их прослушиванию в Яндекс.Музыке. Несмотря на ряд ограничений, эта функция может стать отличным помощником для меломанов.
Как найти песню по звуку через микрофон на телефоне и ПК
Вот так бывает: сидишь себе где-нибудь, проводишь приятно время — играет хорошая музыка. Хочешь скачать себе на ПК/телефон такую же — но не знаешь кто исполняет композицию, не узнаешь исполнителя. 😥
Также часто встречаются не подписанные треки (это если музыка уже загружена к вам на жесткий диск): «неизвестный исполнитель — трек 1». Как найти исполнителя — тоже загадка.
Однако, спешу обрадовать: сейчас есть специальные программы для телефона и компьютера, позволяющие автоматически и довольно быстро определить по звуку, кто исполняет данную песню. 😉
Конечно, пока вероятность определения у них не 100% — но очень близкая к этому значению (
95%). Ну а потом, уже зная кто и чего — найти композицию будет значительно проще!
📌 Примечание!
В статье я рассмотрю несколько сервисов для компьютера, и несколько приложений для телефона на Андроид. Каждый из сервисов имеет свои отличительные черты (плюсы/минусы), поэтому предварительно см. описание.
Распознаем песню по звуку
Приложения
Пожалуй, они пользуются наибольшей популярностью на смартфонах, т.к. на любом из них есть микрофон (в отличие от ПК), а значит всегда, что слышно в округе — можно попытаться распознать.
Для полноценной работы данных приложений необходимо нормальное Интернет-соединение. Дело в том, что для сравнения текущего звука, который вы слышите, с большой базой песен — необходим достаточно мощный сервер, на который и передается слышимый звук телефоном (возможностей телефона для распознавания песни не хватит).
Алиса от Яндекс (и др. ассистенты)
Есть в приложениях: «Яндекс», «Яндекс-браузер
Если у вас относительно новый смартфон и он локализован для нашей страны — большая вероятность, что в нем есть приложение «Яндекс» (либо «Яндекс-браузер»). И в том, и в другом ПО — есть встроенный ассистент Алиса (она умеет определять, находить и воспроизводить музыку).
Для ее запуска — достаточно кликнуть по характерному значку (белый треугольник в сиреневом круге). 👇
Предустановленное приложение «Яндекс» на телефоне / Android 10.0
Собственно, после запуска «Алисы» — просто скажите ей голосом «Алиса, что за музыка играет?».
Далее она немного послушает ее (5-10 сек.) — и с большой долей вероятности покажет вам название трека, и его исполнителя. Кроме этого, предложит прослушать этот трек 📌на Яндекс-музыке (вы сможете сразу же добавить его к себе в избранное!). Удобно!? 😉
Пример работы! || Приложение «Яндекс» на Android 10.0
Еще один пример
📌 Важно!
Есть и другие виртуальные ассистенты, которые могут решать аналогичную задачу (Ассистент Google, Маруся от mail.ru, Салют от Сбера и пр.). У меня на блоге есть отдельная заметка с их возможностями.
Shazam (на Андроид)
Примеры работы в Shazam
Еще одно довольно популярное приложение для смартфона на Андроид. Позволяет за считанные секунды воспроизведения звука (5-10 секунд!) — определить название композиции и ее исполнителя.
Всё, что потребуется от вас после установки приложения — это нажать одну кнопку «Автошазам» (см. скриншот выше — приложение отлично справилось с русскими и зарубежными исполнителями).
- быстрое распознавание: всего 5-10 сек.!
- распознает как наших исполнителей, так и зарубежных;
- поддерживается большинство смартфонов (приложение не требовательное к ресурсам);
- найденные треки можно сразу же купить или прослушать (чтобы удостовериться тот ли трек);
- приложение бесплатно и поддерживает русский язык;
- есть функции поиска и общения с людьми, кому нравится эта песня (можно подружиться 👌).
- Обилие рекламы;
- Некоторые старые советские песни плохо распознаются;
- Для качественного и точного определения мелодии необходимо включать приложение, когда слышится голос исполнителя, и желательно припев.
SoundHound (Windows 10/Андроид)
SoundHound: пример работы приложения
SoundHound — отличное приложение, работающее как на ПК под управлением Windows 10, так и на смартфонах под Андроид. Для того, чтобы определить и распознать играющую песню — достаточно нажать одну оранжевую кнопку и через 10 секунд вы увидите название композиции!
- хороший алгоритм определения исполнителя;
- можно узнать не только саму композицию, но и посмотреть текст песни, узнать больше о любимом исполнителе;
- можно искать песни просто напевая в приложение (такого нет в большинстве других аналогичных программ!);
- есть история предыдущих поисков (т.е. если вы за вечер искали 5-10 композиций и вам было некогда их загружать к себе — то на следующий день сможете все их найти);
- можно смотреть различные подборки: новые песни, хиты, рекомендации и пр.;
- мгновенная покупка песен и целых альбомов.
- есть проблемы с распознаванием некоторых российских исполнителей (которые сейчас не популярны).
Онлайн-сервисы
Midomi (по звуку через микрофон онлайн)
Midomi — начать распознавать звук через микрофон
Очень мощный онлайн-сервис, позволяющий распознавать песню через микрофон (причем даже в тех случаях, когда вы сами ее напоете — т.е. сервис даже по этому звуку может найти мелодию!).
Все что требуется от пользователя, чтобы начать распознавание — это зайти на сайт, кликнуть мышкой по кнопке с микрофоном (скрин выше), разрешить сервису получить данные с вашего микрофона, и ву-а-ля — через 10-15 сек. вы узнаете песню!
- очень хороший алгоритм поиска;
- возможность вести распознавание музыки в режиме онлайн через ваш микрофон (даже если вы сами будете петь!);
- большая база исполнителей, композиций;
- возможность вести поиск композиции по ее тексту;
- есть вкладки с самыми «горячими» артистами и хитами за последнее время (можно быть в курсе всех тенденций и течений в музыке!).
- обилие рекламы на ресурсе;
- нет редких песен (особенно, касается малопопулярных российских исполнителей);
- отсутствует русский язык (хотя, в принципе, на сайте и так можно легко со всем разобраться 👌).
Как пользоваться сервисом:
- зайти на главную страничку сайта — кликнуть по кнопке поиска, расположена по центру экрана (рядом картинка с микрофоном — см. скриншот выше) ;
- дать разрешение сервису на использование микрофона;
Разрешить получить звук с вашего микрофона
AudioTag (для MP3-файлов, онлайн-радио и пр.)
AudioTag — очень удобный инструмент для определения исполнителя трека (например, MP3-файла)
Наверное, один из лучших сервисов на который можно загрузить уже имеющийся в наличие трек (например, MP3-файл). Я думаю, что у кого на диске много различной музыки, не раз встречались не подписанные треки (к примеру, трек №1, трек №2 и т.д.). В этом случае — их достаточно загрузить на сервис и получить название композиции.
Кроме этого, сервис позволяет вставить ссылку на определенный трек или воспроизводимое онлайн-аудио (например, Интернет-радио). Очень удобно, услышав интересную песню — просто быстренько вставить ссылку и получить результат.
- точное распознавание музыки по файлу или URL-адресу исполнения онлайн-аудио;
- получаете не только исполнителя, но и название трека, альбом, год выхода;
- поддерживает несколько аудио-форматов;
- поддерживает файлы разного качества;
- сервис бесплатный (есть поддержка русского);
- в результатах поиска, помимо найденной композиции, показываются похожие треки.
- нельзя самостоятельно спеть и найти трек;
- необходимо вводить капчу — иначе сервис считает вас за робота;
- не распознает некоторые редкие треки;
- на страницах обилие рекламы (хотя она и не агрессивна и не мешает работы с сайтом).
Для начала использования:
- просто выберите трек на жестком диске (Кнопка «Обзор»). Скриншот приведен выше;
- далее нажмите кнопку «Upload» (загрузить);
- вводите капчу (обычно, решение простого примера);
- получаете результат (скриншот с моим опытом работы с сервисом представлен ниже).
Нажми на кнопку — получишь результат! // AudioTag нашел исполнителя песни и название трека, год выхода композиции в свет.
Насчет музыки из фильмов (если приложения не находят информацию по исполнителю)
Бывает так, что в каком-нибудь фильме (сериале) услышишь интересную композицию (саундтрек), но приложения ее не находят. Как быть? 😥
📌Один из вариантов: зайти на сайт https://www.imdb.com/ и найти на нем нужный фильм (я в своем варианте взял «Один дома / Home alone»). В нижней части окна карточки фильма будет заветная ссылка «Soundtracks» (саундтреки). См. скрин ниже. 👇
Далее перед вами предстанет список саундтреков с их оригинальным названием и исполнителем. Удобно?! 👌
Яндекс музыка как найти песню по звуку
Будь в курсе последних новостей из мира гаджетов и технологий
Приложения «Яндекс.Музыки» научились распознавать песни. Как использовать новую функцию
Мобильные приложения «Яндекс.Музыки» для iOS и Android получили функцию распознавания композиций. Она работает в режиме реального времени и только при подключении к интернету — мобильному или Wi-Fi.
Чтобы найти песню, которая прямо сейчас играет в магазине, кафе или спортзале, запустите «Яндекс.Музыку», перейдите на вкладку «Поиск» и нажмите на значок микрофона. Приложение прослушает короткий отрывок, и, если распознает трек, напишет название композиции и имя исполнителя. Все песни, найденные с помощью этой функции, появятся в плейлисте «Распознано».
Нововведение доступно для любых устройств на iOS и Android и доступно с сегодняшнего дня в соответствующих магазинах приложений.