跳到主要内容

使用Echo Nest构建OpenEMI音乐应用程序

这篇文章首次出现在问题233.net杂志 - 世界上最畅销的网页设计师和开发者杂志。

去年11月,EMI Music与音乐智能平台The Echo Nest合作,为开发人员提供了一系列与音乐相关的资产。包括来自知名艺术家,如Gorillaz,Pet Shop Boys,Tinie Tempah,Green教授等众多知名艺术家的资料。此合作代表了以这种方式提供的最广泛的许可音乐,视频和图像集合。

Echo Nest提供了一个出色的开发人员API,不仅可以提供资产,还可以分析音轨并提供有关它们的详细元数据。如果你喜欢音乐,那么Echo Nest API有一些很棒的工具来构建mashup和应用程序。

入门

您需要做出的第一个决定是在您的应用中使用哪些巨大的资产宝库。资产被组织成“沙箱”:按艺术家,标签或流派分组的个人收藏。您可以通过以下方式获得沙箱内容的概述浏览可用的- 这些包括Blue Note标签的爵士乐,电子音乐回顾展和Robbie Williams的背面目录,因此涵盖了不少基础!

Many of the available sandboxes in this project have a developer pack that includes a detailed manifest of the available assets

此项目中的许多可用沙箱都有一个开发人员包,其中包含可用资产的详细清单

要获得访问权限,您需要注册Echo Nest开发人员计划。当您注册后,登录并转到沙箱标签。单击任何可能需要您考虑的沙箱,然后阅读并同意这些条款,然后按“注册”按钮。您可能需要等待一段时间,但是当您的沙盒访问权限获得批准后,您将收到电子邮件通知,然后您就可以开始使用该API。

客户端库

API使用JSON或XML响应响应HTTP请求。有许多可用的Echo Nest客户端库可以为您构建API请求。你会发现很多下载页面。需要注意的是,并非所有列出的库都实现了Sandbox API。在本教程中,我们将使用PHP,使用Brent Shaffer的客户端,其中包括Sandbox方法。代码托管在GitHub上;如果您安装了Git,则可以使用以下命令克隆存储库:

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

如果您还没有使用Git,请从同一GitHub URL上的zip链接下载。 PHP客户端库依赖于cURL支持,因此您需要使用它编译PHP安装。您还需要在本地L / M / WAMP设置中运行下面的代码示例。

使用API

在开发服务器上创建一个新的项目文件夹,然后Git将存储库克隆到其中。如果您已下载zip,请将其解压缩到您的项目并重命名PHP-echonest-API

要使用API进行身份验证,您需要从Echo Nest开发者帐户获取以下信息:API密钥,使用者密钥和共享密钥。所有这些都可以在您的帐户页面上找到Echo Nest开发人员中心

The Blue Note app, developed by Groovebug as part of the OpenEMI initiative, has been described by EMI’s Neil Tinegate as a “living digital box set”

作为OpenEMI计划的一部分,由Groovebug开发的Blue Note应用程序被EMI的Neil Tinegate描述为“活的数字盒装”

您还需要知道您可以访问的沙箱的名称。这是在沙箱您的开发者帐户的标签,位于中间列。作为一个例子,Gorillaz沙箱有一个关键Emi_gorillaz

Sandbox API有两种不同的方法:沙盒/名单沙盒/访问。该沙盒/名单Method返回分页的资产列表,不需要任何特殊身份验证(除了您的API密钥和已批准的沙盒访问权限)。但是,沙盒/访问需要使用OAuth进行其他身份验证。

以下是如何实例化Sandbox API并对其进行身份验证:

 authenticate(API_KEY); $ echonest-> setOAuthCredentials(CONSUMER_KEY,SHARED_SECRET); $ sandbox = $ echonest-> getSandboxApi(array(“sandbox”=> SANDBOX_KEY));?>

现在$沙箱Variable是API的经过身份验证的实例,您可以像下面这样获取沙箱内容的列表:

