Vytvorte si hudobnú aplikáciu OpenEMI s Echo Nest

Autor: John Stephens
Dátum Stvorenia: 28 Január 2021
Dátum Aktualizácie: 19 Smieť 2024
Anonim
Vytvorte si hudobnú aplikáciu OpenEMI s Echo Nest - Tvorivé
Vytvorte si hudobnú aplikáciu OpenEMI s Echo Nest - Tvorivé

Obsah

Tento článok sa prvýkrát objavil v čísle 233 časopisu .net - najpredávanejšieho časopisu na svete pre webových dizajnérov a vývojárov.

Vlani v novembri sa spoločnosť EMI Music spojila s platformou hudobnej inteligencie The Echo Nest, aby vývojárom poskytla prístup k neuveriteľnej zbierke hudobných nástrojov. Vrátane materiálu od významných osobností a známych umelcov, ako sú Gorillaz, Pet Shop Boys, Tinie Tempah, Professor Green a mnohých ďalších. Táto spolupráca predstavuje najrozsiahlejšiu zbierku licencovanej hudby, videa a obrázkov, ktorá bola kedy týmto spôsobom sprístupnená.

Echo Nest poskytuje vynikajúce vývojárske rozhranie API, ktoré nielenže obslúži aktíva, ale dokáže tiež analyzovať zvukové stopy a poskytnúť o nich podrobné metadáta. Ak máte radi hudbu, rozhranie Echo Nest API má niekoľko úžasných nástrojov, pomocou ktorých môžete vytvárať mashupy a aplikácie.

Začíname

Prvé rozhodnutie, ktoré budete musieť urobiť, je nad tým, ktorý z obrovských pokladov majetku, ktorý chcete vo svojej aplikácii využiť. Diela sú usporiadané do karantén: jednotlivé zbierky zoskupené podľa umelcov, značiek alebo žánrov. Prehľad obsahu pieskoviska získate prehľadaním dostupných - od jazzu značky Blue Note až po retrospektívu elektronickej hudby a zadný katalóg Robbieho Williamsa, takže je zahrnutých niekoľko základov!


Ak chcete získať prístup, musíte sa prihlásiť do vývojárskeho programu Echo Nest. Po zaregistrovaní sa prihláste a prejdite na stránku Pieskoviská tab. Kliknite na ktorékoľvek z karantén, ktoré by vás mohli zaujímať, potom si prečítajte podmienky, vyjadrite s nimi súhlas a stlačte tlačidlo Registrovať sa. Možno budete musieť chvíľu počkať, ale po schválení vášho prístupu do karantény vám pošleme e-mailové upozornenie a potom môžete začať používať API.

Knižnice klientov

Rozhranie API reaguje na požiadavky HTTP pomocou odpovedí JSON alebo XML. Existuje veľa klientskych knižníc Echo Nest, ktoré za vás vytvoria požiadavky API. Veľa nájdete na stránke Súbory na stiahnutie. Jedna vec, ktorú treba sledovať, je, že nie všetky tam uvedené knižnice implementovali rozhranie Sandbox API. V tomto výučbe budeme používať PHP s vidličkou klienta Brenta Shaffera, ktorý obsahuje metódy Sandbox. Kód je hostený na GitHub; ak máte nainštalovaný Git, môžete klonovať úložisko pomocou:


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

Ak ešte nemáte Git, stiahnite si ho z zip odkazu na rovnakej URL GitHubu. Knižnica klientov PHP závisí od podpory cURL, takže budete potrebovať, aby bola vaša inštalácia PHP s ňou kompilovaná. Budete tiež chcieť spustiť nižšie uvedené príklady kódu v miestnom nastavení L / M / WAMP.

Pomocou API

Vytvorte na svojom vývojovom serveri nový priečinok projektu a Git do neho naklonujte úložisko. Ak ste stiahli súbor ZIP, rozbaľte ho na svoj projekt a premenujte ho php-echonest-api.

Na autentifikáciu pomocou API budete potrebovať nasledujúce informácie zo svojho vývojárskeho účtu Echo Nest: váš kľúč API, kľúč spotrebiteľa a zdieľaný tajný kľúč. Všetky tieto informácie nájdete na stránke svojho účtu v vývojárskom centre Echo Nest.


