惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Google DeepMind News
Google DeepMind News
F
Fortinet All Blogs
阮一峰的网络日志
阮一峰的网络日志
Apple Machine Learning Research
Apple Machine Learning Research
爱范儿
爱范儿
WordPress大学
WordPress大学
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
J
Java Code Geeks
罗磊的独立博客
S
SegmentFault 最新的问题
V
V2EX
V
Visual Studio Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
美团技术团队
博客园 - 三生石上(FineUI控件)
Stack Overflow Blog
Stack Overflow Blog
Y
Y Combinator Blog
MyScale Blog
MyScale Blog
D
Docker
Google DeepMind News
Google DeepMind News
Blog — PlanetScale
Blog — PlanetScale
M
Microsoft Research Blog - Microsoft Research
Martin Fowler
Martin Fowler
S
Secure Thoughts
B
Blog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Recent Announcements
Recent Announcements
MongoDB | Blog
MongoDB | Blog
C
Cisco Blogs
C
CERT Recently Published Vulnerability Notes
T
True Tiger Recordings
GbyAI
GbyAI
P
Proofpoint News Feed
P
Privacy International News Feed
Jina AI
Jina AI
The Cloudflare Blog
I
Intezer
AWS News Blog
AWS News Blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
S
Security Archives - TechRepublic
NISL@THU
NISL@THU
The Register - Security
The Register - Security
Recent Commits to openclaw:main
Recent Commits to openclaw:main
P
Palo Alto Networks Blog
S
Schneier on Security
L
LINUX DO - 热门话题
C
CXSECURITY Database RSS Feed - CXSecurity.com
Security Latest
Security Latest
C
Cybersecurity and Infrastructure Security Agency CISA

Все публикации подряд на Хабре

