С каждым годом всё больше выпускается музыки, но совсем не так много из неё нравится отдельно взятому человеку. Уследить за тенденциями очень сложно, если не заниматься этим сутками, а довольно часто мы слышим в самых разных местах интересные композиции, но как узнать, какая музыка играет?

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

Shazam - что за программа?

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

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

Изначально Shazam работал по схеме: вы звоните по номеру и включаете отрывок песни, затем вам приходит смс с названием композиции, такая услуга была платная. С того момента утекло много воды и на данный момент программа для распознавания музыки Shazam стала известна во всем мире и даже приобрела собственное выражение «шазамить» - так пользователи называют процесс поиска аудио.

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

Также Shazam умеет синхронизироваться с другими сервисами вроде Spotify или Rdio. Умеет производить поиск по тексту песни.

Shazam, как пользоваться?

Приблизительно принцип работы состоит в следующем: программа записывает 10 сек. трека. Затем загружает его на общий, центральный сервер, где по определённым точкам, используя мощного робота, происходит поиск. Вероятность найти композицию очень высокая, хоть и не 100%. В базе сервиса содержится уже свыше 40 млн песен.

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

Сервис Shazam бесплатен для использования в странах СНГ и нет платной версии. В общем-то существует и коммерческий вариант и единственное его преимущество – это отсутствие рекламы. Увы, но как и у многих бесплатных приложений, у Шазам заработок происходит за счет рекламы.

Использование программы крайне простое и доступно даже самому незадачливому пользователю, от вас требуется:

  • Загрузите само приложение, найти его можно в оф магазине и является бесплатным, для Android https://play.google.com/store/apps/details?id=com.shazam.android&hl=ru;
  • Запустите программу;
  • Нажмите на символ Shazam, круглую кнопку по центру;

  • Поднесите смартфон, планшет или ноутбук к источнику музыки;

  • После 10-и секундной записи вы получите искомую информацию.

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

Лучше всего сервис работает с широко известными композициями, с англоязычными исполнителями, но вполне неплохо определяет и русские песни.

После удовлетворительного результата вы получите максимальное количество информации об исполнителе и самом произведении, не забыли разработчики и о тексте песни. Также будут представлены ссылки на дополнительные источники, вроде Wikipedia, где описывается история жизни/творчества музыканта, а иногда интересные обстоятельства написания песни.

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

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

Если у Вас остались вопросы по теме «Что такое Shazam? Основные функции и использование программы», то можете задать их в комментариях


if(function_exists("the_ratings")) { the_ratings(); } ?>

Как работает шазам? Вопрос, интересующий многих пользователей. Действительно, каков принцип работы данного сервиса?

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

То есть принцип работы шазам сервиса таков:

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

Это и есть основные принципы работы сервиса.

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

Более подробно об «отпечатках»

Что такое «отпечатки»? Когда пользователь «отметил» заинтересовавшую его песню, программа генерирует для нее десятисекундный «отпечаток» — образец звука.

Множество композиций хранится в базе данных Shazam, информация регулярно пополняется. Во всех образцах выделяют три основных показателя – частота, время интенсивность. Когда человек начинает искать какую-либо мелодию, сканер генерирует ее в «отпечаток», который складывается из частоты, времени, интенсивности.

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

Интерфейс сервиса

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

После того, как мелодия отсканирована, информация о ней появится в отдельном окне, внизу которого есть дополнительная информация о трэке.

В меню сохраняется история поиска, который можно просмотреть в любое время.

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

В случае некорректной работы шазам, исправить положение можно несколькими способами. Итак, если, при необходимости распознать песню на экране мобильного телефона появляется сообщение – «К сожалению, мы не смогли распознать песню! Убедитесь, что вы держите телефон близко к источнику звука.

Полагаю, меня сейчас закидают помидорами с криками "Да про Shazam все знают!" , и я даже не обижусь - ведь правда, про него знают многие! А для тех, кто еще не в курсе, зачем и для чего нужен Shazam, и предназначена эта статья. Ну и для любителей почитать хороший текст и узнать что-то новое =)

Зачем и для чего нужен Shazam?

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

Как он работает?

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

Что он может?

Возможности приложения достаточно велики. Верхушка айсберга - узнавание песен и последующее хранение их в категории My Tags . Сортировка происходит по дате, в списке отображается название исполнителя, трека, дата записи и обложка (если есть в наличии в базе Shazam).

Тапнув по распознанной песне, попадем на весьма обширную страницу, позволяющую:

Shazam также умеет привязаться к учетной записи в Facebook, формируя таким образом Friends List - список, в которых попадают узнанные вами и вашими друзьями по социальной сети песни.

