Создайте музыкальное приложение OpenEMI с помощью Echo Nest

Автор: John Stephens
Дата создания: 28 Январь 2021
Дата обновления: 19 Май 2024
Anonim
Создайте музыкальное приложение OpenEMI с помощью Echo Nest - Творческий
Создайте музыкальное приложение OpenEMI с помощью Echo Nest - Творческий

Содержание

Эта статья впервые появилась в 233-м номере журнала .net - самого продаваемого журнала для веб-дизайнеров и разработчиков.

В ноябре прошлого года EMI Music объединилась с платформой музыкального интеллекта The Echo Nest, чтобы предоставить разработчикам доступ к невероятной коллекции связанных с музыкой активов. Включая материалы от известных и любимых артистов, таких как Gorillaz, Pet Shop Boys, Tinie Tempah, Professor Green и многих других. Это сотрудничество представляет собой самую обширную коллекцию лицензированной музыки, видео и изображений, которая когда-либо была доступна таким образом.

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

Начиная

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


Чтобы получить доступ, вам необходимо зарегистрироваться в программе для разработчиков Echo Nest. После регистрации войдите в систему и перейдите в Песочницы таб. Щелкните любую песочницу, которая может вам понравиться, затем прочтите и примите условия, а затем нажмите кнопку «Зарегистрироваться». Возможно, вам придется немного подождать, но вы получите уведомление по электронной почте, когда ваш доступ к песочнице будет одобрен, и тогда вы сможете начать использовать API.

Клиентские библиотеки

API отвечает на HTTP-запросы с помощью ответов JSON или XML. Доступно множество клиентских библиотек Echo Nest, которые будут создавать для вас запросы API. Вы найдете много на странице загрузок. Следует обратить внимание на то, что не все перечисленные библиотеки реализовали API-интерфейс Sandbox. В этом руководстве мы собираемся использовать PHP с вилкой клиента Брента Шаффера, который включает методы Sandbox. Код размещен на GitHub; если у вас установлен Git, вы можете клонировать репозиторий с помощью:


git clone github.com/theflyingbrush/php-echonest-api.git

Если у вас еще нет Git, загрузите его по zip-ссылке на том же URL-адресе GitHub. Клиентская библиотека PHP зависит от поддержки cURL, поэтому вам потребуется, чтобы ваша установка PHP была скомпилирована с ней. Вы также захотите запустить приведенные ниже примеры кода в вашей локальной установке L / M / WAMP.

Использование API

Создайте новую папку проекта на своем сервере разработки и Git клонируйте в нее репозиторий. Если вы скачали zip-архив, разархивируйте его в свой проект и переименуйте. php-echonest-api.

Для аутентификации с помощью API вам потребуются следующие данные из вашей учетной записи разработчика Echo Nest: ваш ключ API, ключ потребителя и общий секрет. Все это можно найти на странице вашей учетной записи в центре разработчиков Echo Nest.


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

Sandbox API имеет два разных метода: песочница / список а также песочница / доступ. В песочница / список Метод возвращает разбитый на страницы список ресурсов и не требует специальной аутентификации (кроме вашего ключа API и разрешенного доступа к песочнице). Однако песочница / доступ требует дополнительной аутентификации с помощью OAuth.

Вот как создать экземпляр API песочницы и аутентифицировать его:

? php require ("php-echonest-api / lib / EchoNest / Autoloader.php"); EchoNest_Autoloader :: register (); define ("API_KEY", "{ВАШ КЛЮЧ API}"); define ("SANDBOX_KEY", "{ВАШ SANDBOX KEY}"); define ("CONSUMER_KEY", "{ВАШ КЛЮЧ ПОТРЕБИТЕЛЯ}"); define ("SHARED_SECRET", "{ВАША ОБЩАЯ СЕКРЕТНОСТЬ}"); $ echonest = новый EchoNest_Client (); $ echonest-> аутентифицировать (API_KEY); $ echonest-> setOAuthCredentials (CONSUMER_KEY, SHARED_SECRET); $ sandbox = $ echonest-> getSandboxApi (array ("sandbox" => SANDBOX_KEY));?>