Как проектировать ИИ-инструменты, которые делают пользователей лучше «Раньше хотел каждый, сейчас и бесплатно не надо»: гаджеты, про которые мы все забыли ИИ-агенты в бизнесе: почему 80% компаний увольняют людей, но не получают ROI Как я строил ИИ-стартап, или Новые архитектурные риски 2026 4 интересных парадокса, рождающих жаркие дискуссии Рабочее место не-вайбкодера: настраиваем harness Когнитивный инжиниринг Feature Based Clean Architecture. Часть 1: Эволюция NestJS-приложения в неподдерживаемое состояние Как мы перестали бояться «пустых охватов» и сделали инфлюенс-маркетинг управляемым каналом роста Подключили B2B email-платформу к голосовым ассистентам через MCP. Архитектура, код, где ломается [Перевод] Почему AI-агенты ломаются на длинных задачах — и как обвязка помогает им дописывать приложения Облачно, возможны нейросети: кризис датасетов и ахиллесова пята систем машинного зрения — DIY-чтение на выходные Спустя 5 лет и $5 миллионов: почему создание нового языка для веб-разработки оказалось ошибкой Безопасная песочница Облачная LLM на 16 ГБ VRAM — часть 2: LangGraph Server, LangSmith и SDK Современный SSH-клиент для MS-DOS Как продвигать агентство недвижимости: от вывески до прямых эфиров MCP для GitHub + GitLab: инженерный гайд 2026 Вы платите OpenAI $20 в месяц, а он зарабатывает на вас ещё $100 млн за полтора месяца. И это только начало ИИ забирает работу «белых воротничков»: чему учить детей, чтобы выжить в будущем Практический ИИ-агент Python: LangGraph + Qdrant Как я делал ping и traceroute на iOS без entitlements — и почему это оказалось проще, чем UMP-консент для AdMob 4 MVP за 4 месяца, 30 холодных DM, 1 регистрация: building in public по-русски VPS-бастион: доступ к домашнему серверу без белого IP Kampus AI — нейросеть для генерации учебных работ для студентов и школьников Игры, помогающие продавать — примеры интересных рекламных акций с видеоиграми €500 в Telegram Ads принесли сделку на 350 000 ₽. Разбор B2B-кампании Чтение на выходные: «Разработка игр и теория развлечений» Рафа Костера Личный архив: сбор, бэкап, таймлайн фотографий INFOSTART TECH EVENT или INFOSTART A&PM EVENT — как понять, куда вам нужнее? Peer testing на основе Закона Линуса Релиз GitLab 19.0: ИИ-оркестрация, которая наконец-то догнала темп написания кода Как бизнесу оценить готовность к аттестации по новому Приказу ФСТЭК № 117 Технический гайд по сторис – часть 4: как мы добавили видео формат Представительство в арбитражном процессе: правовые различия между внешним защитником и инхаусом «Где новые фичи?» — Как AI-миграция легаси вернет IT-бюджет бизнесу Что нужно знать работнику про увольнение Новые требования Москвы к ЦИМ для АГР: готовый инструмент для проектировщиков в nanoCAD BIM Строительство WireGuard: простота и надёжность современного VPN-туннеля или секретное рукопожатие в тёмной комнате Выйдет ли GTA 6 в 2026 году, и чего ждать от игры Как меня назвали «невовлечённым», а я нашёл офшоры на Кипре Как LLM научила рекомендательную модель видеть больше, чем историю взаимодействий От хаоса к экосистеме: Модель зрелости комьюнити в бизнесе Свет, тьма, VEML7700 и Python Сказ о том, как мы процессы разработки в GRI меняли. Часть 2 Майский «В тренде VM»: громкие уязвимости в Linux, ActiveMQ, SharePoint и Acrobat Reader Статический анализ, заряженный ИИ: как LLM ищут уязвимости в коде и где их границы Блок “Процессы” и почему мы называем его нашим мини-n8n Как поменялся рынок интернет-рекламы: сравнение первых кварталов 2025 и 2026 годов: исследование click.ru Мониторинг Kerio Connect через Zabbix 7: разбор шаблона без агентов и regex по DAT 671 Allow в Claude Code за день: как родился сетап Spec-build 3 известные интересные задачи на логику Как айтишнику позаботиться о менталке и не перерабатывать OpenAI vs Anthropic: битва экс-коллег за корпоративного клиента и $1 трлн на IPO SEO для интернет-магазина в 2026: что поменялось и как с этим работать Сможете ли вы спроектировать Maven‑монорепозиторий для 5 микросервисов? 6 неудобных вопросов про американское произношение, которые айтишники боятся задать Неожиданная встреча: теория графов вновь помогла решить проблему в анализе Фурье Иллюзия трансформации: почему компании платят за спектакль вместо изменений AMD представила Ryzen 9 PRO 9965X3D и еще 5 процессоров, которые пойдут далеко не всем История IDE в Google Первые отзывы на новинки о System Design Влияние параметра planner_upper_limit_estimation на планы выполнения и профиль нагрузки PostgreSQL при использовании 1C Границы 100% разработки с агентами Быстрый OCR на основе Paddle Дооснащение любительской электровакуумной мастерской. Вакуумметр, течеискатель, полярископ Mythos: модель, о которой Anthropic не говорит. Реверс по жертвам — от 27-летней дыры в OpenBSD до побега из песочницы Как использовать Qwen3.7-Max и Grok Build 0.1 для ИИ-агентов в России Suricata IPS NFQueue with nDPI. Часть VI Важные изменения в защите информации в России: что нового? В чем секрет достоверного замедления биологического старения? Вредное ускорение: Умный светофор на перегруженных перекрестках Как сисадмин написал свою библиотеку для Jira на Ruby: история Rujira Сломанный найм: почему рынок труда превратился в казино и что с этим делать Физики нашли свидетельства того, что Вселенная не идеально однородна, вопреки стандартной модели космологии Вопросы на собеседованиях, к которым лучше готовиться заранее Что детектировал детектор таксофонных карт? Как работают выделенные ядра в облачном сервере: от планировщика Linux до тестов производительности Математика кластеров: разбираемся в умной кластеризации данных на примере нашей системы поиска аномалий в логах. Часть 1 Ответы с «деврел‑супервизии», вопрос седьмой: выгорание, когда от вас ждут вечный драйв и креатив История одного // todo, который ждал своего часа пол года Если пропустили Claude последние 3 месяца: топ-5 фич с юзкейсами и история про $400K в Bitcoin Проектируем с нуля калькулятор на FPGA. Части 4 и 5: Фреймворк и оборудование Почему 10× от AI могут дать только лояльные сотрудники Speech-to-LaTeX: распознавание математических выражений и предложений в LaTeX Что внутри портфолио продуктовых и ux/ui-дизайнеров из Т-Банка, Додо, Figma, Альфы, Revolut? Чем заменить Excel в 2026 году: обзор российского ПО и других аналогов Как Rust обрабатывает repr и ABI на границе с C: что ломается и почему 5 промтов, чтобы подготовить презентацию в нейросетях через SpeShu.AI Каггл «200 ёлочек 2025»: призы уже раздали, но мы и за идею задачу укладки порешаем. Часть 1 Как ФНС стала data-driven за 5 лет: минус треть штата, плюс 20 новых цифровых сервисов Как настроить кастомную авторизацию в FESB и сохранить стандартный заголовок Как CISO защищаются от прошлого, игнорируя будущее Заменит ли ИИ разработчиков — и что с этим делать компании Влияние AI на позиции QA в 2026 году Я устал гадать, мне лучше или хуже, и сделал систему непрерывного измерения температуры Исходный код Jedi Academy переполнен яростными комментариями разработчиков ИИ существовал до компьютеров: Крышесносные примеры, часть 2 Тупик на игровом поле: почему образовательные и научные настольные игры в 2026 году сжимаются Ускоряет ли нас AI-coding или просто удорожает?
Как работает Shazam?
interpres (R · 2026-05-18 · via Все публикации подряд на Хабре

Уровень сложностиПростой

Время на прочтение6 мин

Охват и читатели61

Обзор

Перевод

Вы сидите в кофейне. Включается песня, название которой вертится на языке, но вспомнить его вы никак не можете. Вы достаёте телефон, нажимаете на кнопку, и приложение за несколько секунд определяет композицию.

Как, прослушав всего несколько секунд музыки в шумном помещении, телефон мгновенно может найти её среди миллионов песен?

Можно подумать, что телефон слушает мелодию или распознаёт текст, но это не так. На самом деле, всё гораздо хитрее.

Реверс-инжиниринг звука

В микрофоне телефона есть очень тонкая мембрана (диафрагма), измеряющая вызываемые звуком колебания воздуха. Эти колебания преобразуются в электрический сигнал, оцифровываемый в волновую форму: последовательность чисел, описывающую давление воздуха в каждый момент времени.

Это похоже на то, как наши барабанные перепонки улавливают те же волны давления, но мозг превращает их в звук, а телефон — в последовательность чисел.

Сама волновая форма не очень полезна для идентификации композиций. Повышение громкости песни создаст совершенно иную волновую форму, хотя сама песня остаётся той же. Две разные песни могут генерировать очень похожие волновые формы, а одна и та же песня, проигрываемая в разных пространствах, может генерировать разные.

Хитрость заключается в том, чтобы преобразовать волновую форму в более полезное для компьютера представление. Телефон выполняет с небольшими фрагментами волновой формы математическую операцию — быстрое преобразование Фурье (БПФ, или Fast Fourier Transform, FFT). Каждый фрагмент преобразуется из одной сложной волны в список отдельных частот, присутствующих в данный момент времени. Можно сказать, БПФ отвечает на вопрос: какие чистые тона нужно сложить, чтобы воссоздать этот звуковой фрагмент?

Соединив эти фрагменты друг за другом, мы получаем спектрограмму, описывающую звук в трёх измерениях: время движется по оси X, частота — по оси Y, а яркость каждой точки описывает амплитуду (громкость частоты на данный момент).

Что же на самом деле делает БПФ?

Любую волновую форму, какой бы зазубренной она ни была, можно описать в виде суммы гладких синусоид с разными частотами, амплитудами и фазами. БПФ — это эффективный алгоритм распаковки набора аудиосэмплов в такой список. Если передать ему 1024 сэмпла сырого аудио (примерно 23 миллисекунды в CD-качестве), то он вернёт спектр, сообщающий нам, какая величина энергии присутствует на каждой частоте. Вот базовая формула дискретного преобразования Фурье:

Для каждого блока частот k мы умножаем каждый сэмпл x[n] на синусоиду этой частоты и складываем их. Если сигнал содержит эту частоту, то сумма будет большой, если нет, она обнуляется.

Здесь важно, что это «быстрое» преобразование. При наивном разложении требовались бы миллионы операций на каждый блок. БПФ пользуется математической симметрией, чтобы выполнять этот процесс примерно за n log n операций (где n — количество сэмплов в блоке). Это можно делать достаточно быстро для того, чтобы выполнять процесс в телефоне сотни раз в секунду. Устройство перемещает это окно по аудио, выполняет БПФ для каждого фрагмента и соединяет получающиеся спектры один за другим. Результатом становится спектрограмма.

Показанное выше видео наглядно, но немного упрощено. В нём приведены только простые синтетические тона. Каждая нота — это чистая частота, волновая форма которой представляют собой идеальную синусоиду. К счастью, музыка обычно сложнее. Вспомните последнюю услышанную композицию, подумайте, сколько слоёв звука в ней было, каждый из которых отдельно и совместно состоит из множества частот.

Телефон сэмплирует входящий звук десятки тысяч раз в секунду (обычно с частотой 44100 Гц, которая также используется в CD). Каждый крошечный фрагмент этих сэмплов подвергается БПФ, а получающийся в результате формат уже может начинать анализировать система.

Чем меньше, тем больше

Даже на компьютере сохранение всех данных этой спектрограммы и поиск по ним происходили бы невероятно медленно, поэтому алгоритм поступает неожиданным образом: избавляется почти от всей информации.

В показанной ниже анимации при повышении порога слабые сигналы исчезают, а самые громкие пики сохранятся, оставляя только разбросанный набор точек. Эти точки представляют собой самые акустически значимые ориентиры записи.

Именно благодаря этому система становится устойчивой к шуму. Фоновый шум добавляет в спектрограмму низкоуровневую энергию, которая редко создаёт один самый громкий пик в какой-то из областей. Ориентиры — это частоты настолько доминирующие, что прорываются сквозь шум.

С другой стороны, из-за такого решения с «отпечатками пальцев» (фингерпринтами) Shazam плохо распознаёт песни, которые просто поёт пользователь. Скорее всего, при этом сгенерируется хэш, отличающийся от хэша оригинала, даже если он очень хорошо поёт! Новые системы на основе машинного обучения способны обрабатывать живое пение, сопоставляя мелодию, а не конкретные частоты.

Соединяем точки

Отдельная точка в этом «созвездии» сама по себе не особо полезна. Частота 1200 Гц в какой-то момент времени может встречаться в тысячах композиций. Но вот пара точек, допустим, 1200 Гц и 2400 Гц, разделённые ровно 0,3 секунды — это гораздо конкретнее.

Алгоритм назначает каждый пик по очереди якорем. Для каждого якоря он определяет целевую зону справа (окно времени и частоты) и соединяет якорь с каждым пиком внутри этой зоны. Каждая пара генерирует компактный хэш из этих трёх чисел: двух частот и разницы времени между ними.

Хэш — это короткая строка символов, используемая в качестве сокращённого кода: одни и те же три образца входных данных всегда генерируют один и тот же хэш, и даже небольшие изменения в одном из них генерирует совершенно иной. У Shazam и подобных ему систем есть способы учёта небольших вариаций, но поскольку хэши создаются на основе точных частот и таймингов, они, по сути, работают как отпечатки пальцев конкретной записи, а не песни. Из-за этого с ними сложнее сопоставлять каверы и ремиксы.

Для одной трёхминутной песни могут быть сгенерированы тысячи таких хэшей-отпечатков, которые хранятся в базе данных. Итак, телефон создал набор хэшей по своему пятисекундному клипу, а в базе данных есть миллионы хэшей почти всех популярных песен. Как же она находит совпадение?

Поиск идеального совпадения

Наивный подход: сначала песни

Мы интуитивно рассуждаем о музыке с точки зрения композиций. Если использовать такую ментальную модель, то нам бы пришлось искать каждую песню одну за другой, проверяя, пересекаются ли её хэши с хэшами из клипа пользователя. Эта работа выполняется за время O(N); в computer science это означает, что она будет всё медленнее с появлением в мире новых композиций.

Инвертированный индекс: сначала хэши

Компьютеры могут решать эту задачу наоборот. Вместо того, чтобы задавать вопрос: «Какая песня соответствует этой последовательности звуков?», телефон спрашивает: «Вот звуки, в каких песнях они есть?», и делает так для каждого хэша клипа. Принцип такой же, как у алфавитного указателя в конце книги: вместо того, чтобы перечитывать каждую страницу для нахождения слова мы переходим к слову и видим все страницы, на которых оно есть.

По сути, в этом случае для операции поиска требуется O(1), то есть время будет приблизительно одинаковым вне зависимости от того, сто у вас песен или сто миллионов. Точнее, телефон переходит прямо к адресу каждого хэша, а не сканирует композиции, а количество возможных хэшей достаточно велико, чтобы каждый адрес содержал всего несколько записей даже в случае миллионов песен.

Однако нахождения общих хэшей недостаточно. Популярный паттерн ударных может создать один и тот же хэш в сотнях песен. Последняя проверка заключается в сопоставлении таймингов. Если в клипе пользователя расстояние между хэшами 17403C и 19A998 равно 1,2 секунды, то в соответствующей композиции они тоже должны быть разделены 1,2 секунды. Если временные различия между всеми совпадающими хэшами согласуются и совпадений достаточно, то система будет уверена в том, что нашла нужную песню.

Система основана на операциях, с которыми компьютеры справляются очень хорошо: на сравнении чисел и поиске адресов. Весь процесс поиска среди миллионов композиций занимает доли секунды.

Более современные решения

В большинстве сервисов идентификации песен наподобие Shazam аудиоклип передаётся на сервер, где хранится огромная база данных отпечатков пальцев. Сервер ищет соответствие и возвращает результат. Такая система работает, потому что база данных огромна и динамична, а поиск по ней требует серьёзных вычислительных мощностей.

Существуют и более новые решения. Распознавание Apple и фича Google Pixel «Now Playing» способны работать локально на самом телефоне. В них используются базы данных меньшего размера и оптимизированные модели, пожертвовавшие исчерпывающими данными ради скорости; они обладают более сложными моделями машинного обучения с повышенной устойчивостью к шуму и вариативности в аудио.

Как и в любой системе, здесь приходится идти на компромиссы. Система поиска в устройстве быстрее и работает без подключения к Интернету, но имеет гораздо меньшую по размерам базу данных и ей приходится скачивать новые данные в случае изменения местоположения. Хитовые песни в Японии будут отличаться от хитов в США, и наоборот.

Но где бы ни происходило сопоставление, в основе своей принцип одинаков: избавляясь почти от всего и сохраняя только малое количество ориентиров, шумный пятисекундный клип, записанный в кофейне, становится достаточно точным набором координат, позволяющим найти нужную из миллионов песен.

Думаю, мне нравится этот алгоритм тем, что это умное решение, в то же время остающееся детерминированным и прозрачным. Подобные решения занимают в моём сердце особое место, ведь сегодня слишком многие технологии используют чёрные ящики моделей машинного обучения, которые, несмотря на свою мощь, не обладают тем же изяществом и понятностью.

Данные для этой статьи я брал из научной статьи Эйвери Ванга An Industrial-Strength Audio Search Algorithm. Если вы хотите глубже изучить обработку сигнала и архитектуру системы, лежащей в основе Shazam, то рекомендую прочитать эту статью.