Последний раздел, часто игнорируемый пользователями (и напрасно), называется Discover и позволяет осуществить поиск по аудиобазе Shazam, смотреть мировой и европейский чарты, а также читать блог сервиса.

Настройки программы очень интуитивны и просты. Теоретически, вы можете так никогда и не зайти в этот раздел.

Возможные способы применения

За уже более чем год использования у меня сформировалось несколько сценариев использования программы:

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

Напоследок

Shazam действительно здорово узнает песни даже тогда, когда многочисленные посторонние звуки вторгаются в запись. Но стоит обратить внимание на тот факт, что с русскоязычным репертуаром она либо знакома очень плохо, либо незнакома вообще. Использовать его можно даже без подключения к интернету - записанный фрагмент можно будет распознать позднее. Последний мой аргумент в пользу Shazam - он бесплатен (но с рекламным баннером). Эта крайне полезная утилита заняла у меня на iPhone почетное место на первом экране, и я нисколько об этом не жалею.

Пользуйтесь на здоровье!

P.S. Есть еще платные версии: Shazam Encore (LyricPlay, музыкальные рекомендации, поддержка last.fm и Pandora) и Shazam Red (помогаем бороться вирусом имунного дефицита в Африке)

Shazam

Цена: free
Разработчик: Shazam Entertainment Ltd
Обозреваемая версия: 4.7.4
Оценка редакции: ★★★★★

Shazam Encore

Цена: 5,99$
Разработчик: Shazam Entertainment Ltd
Обозреваемая версия: 4.7.5
Оценка редакции: ★★★★★

Shazam for iPad

Цена: free
Разработчик: Shazam Entertainment Ltd
Обозреваемая версия: 2.5.0
Оценка редакции: ★★★★★

  • Перевод

В ресторане заиграла почти забытая песня. Вы слушали её в далёком прошлом. Сколько трогательных воспоминаний способны вызвать аккорды и слова… Вы отчаянно хотите послушать эту песню снова, но вот её название напрочь вылетело из головы! Как быть? К счастью, в нашем фантастическом высокотехнологичном мире есть ответ на этот вопрос.

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

Широкому использованию частоты дискретизации в 44100 Гц мы обязаны, преимущественно, корпорации Sony. В своё время звуковые дорожки, закодированные таким способом, удобно было совмещать с видео в стандартах PAL (25 кадров в секунду) и NTSC (30 кадров в секунду), работать с ними, используя существующее оборудование. Весьма важно и то, что эта частота достаточна для качественной передачи звука в диапазоне до 20000 Гц. Цифровое звуковое оборудование, использующее эту частоту дискретизации, вполне соответствовало по качеству аналоговому оборудованию тех времён, когда происходило становление стандартов цифрового звука. В итоге, выбирая частоту дискретизации звука при записи, вы, вероятнее всего, остановитесь на 44100 Гц.

Запись: захват звука

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

