Разработчик Шри Кхалпада создал интерактивную демонстрацию. Она наглядно объясняет, как Shazam распознает музыку за несколько секунд в шумном помещении.
Оказывается, приложение не слушает мелодию и не распознает слова — механизм куда хитрее.
Звук превращается в картинку
Микрофон улавливает звук и преобразует его в цифровой сигнал. Затем телефон применяет быстрое преобразование Фурье — математическую операцию, которая разбивает каждый отрезок звука на составляющие частоты.
Из таких срезов складывается спектрограмма: трехмерная «картинка», где по горизонтали идет время, по вертикали — частота, а яркость точки означает громкость.
Выбрасываем почти все
Алгоритм оставляет только самые яркие пики — частоты, которые в каждый момент звучат громче всего.
Фоновый шум кафе дает равномерный гул, но редко создает самый громкий пик в конкретном месте. Поэтому «карта созвездий» из пиков остается стабильной даже в шумной обстановке.
И именно поэтому Shazam плохо распознает напетую мелодию: голос создает другие пики.
Хэши и мгновенный поиск
Алгоритм соединяет соседние пики попарно и из каждой пары вычисляет короткий код — хэш — на основе двух частот и промежутка времени между ними.
Одна трехминутная песня порождает тысячи таких хэшей.
В базе данных они хранятся как адреса, а не по песням — это позволяет искать одинаково быстро среди сотен миллионов треков.
Финальная проверка — временные промежутки между хэшами в клипе и в базе должны совпасть. Если совпадений достаточно — песня найдена за доли секунды.
