Как работает Shazam?
Shazam — волшебное приложение, которое может распознать, что за крутая песня играет в шумном баре. Как оно это делает? 👀
Нашелся человек, который разобрался, правда, по документации из 2003 года. Догадываемся, что за 20 лет что-то могло измениться, но общий принцип работы тот же. Рассказываем самое интересное, а детали уже в источнике.
👀 Начинаем с неожиданного факта — вы знали, что раньше в Shazam надо было звонить? Пользователь набирал номер и подносил телефон к источнику музыки. Через 30 секунд ему приходила SMS с данными о песне.
Работа Shazam делится на две части: регистрация и распознавание
💬 Регистрация — это создание «отпечатка» песни и добавление его в базу. Распознавание — запись сэмпла песни, про которую хочет узнать юзер, и сравнение его с «отпечатками» в базе.
💬 Когда приложение регистрирует песню, оно создает ее спектрограмму — график, где ось X показывает время, Y частоту звука, а цвет громкость. На нем программа находит пики — самые громкие частоты. Соседние пики хэшируются попарно, чтобы создать уникальный «отпечаток» песни. Он хранится в базе приложения.
💬 Когда Shazam распознает песню, он записывает небольшой фрагмент, который прогоняет через те же стадии, что в прошлом пункте: создание спектрограммы и хэширование. То, что получается в итоге, приложение сравнивает с песнями в базе.
Как Shazam распознает песни, несмотря на шум?
Тут надо разобраться, как строится спектрограмма. Песня делится на небольшие отрывки, которые проходят через преобразование Фурье. Это позволяет определить, какие частоты и в каком объеме встречаются в каждом из них. Даже если на запись попали сторонние звуки, приложение все равно сможет определить доминирующие частоты в песне, найти пики и сравнить с «чистыми» записями в базе. Конечно, это не поможет если шум слишком сильный.
Вот такая магия стоит за Shazam’ом. Если интересно, как это все устроено изнутри, автор дополнил материал ссылками на свое приложение для распознавания звука abracadabra, созданного по тем самым документам из 2003.
Post #1219
39K

- 👍 76
- 🔥 56
- 👌 14
- 🐳 12
- ❤ 8