Budete tiež potrebovať poznať názov karantény, ku ktorej ste dostali prístup. Toto sa nachádza na Pieskoviská na karte svojho účtu vývojára v strednom stĺpci. Ako príklad obsahuje pieskovisko Gorillaz kľúč od emi_gorillaz.

Sandbox API má dve rôzne metódy: pieskovisko / zoznam a pieskovisko / prístup. The pieskovisko / zoznam metóda vracia stránkovaný zoznam podkladov a nevyžaduje žiadne špeciálne overenie (okrem vášho kľúča API a schváleného prístupu v karanténe). Pieskovisko / prístup však vyžaduje ďalšie overenie pomocou protokolu OAuth.

Tu je príklad, ako vytvoriť inštanciu rozhrania Sandbox API a overiť ju:

? php require ("php-echonest-api / lib / EchoNest / Autoloader.php"); EchoNest_Autoloader :: register (); define ("API_KEY", "{YOUR API KEY}"); define ("SANDBOX_KEY", "{YOUR SANDBOX KEY}"); define ("CONSUMER_KEY", "{YOUR CONSUMER KEY}"); define ("SHARED_SECRET", "{YOUR SHARED SECRET}"); $ echonest = nový EchoNest_Client (); $ echonest-> autentifikácia (API_KEY); $ echonest-> setOAuthCredentials (CONSUMER_KEY, SHARED_SECRET); $ sandbox = $ echonest-> getSandboxApi (pole ("sandbox" => SANDBOX_KEY));?>

Teraz $ pieskovisko premenná je autentifikovanou inštanciou API a môžete získať zoznam obsahu karantény takto:

? php $ assets = $ sandbox-> getList (); var_dump ($ assets);?>

Odpoveď od a getList () call je asociatívne pole PHP s nasledujúcimi klávesmi: postavenie (súbor informácií o požiadavke), začať (index prvého vráteného majetku), Celkom (počet aktív v karanténe) a aktíva (pole popisov aktív). The aktíva kľúčové body smerujú do podskupiny, pričom každá položka popisuje dostupné aktívum. Typické dielo vyzerá takto:

Array ([echonest_ids] => Array ([0] => Array ([foreign_id] => emi_artists: track: EMIDD0779716 [id] => TRGHIRC1334BAE7AD6)) [title] => Pľuvanie démonov [názov súboru] => emi_gorillaz / EMIDD0779716.mp3 [release] => D-strany (špeciálne vydanie) [typ] => audio [id] => 6aff61700721ca5b9262a06ef8cea717)

Bez parametrov, getList () vráti až 15 aktív za hovor, počnúc prvým. Môžete odovzdať množstvo možností do getList () a upravte predvolené správanie, ktoré vyzerá takto:

? php $ options = array ("results" => 100, "start" => 100); $ assets = $ sandbox-> getList ($ options); var_dump ($ assets);?>

Za predpokladu, že je v karanténe dostatok prostriedkov, predchádzajúca požiadavka vráti 100 aktív počnúc stou. Ak ich nie je dosť (alebo vôbec žiadny), skončíte s menším alebo prázdnym poľom prostriedkov.

Obnova majetku

Takže teraz máte k dispozícii nejaké aktíva, ako sa k nim dostanete? Tu, pieskovisko / prístup je metóda, ktorá sa má použiť, a prijíma jeden parameter: jedinečné ID diela. Mnoho diel má iba jeden jednoduchý identifikátor, ale môžu mať aj zvukové diela echonest_ids ktoré spájajú aktíva so stopami v širšom API Echo Nest a zaisťujú interoperabilitu s inými karanténami prostredníctvom menného priestoru Project Rosetta Stone; Viac informácií nájdete v dokumentácii online.

Takže, berúc Pľuvanie démonov vyššie, mali by sme k nej prístup pomocou nasledujúceho kódu:

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

Odozvou na túto požiadavku je asociatívne pole usporiadané rovnakým spôsobom ako volanie na getList (), s výnimkou toho, že položky v dielach používajú iba kľúče URL a ID, pričom URL je zaujímavá, pretože ide o odkaz na skutočný súbor diela. Odkazy na diela sú označené časovou pečiatkou, takže ich po uplynutí platnosti nemožno uložiť do medzipamäte ani použiť.

