ГлавнаяБлогРаспознавание музыки: как Shazam и YouTube Music находят песни
Алгоритмы

Распознавание музыки: как Shazam и YouTube Music находят песни

Разбираем, как работает распознавание музыки: спектрограммы, акустические отпечатки и контур мелодии. Узнайте, как Shazam и YouTube Music находят песни по записи и напеванию.

Al
Редакция Algolitalgolit.ru
7 мин чтения21 августа 2026 г.

Как телефон понимает, что вы напеваете?

Вы когда-нибудь напевали мелодию в телефон, и он угадывал песню? Это кажется магией, но за этим стоит чёткий алгоритм. В этой статье разберём, как работает распознавание музыки: от спектрограмм до акустических отпечатков и контура мелодии. Вы узнаете, почему Shazam не справляется с напеванием, а YouTube Music — справляется.

Звук — это не то, что слышит телефон

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

Это спектрограмма. Песня в виде спектрограммы — визуальный отпечаток. Бас-барабан даёт всплески на низких частотах, вокал — дуги в среднем диапазоне, гитарный аккорд — веер частот. Мелодия оставляет уникальную форму. Звук не меняется, просто его структура становится видимой и сравнимой.

Превращаем песню в поисковый запрос

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

Shazam называет их якорными точками. Отпечаток строится из пар: якорная точка плюс соседний пик. Фиксируются частоты обоих и временной разрыв. Каждая пара превращается в хэш — компактное число, кодирующее эти три параметра.

# Псевдокод: извлечение хэшей
spectrogram = compute_spectrogram(audio)
peaks = find_local_peaks(spectrogram)  # ищем якорные точки
hashes = []
for anchor in peaks:
    for neighbor in nearby_peaks(anchor):
        h = hash(anchor.freq, neighbor.freq, neighbor.time - anchor.time)
        hashes.append((h, anchor.time))
# Сохраняем в базу: hash -> (song_id, time_offset)

Когда вы подносите телефон к динамику:

  1. Запись проходит тот же анализ спектрограммы.
  2. Извлекаются пики.
  3. Строятся хэши.
  4. Ищем совпадения в базе.
  5. Находим песню, где совпадения образуют согласованные временные сдвиги.

Последний шаг — ключевой. Одно совпадение хэша ничего не доказывает: разные песни могут случайно иметь одинаковые пары частот. Убедительно, когда десятки хэшей из вашего фрагмента совпадают с одной песней и указывают на одну позицию в оригинале. Случайные совпадения не дают такой согласованности.

Почему хватает нескольких секунд

Четырёхсекундный фрагмент даёт сотни хэшей. Не нужно, чтобы совпали все — достаточно, чтобы они кластеризовались вокруг одной песни. Если в фрагменте есть запоминающийся припев или инструментальный отрывок, хэши будут уникальны. Тихое вступление без ярких пиков может не сработать. Система ищет уверенное согласованное совпадение, а не полное покрытие.

Почему шум не всегда мешает

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

Напевание — совсем другая задача

Здесь распознавание напева YouTube Music становится интересным, потому что оно ломает все предположения отпечатков. Когда Shazam слушает песню в комнате, у него есть оригинальные акустические характеристики: инструменты, продакшн, микс. Спектрограмма вашей записи будет похожа на оригинал настолько, что хэши совпадут.

Когда вы напеваете, ничего из этого не переносится. Голос даёт совершенно другой спектр, чем гитара или синтезатор. Инструменты исчезают, высота может быть неточной, темп плавает. Тембр напева почти не пересекается с оригиналом. Если прогнать напев через алгоритм Shazam, хэши не совпадут ни с чем. Представления слишком разные.

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

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

# Псевдокод: извлечение контура
pitch_track = detect_pitch(humming)  # массив частот во времени
contour = []
for i in range(1, len(pitch_track)):
    if pitch_track[i] > pitch_track[i-1]:
        contour.append('up')
    elif pitch_track[i] < pitch_track[i-1]:
        contour.append('down')
    else:
        contour.append('same')
# Сравниваем контур с базой мелодий

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

Один вопрос — разные представления

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

Когда вы напеваете, акустическая поверхность исчезает. Система извлекает единственное, что сохраняется во всех версиях мелодии: форму движения нот. Тот же вопрос: «что это за песня?» — другой вход, другое представление, другая стратегия.

Вы не знали названия, не знали исполнителя. У вас была только мелодия в голове, неточно запомненная и неточно напетая. Но у мелодии есть форма, которая переживает ваш голос, тональность, темп и память. Телефон не пытался услышать музыку как вы. Он нашёл представление, которое ухватило единственное, что вы могли дать.

Практический вывод

Теперь, когда вы знаете, как работает распознавание музыки, попробуйте применить это знание на практике. Если вы разработчик, попробуйте реализовать простую версию акустического отпечатка на Python: возьмите библиотеку librosa для спектрограмм, найдите пики и постройте хэши. Или поэкспериментируйте с определением высоты тона для контура мелодии. Это отличный способ понять, как алгоритмы работают в реальных продуктах. А в следующий раз, когда телефон угадает песню, вы будете знать, какой алгоритм за этим стоит.

#распознавание музыки#спектрограмма#акустический отпечаток#алгоритмы#Shazam
Al
Редакция Algolit

Пишем про алгоритмы, подготовку к собеседованиям и карьеру в IT — так, чтобы было понятно и полезно.

Хочешь закрепить знания на практике?

Решай задачи на Algolit — интерактивная платформа для обучения

Начать бесплатно →