Самые свежие новости, новинки и тренды Android от практикующего разработчика.
Автор: @al_gorshkov,
Чат: @android_live_chat
Личный блог: @al_gorshkov_blog
Рекламу не размещаю
Post #1106
3.28K
Как работает Shazam?
Слышали фразу: «Любая достаточно развитая технология неотличима от магии»? Хотел поделиться одним интересным моментом, который у меня как раз и вызывает это чувство. АРечь пойдёт о том, как работает Shazam. И, вероятно, другие похожие сервисы.
Итак, начнём наш пятничный длиннопост.
Любой оцифрованный звуковой файл по сути представляет собой список чисел. При записи микрофон записывает громкость воздуха тысячи раз в секунду. Однако если записать одну и ту же песню на два разных устройства, с точки зрения цифровых данных файлы не будут идентичными.
Это логично: фоновые шумы, разная громкость, а может — и разные комнаты. Всё это влияет на финальный набор чисел.
Так что сравнить два звука вот так «в лоб» не выйдет. И Shazam использует весьма изящное решение.
🟢вместо raw-файла он нарезает аудио на очень короткие кусочки по ~20–50 мс;
🟢далее выполняется Преобразование Фурье (Fourier Transform). Я не силён в математике, и вероятно, мне сейчас накидают в комментах, но... после преобразования у нас получается набор тонов и понимание, какие частоты присутствуют в звуке, и насколько громкие они. Даже при наличии шума ключевые частотные пики остаются узнаваемыми.
🟢благодаря коротким отрезкам Shazam знает не только частоты и громкость, но и то, когда именно они были в песне;
🟢если сложить всю эту информацию вместе — получаем спектограмму песни: слева-направо время, снизу-вверх частота, а точки показывают «яркость» звука;
🟢а потом алгоритм отбрасывает почти всю спектограмму, и оставляет только самые яркие точки. Остаются редкие маркеры в местах, где песня звучала громче всего, — это напоминает карту созвездий.
🟢для каждой «якорной» точки Shazam просматривает близлежащие точки и спрашивает, как далеко они находятся как по времени, так и по частоте. Каждое такое соотношение превращается в уникальный код.
Среднестатистический трек длительностью около трёх минут генерирует тысячи таких меток. Shazam хранит их в базе данных для большинства существующих песен. При этом сервис кодирует не просто отдельные точки, а их пары и расстояние между ними — это позволяет находить совпадения даже в шумной среде.
Ваш телефон выполняет все эти преобразования очень быстро, и за считанные секунды Shazam точно определяет, что за песня сейчас играет.
Это ли не магия? А вы говорите, что алгоритмы не нужны. 🧐
Слышали фразу: «Любая достаточно развитая технология неотличима от магии»? Хотел поделиться одним интересным моментом, который у меня как раз и вызывает это чувство. АРечь пойдёт о том, как работает Shazam. И, вероятно, другие похожие сервисы.
Итак, начнём наш пятничный длиннопост.
Любой оцифрованный звуковой файл по сути представляет собой список чисел. При записи микрофон записывает громкость воздуха тысячи раз в секунду. Однако если записать одну и ту же песню на два разных устройства, с точки зрения цифровых данных файлы не будут идентичными.
Это логично: фоновые шумы, разная громкость, а может — и разные комнаты. Всё это влияет на финальный набор чисел.
Так что сравнить два звука вот так «в лоб» не выйдет. И Shazam использует весьма изящное решение.
🟢вместо raw-файла он нарезает аудио на очень короткие кусочки по ~20–50 мс;
🟢далее выполняется Преобразование Фурье (Fourier Transform). Я не силён в математике, и вероятно, мне сейчас накидают в комментах, но... после преобразования у нас получается набор тонов и понимание, какие частоты присутствуют в звуке, и насколько громкие они. Даже при наличии шума ключевые частотные пики остаются узнаваемыми.
🟢благодаря коротким отрезкам Shazam знает не только частоты и громкость, но и то, когда именно они были в песне;
🟢если сложить всю эту информацию вместе — получаем спектограмму песни: слева-направо время, снизу-вверх частота, а точки показывают «яркость» звука;
🟢а потом алгоритм отбрасывает почти всю спектограмму, и оставляет только самые яркие точки. Остаются редкие маркеры в местах, где песня звучала громче всего, — это напоминает карту созвездий.
🟢для каждой «якорной» точки Shazam просматривает близлежащие точки и спрашивает, как далеко они находятся как по времени, так и по частоте. Каждое такое соотношение превращается в уникальный код.
Среднестатистический трек длительностью около трёх минут генерирует тысячи таких меток. Shazam хранит их в базе данных для большинства существующих песен. При этом сервис кодирует не просто отдельные точки, а их пары и расстояние между ними — это позволяет находить совпадения даже в шумной среде.
Ваш телефон выполняет все эти преобразования очень быстро, и за считанные секунды Shazam точно определяет, что за песня сейчас играет.
Это ли не магия? А вы говорите, что алгоритмы не нужны. 🧐
- 👍 35
- 🔥 8
- ❤ 2