Теперь $ песочница переменная является аутентифицированным экземпляром API, и вы можете получить список содержимого песочницы следующим образом:

? php $ assets = $ sandbox-> getList (); var_dump ($ активы);?>

Ответ от getList () call - это ассоциативный массив PHP со следующими ключами: статус (массив информации о запросе), Начало (индекс первого возвращенного актива), общее (количество ресурсов в песочнице) и ресурсы (массив описаний активов). В ресурсы ключевые точки к подмассиву, каждый элемент описывает доступный актив. Типичный актив выглядит так:

Массив ([echonest_ids] => Массив ([0] => Массив ([foreign_id] => emi_artists: track: EMIDD0779716 [id] => TRGHIRC1334BAE7AD6)) [title] => Spitting Out The Demons [filename] => emi_gorillaz / EMIDD0779716.mp3 [release] => D-Sides (Special Edition) [type] => audio [id] => 6aff61700721ca5b9262a06ef8cea717)

Без параметров, getList () вернет до 15 активов за звонок, начиная с первого. Вы можете передать массив параметров в getList () и измените поведение по умолчанию, которое выглядит следующим образом:

? php $ options = array ("results" => 100, "start" => 100); $ assets = $ sandbox-> getList ($ options); var_dump ($ активы);?>

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

Получение активов

Итак, теперь у вас есть активы, с которыми можно работать, как их получить? Здесь, песочница / доступ - это метод, который следует использовать, и он принимает один параметр: уникальный идентификатор актива. Многие ресурсы имеют только один простой идентификатор, но аудиоресурсы также могут иметь echonest_ids которые связывают ресурсы с треками в более широком API Echo Nest и обеспечивают взаимодействие с другими песочницами через пространство имен Project Rosetta Stone; подробнее об этом читайте в документации в Интернете.

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

? php $ asset = $ sandbox-> access ("6aff61700721ca5b9262a06ef8cea717"); var_dump ($ asset);?>

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

Индексирование песочницы

Хотя API песочницы позволяет нам пролистывать ресурсы, используя полученные результаты а также Начало параметры getList () он не предоставляет никаких средств для поиска определенных предметов. Если вы хотите найти конкретный актив, вам придется повторить getList () звонит, пока вы его не найдете - что неудобно, медленно и сожрет ваше разрешение API. Разумеется, лучше всего создать свой собственный инвентарь и кэшировать его, чтобы вы могли обратиться к нему позже.

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

? php $ page = 0; $ num_assets = 0; сделать {$ list = $ sandbox-> getList (array ("results" => 100, "start" => $ page * 100)); foreach ($ list ["assets"] as $ asset) {if (! empty ($ asset ["echonest_ids"])) {$ track_id = $ asset ["echonest_ids"] [0] ["id"]; } еще {$ track_id = ""; } если (! пусто ($ asset [’title’])) {$ title = mysql_real_escape_string ($ asset [’title’]); } else {$ title = "Без названия"; } $ sandbox_id = $ asset [’id’]; $ type = $ asset [’type’]; $ filename = $ asset [’filename’]; $ query = "INSERT INTO’ assets ’SET’ title ’=’ ". $ title. "’, ’Sandbox_id’ = ’". $ sandbox_id. "’, ’Type’ = ’". $ type. "’, ’Filename’ = ’". $ filename. "’, ’Track_id’ = ’". $ track_id. "’ "; $ success = mysql_query ($ query) или умереть (mysql_error ()); если ($ success === true) {$ num_assets + = 1; }} $ page + = 1; } пока (! пусто ($ list ["активы"])); echo "Завершено. Получены ресурсы $ num_assets.";?>

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

Профилирование объектов отслеживания