的GetList();后续代码var_dump($资产);?>

一个回应的GetList()Call是一个PHP关联数组,具有以下键:状态(有关请求的一系列信息),开始(返回的第一个资产的索引),(沙箱中的资产数量)和资产(一系列资产描述)。该资产关键点指向子数组,每个项目描述可用资产。典型资产如下所示:

数组([echonest_ids] =>数组([0] =>数组([foreign_id] => emi_artists:track:EMIDD0779716 [id] => TRGHIRC1334BAE7AD6))[title] =>吐出恶魔[filename] => emi_gorillaz / EMIDD0779716.mp3 [release] => D-Sides(特别版)[type] => audio [id] => 6aff61700721ca5b9262a06ef8cea717)

没有参数,的GetList()每次通话最多可返回15个资产,从第一个开始。您可以传递一系列选项的GetList()并修改默认行为,如下所示:

 100,“开始”=> 100); $ assets = $ sandbox-> getList($ options);后续代码var_dump($资产);?>

如果沙箱中有足够的资产,之前的请求将从100日开始返回100个资产。如果没有足够的(或者根本没有),那么你最终会得到一个较小或空的资产数组。

检索资产

所以,现在你有一些资产可以使用,你如何掌握它们?这里,沙盒/访问是要使用的方法,它接受一个参数:唯一的资产ID。许多资产只有一个简单的ID,但音频资产也可以Echonest_ids将资产与更广泛的Echo Nest API中的轨道相关联,并通过Project Rosetta Stone命名空间提供与其他沙箱的互操作性;在线阅读更多相关内容。

The Echo Nest platform provides enterprise services ranging from a cloud music solution to a suite of data-mining tools, or 'fanalytics'

Echo Nest平台提供从云音乐解决方案到一套数据挖掘工具或“粉丝分析”的企业服务

所以,拿走吐出恶魔上面的资产,我们使用以下代码访问它:

址( “6aff61700721ca5b9262a06ef8cea717”);后续代码var_dump($资产);?>

此请求的响应是一个关联数组,其组织方式与调用相同的GetList()除了资产中的项目仅使用URL和ID键之外,URL是感兴趣的URL,因为它是实际资产文件的链接。资产链接带有时间戳,因此在到期后无法缓存或使用。

索引沙箱

虽然Sandbox API使我们能够使用结果开始的参数的GetList()它不提供任何搜索特定项目的工具。如果要查找特定资产,则必须重复进行的GetList()直到你找到它为止 - 这是不方便,缓慢,并会吞噬你的API津贴。当然,采取的方法是创建自己的库存并对其进行缓存,以便以后可以参考。

你可以通过很多方法来实现这一目标,但最简单的方法可能是存储你的方法的GetList()结果在数据库中。在创建新数据库之后,您需要循环的GetList()呼叫,在沙箱中进行分页并随时存储结果。在下面的示例中,我正在使用现有的MySQL连接,数据库和资产表:

 getList(array(“results”=> 100,“start”=> $ page * 100)); foreach($ list [“assets”] as $ asset){if(!empty($ asset [“echonest_ids”])){$ track_id = $ asset [“echonest_ids”] [0] [“id”]; } else {$ track_id =“”; } if(!empty($ asset ['title'])){$ title = mysql_real_escape_string($ asset ['title']); } else {$ title =“Untitled”; } $ 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)或die(mysql_error()); if($ success === true){$ num_assets + = 1; $ page + = 1; } while(!empty($ list [“assets”])); echo“完成。检索$ num_assets资产。”;?>

一切顺利,您应该拥有一个完整的资产表,您可以根据文件名,资产类型,标题或Echo Nest ID进行查询。拥有像这样的可搜索索引是构建自己的应用程序的基石。

This is what your sandbox assets will look like when they are indexed in a database. This is a really useful way of keeping track of the things you’re using