Private AudioFormat getFormat() { float sampleRate = 44100; int sampleSizeInBits = 16; int channels = 1; //Монофонический звук boolean signed = true; //Флаг указывает на то, используются ли числа со знаком или без boolean bigEndian = true; //Флаг указывает на то, следует ли использовать обратный (big-endian) или прямой (little-endian) порядок байтов return new AudioFormat(sampleRate, sampleSizeInBits, channels, signed, bigEndian); } final AudioFormat format = getFormat(); //Заполнить объект класса AudioFormat параметрами DataLine.Info info = new DataLine.Info(TargetDataLine.class, format); final TargetDataLine line = (TargetDataLine) AudioSystem.getLine(info); line.open(format); line.start();
Теперь достаточно прочесть данные из объекта класса TargetDataLine . В примере используется флаг running , это глобальная переменная, на которую возможно воздействие из другого потока. Например, подобная переменная позволит нам остановить захват звука из потока пользовательского интерфейса с помощью кнопки «Стоп».

OutputStream out = new ByteArrayOutputStream(); running = true; try { while (running) { int count = line.read(buffer, 0, buffer.length); if (count > 0) { out.write(buffer, 0, count); } } out.close(); } catch (IOException e) { System.err.println("I/O problems: " + e); System.exit(-1); }

Временная и частотная области

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

В 19 веке Жан Батист Джозеф Фурье сделал выдающееся открытие. Заключается оно в том, что любой сигнал во временной области эквивалентен сумме некоторого количества (возможно, бесконечного) простых синусоидальных сигналов, при условии, что каждая синусоида имеет определённую частоту, амплитуду и фазу. Набор синусоид, которые формируют исходный сигнал, называют рядом Фурье .

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


Сигналы, развёрнутые во времени, и их частотные характеристики

Вот как выглядит анимированное представление Ряда Фурье для прямоугольной волны частотой 1 Гц. Здесь же показана аппроксимация исходного сигнала на основе набора синусоид. На верхнем графике сигнал показан в амплитудно-временной области, на нижнем дано его представление в амплитудно-частотном виде.


Преобразование Фурье в действии. Источник: Rene Schwarz

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

Дискретное преобразование Фурье

Итак, нужно найти способ получения частотных характеристик сигналов, развёрнутых во времени. В этом нам поможет дискретное преобразование Фурье (ДПФ, DFT, Discrete Fourier Transform). ДПФ – это математический метод анализа Фурье для дискретных сигналов. С его помощью можно преобразовать конечный набор образцов сигнала, взятых с равными промежутками времени, в список коэффициентов конечной комбинации комплексных синусоид, упорядоченных по частоте, принимая во внимание, что эти синусоиды были дисретизированы с одной и той же частотой.

Один из самых популярных численных алгоритмов для вычисления ДПФ называется быстрое преобразование Фурье (БПФ, FFT, Fast Fourier Transformation). На самом деле, БПФ представлен целым набором алгоритмов. Среди них чаще всего используются варианты алгоритма Кули-Тьюки (Cooley-Tukey). В основе этого алгоритма лежит принцип «разделяй и властвуй». В ходе вычислений используется рекурсивное разложение исходного ДПФ на мелкие части. Прямое вычисление ДПФ для некоторого набора данных n требует O(n 2) операций, а использование алгоритма Кули-Тьюки позволяет решить ту же задачу за O(n log n) операций.

Несложно найти подходящую библиотеку, реализующую алгоритм БПФ. Вот несколько таких библиотек для разных языков:

Public static Complex fft(Complex x) { int N = x.length; // fft чётных элементов Complex even = new Complex; for (int k = 0; k < N / 2; k++) { even[k] = x; } Complex q = fft(even); // fft нечетных элементов Complex odd = even; // повторное использование массива for (int k = 0; k < N / 2; k++) { odd[k] = x; } Complex r = fft(odd); // комбинируем Complex y = new Complex[N]; for (int k = 0; k < N / 2; k++) { double kth = -2 * k * Math.PI / N; Complex wk = new Complex(Math.cos(kth), Math.sin(kth)); y[k] = q[k].plus(wk.times(r[k])); y = q[k].minus(wk.times(r[k])); } return y; }
Вот пример сигнала до и после БПФ-анализа.


Сигнал до и после БПФ-анализа

Распознавание музыки: сигнатуры песен

Один из неприятных побочных эффектов БПФ заключается в том, что проведя анализ, мы теряем информацию о времени. (Хотя, теоретически, подобного можно избежать, но на практике для этого понадобится огромная вычислительная мощность.) Например, для трёхминутной песни мы можем видеть звуковые частоты и их амплитуды, но вот где именно в произведении эти частоты встречаются, не знаем. А это – важнейшая характеристика, которая делает музыкальное произведение тем, что оно есть! Нам нужно как-то узнать точные значения времени, когда появляется каждая из частот.

Именно поэтому мы будем пользоваться чем-то вроде скользящего окна, или блока данных, и подвергать трансформации лишь ту часть сигнала, которая в это «окно» попадает. Размер каждого блока можно определить с использованием различных подходов. Например, если мы записываем двухканальный звук с размером образца равным 16 бит и с частотой дискретизации 44100 Гц, одна секунда такого звука займёт 176 Кб памяти (44100 образцов * 2 байта * 2 канала). Если мы установим размер скользящего окна, равный 4 Кб, то каждую секунду нам нужно будет проанализировать 44 блока данных. Это – довольно высокое разрешение для детального анализа композиции.

Вернёмся к программированию.

Byte audio = out.toByteArray() int totalSize = audio.length int sampledChunkSize = totalSize/chunkSize; Complex result = ComplexMatrix; for(int j = 0;i < sampledChunkSize; j++) { Complex complexArray; for(int i = 0; i < chunkSize; i++) { complexArray[i] = Complex(audio[(j*chunkSize)+i], 0); } result[j] = FFT.fft(complexArray); }
Во внутреннем цикле мы помещаем данные из временной области (образцы звука) в комплексные числа с мнимой частью равной 0. Во внешнем цикле проходим по всем блокам данных и для каждого из них запускаем БПФ-анализ.

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

Однако, в одной песне диапазон «сильных» частот может варьироваться, скажем, от ноты «до» контроктавы (32,70 Гц), до ноты «до» пятой октавы (4186,01 Гц). Это – огромный интервал. Поэтому, вместо того, чтобы за сразу проанализировать весь частотный диапазон, мы можем выбрать несколько более мелких интервалов. Выбор можно сделать, основываясь на частотах, которые обычно присущи важным музыкальным компонентам, и проанализировать их по отдельности. Например, можно воспользоваться интервалами, которые вот этот программист использовал для своей реализации алгоритма Shazam. А именно, это 30 Гц – 40 Гц, 40 Гц – 80 Гц и 80 Гц – 120 Гц для низких звуков (сюда попадает, например, бас-гитара). Для средних и более высоких звуков применяются частоты 120 Гц – 180 Гц и 180 Гц – 300 Гц (сюда входит вокал и большинство других инструментов).

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

Public final int RANGE = new int { 40, 80, 120, 180, 300 }; // Функция для определения того, в каком диапазоне находится частота public int getIndex(int freq) { int i = 0; while (RANGE[i] < freq) i++; return i; } // Результат – это комплексная матрица, полученная на предыдущем шаге for (int t = 0; t < result.length; t++) { for (int freq = 40; freq < 300 ; freq++) { // Получим силу сигнала: double mag = Math.log(results[t].abs() + 1); // Выясним, в каком мы диапазоне: int index = getIndex(freq); // Сохраним самое высокое значение силы сигнала и соответствующую частоту: if (mag > highscores[t]) { points[t] = freq; } } // сформируем хэш-тег long h = hash(points[t], points[t], points[t], points[t]); } private static final int FUZ_FACTOR = 2; private long hash(long p1, long p2, long p3, long p4) { return (p4 - (p4 % FUZ_FACTOR)) * 100000000 + (p3 - (p3 % FUZ_FACTOR)) * 100000 + (p2 - (p2 % FUZ_FACTOR)) * 100 + (p1 - (p1 % FUZ_FACTOR)); }
Заметьте, что мы должны учитывать то, что запись выполнена не в идеальных условиях (то есть, не в звукоизолированном помещении). Как результат, надо предусмотреть наличие в записи посторонних шумов и возможное искажение записываемого звука, зависящее от характеристик помещения. К этому вопросу стоит подойти очень серьёзно, в реальных системах стоит реализовать настройку анализа возможных искажений и посторонних звуков (fuzz factor) в зависимости от условий, в которых проводится запись.

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

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

Поиск совпадений

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

Но не всё так просто. Дело в том, что у многих фрагментов различных произведений хэш-тэги совпадают. Например, может оказаться так, что какой-то фрагмент песни A звучит точно так же, как некий участок песни E. И тут нет ничего удивительного. Музыканты и композиторы постоянно «заимствуют» друг у друга удачные музыкальные фигуры.

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

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

Однако если найдено несколько совпадений, можно проанализировать относительный тайминг совпадений, и, таким образом, повысить достоверность поиска.

Например, если взглянуть в вышеприведенную таблицу, можно обнаружить, что хэш-тег 30 51 99 121 195 относится и к песне A, и к песне E. Если секундой спустя мы будем проверять хэш-тег 34 57 95 111 200, то обнаружим ещё одно совпадение с песней A, к тому же, в подобном случаем мы будем знать о том, что совпадают и хэш-теги и их распределение во времени.

// Класс, который описывает конкретный момент в произведении private class DataPoint { private int time; private int songId; public DataPoint(int songId, int time) { this.songId = songId; this.time = time; } public int getTime() { return time; } public int getSongId() { return songId; } }
Пусть i1 и i2 – это отметки времени в записанной песне, j1 и j2 – отметки времени в песне из базы данных. Мы можем говорить о том, что имеются два совпадения, с учётом совпадения разницы во времени, если выполняется следующее условие:

RecordedHash(i1) = SongInDBHash(j1) AND RecordedHash(i2) = SongInDBHash(j2) AND abs(i1 - i2) = abs (j1 - j2)
Это даёт возможность не заботиться о том, на какую именно часть песни приходится запись: на начало, середину, или на самый конец.

И, наконец, маловероятно, что каждый обработанный фрагмент записанной в «диких» условиях песни совпадёт с аналогичным фрагментом из базы данных, построенной на основе студийных записей. Запись, на основе которой мы хотим найти название произведения, будет включать в себя много шума, что приведёт к неким расхождениям при сравнении. Поэтому, вместо того, чтобы пытаться исключить из списка совпадений всё, кроме единственной верной композиции, в конце процедуры сопоставления с базой данных мы отсортируем записи, в которых нашлись совпадения. Сортировать будем в убывающем порядке. Чем больше совпадений – тем вероятнее то, что мы нашли нужную композицию. Соответственно, она окажется на вершине списка.

Вот обзор всей процедуры распознавания музыкальных композиций. Пройдёмся по нему от начала до конца.


Обзор процедуры распознавания музыки

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

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

Shazam!

Программы, подобные той, о которой мы здесь говорили, подходят для поиска схожих мест в музыкальных произведениях. Теперь, когда вы понимаете, как работает Shazam, вы можете увидеть, что алгоритмы распознавания музыки применимы не только в роли «напоминалок» названий забытых песен из прошлого, звучащих по радио в такси.

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

Возможно, хорошим экспериментом станет заполнение базы данных классикой – сочинениями Баха, Бетховена, Вивальди, Вагнера, Шопена и Моцарта и поиск схожего в их работах. Так вполне можно выяснить, что даже Боб Дилан, Элвис Пресли и Роберт Джонсон не прочь были что-нибудь позаимствовать у других!

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

О, а приходите к нам работать? :)

Shazam – приложение, попадающее во все списки «самых необходимых» программ для вашего смартфона. Интересный карманный меломан, помогающий вам определить любую играющую рядом песню. При этом попадания «Шазама» оказываются не просто стопроцентными, они вообще исчерпывающие – настолько, что он легко определит, оригинальная ли перед вами песня, лайв запись или, как пример, один из новых ремастеров. Приложение уже давно доступно на трех главных мобильных платформах и на самом деле пытается стать чем-то большим, чем сервисом по поиску музыки. О том, как пользоваться Shazam и том, во что может превратиться это приложение – эта статья.

Как пользоваться на компьютере

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

Первый способ – это установка Shazam на Windows 10 . Делается это очень просто. Сначала тыкаем по кнопке «пуск », и находим там вот такую иконочку:

После перехода по ссылке мы перейдем в магазин приложений для Windows. Выглядит он примерно следующим образом:

Здесь нас интересует конкретное приложение Shazam . Вот так оно выглядит в магазине Windows:

После этого жмем по «Install » (или «установить приложение » в русской версии) и ждем – приложение скачается и установится на компьютер. В Windows 10 уже встроен специальный эмулятор, позволяющий запускать мобильные приложения с WindowsPhone без особых проблем. Правда самих приложений там не очень много.

Shazam на Windows состоит из четырех «Экранов». И, в кратце, выглядит вот так.

Теперь давайте разберем второй способ установки. Он будет чуть сложнее, но всем тем, кто не пользуется Windows 10, иначе установить программу нельзя.

  1. Скачиваем программу Bluestacks с официального сайта. Это качественный Android-эмулятор для компьютера.
  2. После установки программы заходим в GooglePlay и находим Shazam там.
  3. Устанавливаем Shazam
  4. Пользуемся.

Метод простой, но, как видите, требует дополнительной установки эмулятора для Android, в то время как Windows 10 запускает приложения с Windows Phone как бы «внутри» системы. Однако большой разницы в работе приложения не будет при обоих методах установки.

Использование на смартфоне и функционал

Проблем с установкой шазама на смартфоне не будет, достаточно лишь найти его в AppStore или GooglePlay , так что давайте сразу разберем весь функционал приложения на примере Android-версии Shazam.

Кнопка «Шазамить » здесь отвечает за старт процесса распознавания музыки. А значит, в тот момент, когда вы слышите где-то рядом песню, которая вам понравилась – жмем «шазамить » и ждем несколько секунд, пока программа распознает играющий трек.

Обратите внимание – в верхней части экрана, по центру, есть три точки – это переключение между тремя «экранами» приложения. Распознанные песни сохраняются в левом меню.

В качестве примера я включил радио и «шазамнул» играющую там песню. К большому сожалению, это оказался Егор Крид.

Как видите – Shazam сразу же предлагает приобрести песню в GooglePlay. В сложившейся ситуации делать это я, конечно же, не стану.

Так выглядит третий из экранов Shazam. Здесь нам предлагают посмотреть подобранную специально для нас библиотеку видеоклипов . Подборка происходит исходя из «шазамнутых» нами песен и отмеченных в специальном меню любимых исполнителей. Сложно сказать, насколько качественно и точно подбирает музыку приложение – лично я для этого использую «Яндекс.музыку». Но само начинание разработчиков похвально – еще недавно такой функции не было.

В разные моменты Шазам выглядел по-разному. Когда-то он был простым приложением для распознавания музыки, потом пытался стать глобальной чарт-библиотекой, а сейчас – полноценным сервисом для расширения своего музыкального кругозора. Одно у него не отнять точно – это самая популярная программа для поиска понравившегося трека здесь и сейчас.