Indexovanie karantény

Aj keď Sandbox API nám umožňuje listovať v aktívach pomocou výsledky a začať parametre getList () neposkytuje žiadne možnosti na vyhľadávanie konkrétnych položiek. Ak chcete vyhľadať konkrétne dielo, musíte ho opakovane robiť getList () hovory, kým nenájdete - čo je nepohodlné, pomalé a zožerie váš príspevok na API. Prístup, ktorý je potrebné podniknúť, je samozrejme vytvoriť si vlastný inventár a uložiť ho do pamäte cache, aby ste sa na neho mohli neskôr odvolať.

Existuje mnoho spôsobov, ako to dosiahnuť, ale pravdepodobne najjednoduchšou metódou je uložiť si svoj getList () výsledky v databáze. Po vytvorení novej databázy budete musieť vytvoriť slučku getList () hovory, prechádzanie karanténou Sandwich a ukladanie výsledkov, ktoré máte. V príklade nižšie využívam existujúce pripojenie MySQL, databázu a tabuľku aktív:

? php $ page = 0; $ num_assets = 0; do {$ list = $ sandbox-> getList (array ("results" => 100, "start" => $ page * 100)); foreach ($ list ["assets"] ako $ 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 = "Bez názvu"; } $ sandbox_id = $ asset [‘id’]; $ type = $ asset [‘type’]; $ názov súboru = $ aktívum [‘názov súboru’]; $ query = "INSERT INTO‘ assets ‘SET‘ title ‘=‘ “. $ titul. „‘, ‘Sandbox_id‘ = ‘“. $ sandbox_id. „“, ‘Typ’ = ‘“. $ typ. „“, ‘Názov súboru’ = ‘“. $ nazov souboru. „‘, ‘Track_id‘ = ‘“. $ track_id. „“ “; $ success = mysql_query ($ query) alebo zomrieť (mysql_error ()); if ($ success === true) {$ num_assets + = 1; }} $ page + = 1; } while (! empty ($ list ["assets"])); echo "Complete. Retrieved $ num_assets assets.";?>

Ak máte všetko v poriadku, mali by ste mať celú tabuľku podkladov, ktoré môžete dopytovať podľa názvu súboru, typu diela, názvu alebo identifikátora Echo Nest. Mať taký prehľadateľný index je základným kameňom vytvárania vlastných aplikácií.

Profilovanie sledovacích aktív

Ako už bolo spomenuté, rozhranie Echo Nest API dokáže analyzovať zvuk a podrobne ho opísať. Analyzátor Echo Nest Analyzer je opísaný ako jediné „posluchové“ API na svete: využíva techniky strojového počúvania na simuláciu toho, ako ľudia vnímajú hudbu.

Keď pracujete so zvukovými prostriedkami Sandbox API, najčastejšie sa používajú metódy song / search (súčasť API Song), playlist / static (z Playlist API) a track / profile (súčasť Track API). Skladby a stopy sú koncepčne oddelené: rozhranie Song API vracia zhruba diskografické informácie, pričom rozhranie Track API sa zaoberá konkrétnymi zvukovými údajmi a analýzami.

Metóda hľadania piesní vám umožňuje vyhľadávať v databáze Echo Nest piesne podľa názvu alebo interpreta, ale aj tých, ktoré spĺňajú všetky kritériá počúvania, ktoré máte, vrátane kategórií ako „danceability“, „energy“ alebo „nálada“.

Používanie rozhrania Song API v karanténach zvyčajne vyžaduje tento kód:

? php $ song_api = $ echonest-> getSongApi (); $ params = array ("bucket" => array ("id: emi_artists", "tracks"), "artist" => "Gorillaz", "limit" => true, "min_danceability" => 0,5); $ results = $ song_api-> search ($ params); var_dump ($ results);?>

Kritické parametre vo vyššie uvedenej výzve sú vedro a limit. Index karantény, ktorý ste vytvorili skôr, bude obsahovať ID skladieb, a nie ID skladieb, takže budete musieť nariadiť rozhraniu Song API, aby vrátilo ID skladieb. Môžete to urobiť odovzdaním dvojprvkového poľa do vedro, obsahujúce koľaje a menný priestor Rosetta.

Menný priestor, ktorý používate, závisí od toho, do ktorého karantény máte prístup. Takže napríklad ak pracujete s karanténou Bluenote, mali by ste použiť id: emi_bluenote tu. (Ďalšie informácie o tejto položke môžete skontrolovať v dokumentácii Project Rosetta Stone v dokumentácii online v centre pre vývojárov.)

Musíte sa tiež ubezpečiť, že výsledky sú obmedzené na priestor názvov, takže tiež vyhovujte parametru limit. Existuje napríklad veľa parametrov profilu trasy min_dotaziteľnosť ako som tu použil. Opäť si pozrite dokumentáciu k celému šebangu.

Každý výsledok vrátený z žiadosti o vyhľadanie skladby alebo vyhľadávania bude obsahovať čiastkové pole stopy, ktoré obsahuje zoznam ID skladieb. Použite tieto ID na prihlásenie track_id vo svojej indexovej databáze. Týmto spôsobom môžete vyhľadať skladbu, vyhľadať ID stopy v indexe a potom načítať dielo pomocou jedinečného ID diela: playlist / static je zameniteľný s piesňou / vyhľadávaním, s výnimkou vrátených skladieb, ktoré sú náhodné a neopakujúce sa.

Metóda track / profile funguje opačne, keď prijíma ID stopy a vracia nielen informácie na vysokej úrovni, ale aj adresu URL analýzy celej trasy podľa jednotlivých krokov. Tieto kompletné analýzy sú neuveriteľne podrobné a boli použité ako základ pre niektoré veľmi pôsobivé hacky Echo Nest.

Ukážka aplikácie

Zostavil som príklad aplikácie, ktorá využíva všetky vyššie popísané metódy. Využíva karanténu Gorillaz, ale môžete si ju stiahnuť a nakonfigurovať pomocou vlastných kľúčov, ak si to chcete vyskúšať proti inému.

Potrebujete na to vývojársky účet Amazon Product Advertising API, pretože odtiaľ čerpá umelecké diela. Pre zábavu vizualizujem dáta pomocou súboru three.js, knižnice WebGL - a tá je momentálne kompatibilná iba s prehliadačom Google Chrome.

Ako to funguje

Najprv aplikácia uskutoční playlist / statické volanie pre skladby Gorillaz v id: emi_ umelci menný priestor. Potom vyhľadá názov podľa Amazon API a iTunes Search API a pokúsi sa nájsť obal albumu pre každú skladbu Echo Nest.

Po načítaní údajov použijem súbor three.js na vytvorenie 3D karuselu. Keď kliknete na položku karuselu, aplikácia vyhľadá stopu v miestnom indexe a potom uskutoční dva hovory - prvý na sledovanie / profil pre zvukovú analýzu na vysokej úrovni (tanečnosť, energia, reč a tempo), ktorá je potom zobrazené ako jednoduchý 3D stĺpcový graf.

Nakoniec zavoláme sandbox / prístup, aby sme stiahli príslušné mp3 a prehrali ich. Môžete si zobraziť ukážku aplikácie a získať zdroj z GitHubu.

Objavte 15 úžasných príkladov animácie CSS3 na našom sesterskom webe Creative Bloq.

Vyberte Správu
Ako okamžite odpojiť napájanie z počítača HP Desktop
Zistiť

Ako okamžite odpojiť napájanie z počítača HP Desktop

Predtým, ako zíkame kúenoti odtránením napájania z hela na tolnom alebo prenonom počítači hp operačnom ytéme Window 7 alebo 8 alebo 10, muíte a obozná...
Na používateľov telefónov iPhone môže mať vplyv bezpečnostná chyba Mail-Demon
Zistiť

Na používateľov telefónov iPhone môže mať vplyv bezpečnostná chyba Mail-Demon

Život v účanej dobe technologického rozvoja je nielen požehnaním, ale aj prekliatím. Bezpečnotné otázky ú jednou z hlavných debát 21. toročia. Technoló...
Najlepšie 3 Windows 7 softvér na obnovenie hesla
Zistiť

Najlepšie 3 Windows 7 softvér na obnovenie hesla

Ak nemáte vôbec predtavu o tom, že by te do počítača o ytémom Window 7 mali tratiť alebo zabudnúť helo, a chcete tento počítač používať bez traty dát. oftvé...