这是沙盒资产在数据库中编入索引时的样子。这是跟踪您正在使用的东西的一种非常有用的方法

跟踪资产

如前所述,Echo Nest API可以分析音频并对其进行详细描述。 Echo Nest Analyzer被描述为世界上唯一的“监听”API:它使用机器监听技术来模拟人们如何看待音乐。

当您使用Sandbox API音频资产时,大多数使用的方法是歌曲/搜索(Song API的一部分),播放列表/静态(来自播放列表API)和曲目/配置文件(Track API的一部分)。歌曲和曲目在概念上是分开的:歌曲API返回广泛的唱片信息,其中Track API处理特定的音频数据和分析。

通过歌曲/搜索方法,您可以按标题或艺术家查询Echo Nest数据库中的歌曲,还可以查询符合您可能具有的任何听力标准的歌曲,包括“舞蹈”,“能量”或“情绪”等类别。

将Song API与沙盒一起使用通常涉及如下代码:

 getSongApi(); $ params = array(“bucket”=> array(“id:emi_artists”,“tracks”),“artist”=>“Gorillaz”,“limit”=> true,“min_danceability”=> 0.5); $ results = $ song_api-> search($ params);后续代码var_dump($结果);?>

上面调用中的关键参数是限制。您之前创建的沙箱索引将包含轨道ID,而不是其中的歌曲ID,因此您需要指示Song API返回轨道ID。您可以通过传递两个元素数组来完成此操作含有轨道和Rosetta命名空间。

您使用的命名空间取决于您有权访问的沙箱。例如,如果你正在使用Bluenote沙箱,你会使用ID:emi_bluenote这里。 (您可以在以下位置查看在线文档中的Project Rosetta Stone条目开发中心有关这方面的进一步信息。)

Here’s an example of an app made by using the Gorillaz sandbox. Take a closer look at here

这是使用Gorillaz沙箱制作的应用程序示例。仔细看看这里

您还需要确保结果仅限于命名空间,因此也将true传递给limit参数。例如,有大量的轨道配置文件参数可供使用Min_danceability正如我在这里使用的那样。再次,请参阅整个shebang的文档。

从歌曲/搜索请求返回的每个结果将包含一个列出轨道ID的轨道子阵列。使用这些ID匹配Track_id在索引数据库中。通过这种方式,您可以搜索歌曲,在索引中查找曲目ID,然后使用唯一资源ID检索资产:播放列表/静态可与歌曲/搜索互换,但返回的歌曲是随机和非重复的。

通过接受轨道ID并且不仅返回高级信息,而且还返回整个轨道的逐拍分析的URL,轨道/简档方法反向工作。这些完整的分析非常详细,并被用作一些令人印象深刻的Echo Nest黑客的基础。

示例应用

我已经整理了一个采用上述所有方法的示例应用程序。它使用Gorillaz沙箱,但欢迎您下载它,然后使用您自己的密钥配置它,如果您想尝试不同的沙箱。

您需要一个亚马逊产品广告API开发者帐户,因为它从那里吸收艺术品。为了好玩,我使用three.js(WebGL库)可视化数据 - 目前它只与谷歌浏览器兼容。

这个怎么运作

首先,应用程序为其中的Gorillaz轨道进行播放列表/静态调用Id:emi_ Artists命名空间。然后,它针对Amazon API和iTunes Search API进行标题搜索,并尝试查找每个Echo Nest歌曲的专辑插图。

加载数据时,我使用three.js制作3D轮播。当点击旋转木马项目时,应用程序查找轨道在本地索引中,然后进行两次调用 - 第一次跟踪/分析高级音频分析(舞蹈,能量,语音和节奏),然后显示为简单的3D条形图。

最后,我们调用sandbox / Access来下载相关的mp3并播放它。您可以预览应用程序从GitHub获取源代码

发现15个惊人的例子CSS3动画在我们的姐妹网站Creative Bloq。



翻译字数超限