Как упоминалось ранее, Echo Nest API может анализировать аудио и подробно описывать его. Echo Nest Analyzer описывается как единственный в мире «слушающий» API: он использует методы машинного прослушивания для моделирования того, как люди воспринимают музыку.

Когда вы работаете с аудиоресурсами Sandbox API, наиболее часто используются следующие методы: песня / поиск (часть Song API), список воспроизведения / статический (из Playlist API) и трек / профиль (часть Track API). Песни и дорожки концептуально разделены: Song API возвращает широкую дискографическую информацию, а Track API имеет дело с конкретными аудиоданными и анализом.

Метод песни / поиска позволяет запрашивать в базе данных Echo Nest песни по названию или исполнителю, а также те, которые соответствуют любым критериям прослушивания, которые могут у вас быть, включая такие категории, как «танцевальность», «энергия» или «настроение».

Для использования Song API с песочницами обычно используется следующий код:

? php $ song_api = $ echonest-> getSongApi (); $ params = array ("bucket" => array ("id: emi_artists", "track"), "artist" => "Gorillaz", "limit" => true, "min_danceability" => 0,5); $ results = $ song_api-> поиск ($ params); var_dump ($ results);?>

Критические параметры в приведенном выше вызове: ведро а также предел. Индекс песочницы, который вы создали ранее, будет содержать идентификаторы треков, а не песни, поэтому вам нужно указать Song API, чтобы он возвращал идентификаторы треков. Вы можете сделать это, передав двухэлементный массив в ведро, содержащий треки и пространство имен Rosetta.

Используемое пространство имен зависит от того, к какой песочнице у вас есть доступ. Так, например, если вы работаете с песочницей Bluenote, вы должны использовать id: emi_bluenote здесь. (Вы можете проверить запись Project Rosetta Stone в онлайн-документации в центре разработчиков для получения дополнительной информации по этому поводу.)

Вам также необходимо убедиться, что результаты ограничены пространством имен, поэтому также передайте значение true параметру limit. Например, можно использовать множество параметров профиля трека. min_danceability как я здесь использовал. Опять же, обратитесь к документации на весь пакет shebang.

Каждый результат, возвращаемый запросом песни / поиска, будет содержать подмассив треков, в котором перечислены идентификаторы треков. Используйте эти идентификаторы для соответствия track_id в вашей индексной базе данных. Таким образом, вы можете искать песню, искать идентификатор трека в своем индексе, а затем извлекать ресурс, используя уникальный идентификатор ресурса: playlist / static взаимозаменяем с песней / поиском, за исключением того, что возвращаемые песни являются случайными и не повторяются.

Метод дорожки / профиля работает в обратном порядке, принимая идентификатор дорожки и возвращая не только высокоуровневую информацию, но также URL-адрес последовательного анализа всей дорожки. Эти полные анализы невероятно подробны и были использованы в качестве основы для некоторых весьма впечатляющих хаков Echo Nest.

Пример приложения

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

Для этого вам понадобится учетная запись разработчика Amazon Product Advertising API, потому что он рисует оттуда произведения искусства. Ради интереса я визуализирую данные с помощью библиотеки WebGL three.js - и на данный момент она совместима только с Google Chrome.

Как это работает

Сначала приложение делает список воспроизведения / статический вызов треков Gorillaz в id: emi_ artist пространство имен. Затем он выполняет поиск по названию по API Amazon и API поиска iTunes и пытается найти обложку альбома для каждой песни Echo Nest.

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

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

Откройте для себя 15 потрясающих примеров анимации CSS3 на нашем дочернем сайте Creative Bloq.

Набирающие популярность
Шрифт дня: Берлин
Узнать

Шрифт дня: Берлин

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

Как нарисовать чешую

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

Анимированные эффекты CSS с запасными вариантами

Необходимые знания: Промежуточный C , базовый Java cript, продвинутый HTMLТребует: Приличный текстовый редактор, современный веб-браузерВремя проекта: Пока вы можете работать над этимФайл поддержкиЭта...