Pm C Cloud Personal de Muzica
CUPRINS
Capitolul 1: Introducere
1.1. Contextul de realizare
1.2. Tema și obiectivele lucrării
1.3. Motivația
1.4. Structura lucrării
Capitolul 2: Sisteme moderne de redare audio
2.1. Spotify
2.2. SoundCloud
Capitolul 3: Tehnologii și medii de dezvoltare folosite
3.1. Sistemul de operare Android
3.1.1. Android. Prezentare generală
3.1.2. Arhitectura sistemului de operare Android
3.2 Mediul de dezvoltare Eclipse
3.3 Limbajul Java
3.4 Platforma Node.js
3.5 Limbajul JavaScript
Capitolul 4: Descrierea generală a sistemului
4.1. Descrierea serverului
4.2. Descrierea clientului
4.3. Descrierea funcționalității locale
Capitolul 5: Proiectarea și implementarea sistemului
5.1. Arhitectura
5.2. Aplicația Android
5.2.1. Redare locală
5.2.2. Redare Online
5.2.3. Player-ul Audio
5.3. Serverul multimedia
5.3.1. Server
5.3.2. Baza de date
Capitolul 6: Concluzii
6.1 Concluzii generale
6.2 Perspective de viitor
Capitolul 7: Bibliografie
1. Introducere
Tehnologia avansează surprinzător de repede, aduncând la realitate Legea lui Moore. Progresele se datorează nevoilor și cerințelor oamenilor. Datorită acestui progres în lumea tehnologiei, s-a ajuns ca fiecare dintre noi sa se găndeasca la o invenție care i-ar ușura munca sau i-ar fi folositoare într-un anumit context.
Un domeniu ce avansează în acest mod surprinzător de repede este cel al tehnologiei mobile. Acesta a ajuns de la un simplu telefon mobil, cu funcții primitive și ecran alb-negru la așa numitul Smartphone, care nu lispșeste din colecția nimănui. Daca in copilărie doar în filme vedeam un telefon mobil acum s-a ajuns la pronosticul că 10 din 13 oameni dețin 3 un telefon mobil.
Pe langă funcția esențială de comunicație, acum un telefon mobil mai are și alte funcții principale, care sunt niște cerințe în momentul în care vrei sa îți achiziționezi unul. Unele dinte aceste funcții ar fi: redare audio, cameră foto/video, internet, etc.
Scopul acestei lucruri este de a scoate în evideța funcția de redare audio a smarphone-ului în concordața cu internetul.
1.1. Contextul de realizare
Această funcție de redare audio a ajuns foarte departe. Daca la inceput erau doar fișiere audio polifonice, în foarte scurt timp s-a ajuns la fisierele mp3, iar principalul factor de constângere, memoria internă a telefonului, s-a rezolvat repede prin memoria externă, și anume cardurile de memorie externă. Insă acest lucru nu a fost a fost sfârsitul dezvoltării acestei părti. Punctul în care s-a ajuns astăzi este de redare audio online, direct de pe servere prin intermediul internetului.
Pentru redare audio online trebuie să existe o comunicație între telefon și serverul de internet. Această comunicație depinde de constrângerile de riguare impuse de tehnologie. Insă modul în care sunt administrare și redate fișierele audio ar trebui sa fie o constrăngere din partea clientului.
Lucrarea de fața iși propune evidențierea acestei funcții a smartphone-ului prin personalizarea cu propriul server în care sunt depozitate piesele. Utilitatea aplicației este de redare audio prin intermediul smartphone-ului dar din propria colecție de piese administrată în funcție de preferințe, spațiul de memorie ne mai este o constrâgere.
1.2. Tema și obiectivele lucrării
În această lucrare este prezentat un sistem care și-a propus să extindă această parte a dispozitivelor inteligente. Extinderea constă în dezvoltarea unui server ce face legătura între colecția multimedia a utilizatorului și telefon, legătura fiind realizată prin intermediul internetului. Piesele pot fi redate atât de pe server cât și din memoria locală a telefonului.
Acest sistem are ca obiectiv principal redarea audio on-line, de pe serverul cu date, acest lucru bazându-se pe conexiune la internet. Există însa și posibilitatea de redare audio locală în cazul în care sunt probleme cu internetul sau în cazul în care internetul nu mai are arie de acoloperire. Un alt scop a fost pregătirea pentru aceste situații prin opțiunea de descarcare a pieselor dorite.
1.3. Motivația
Dezvoltarea tot mai rapidă a tehnologiilor, pe langă faptul că oferă o varitate largă de aplicații, oferă și un mod de dezvoltare flexibil și transparent asupra tehnologiei în cauză. Astfel putându-se dezvolta cât mai multe aplicații în funcție de orice domeniu de aplicabilitate.
Astăzi dat fiind ca fiecare dintre noi are un smartphone, se încearcă să se facă cât mai util. Deoarece muzică ne oferă o stare stare de bine și de relaxare, prin intermediul sistemelor mobile o putem asculta indiferent unde ne-am afla. S-a ajuns în punctul în care muzica este ascultată și în timp ce faci sport și în timp ce lucrezi și în timp ce mănânci, pe langă toate evenimentele de divertisment.
De aceea scopul meu a fost de a crea un sistem care cuprinde și partea de mobilitate și partea de diversitate multimedia.
1.4. Structura lucrării
Respectând principalele elemente ale unei structuri tehnice, lucrarea va fi dezvoltată pe parcursul a 7 capitole. Fiecare dintre ele va evidenția atât aspectele teoretice ale lucrării, cât și aspectele practice ale implementării.
În cadrul primului capitol denumit “Introducere”, este prezentată lucrarea în contextul actual în care se încadrează, făcând referire și la aspectele deja existente în prezent pe aceiași tematică. Un subcapitol este “Motivația” care arată punctul din care a pornit dezvoltarea. Alte două subcapitole prezintă tema în sine și structura organizării documentației care oferă o imagine și o întelegere mai bună a subiectului lucrării dar și a modului în care va fi el prezentat pe parcurs.
În cadrul capitolului “Sisteme moderne de redare audio” este prezentată o viziune asupra 2 sisteme de aceiași tematică cu sistemul din tema prezentă.
În capitolului denumit “Tehnologii și medii de dezvoltare folosite” vor fi descrise în mare parte tehnologiile folosite și caracteristicile lor, dar și alte noțiuni importante folosite în dezvoltarea aplicației.
Capitolul “Descrierea generală a sistemului” va cuprinde descrierea la nivel de arhitectură generală a sistemului ce va fixa o viziune asupra comunicării între componente si modul de funcționare al sistemul.
În cadrul capitolului “Proiectatea și implementarea generală” se va detalia arhitectura sistemului și implementarea componenetelor principlale.
Capitolul denumit “Concluzii” va conține concluziile finale ce vor prezenta atât avantajele cât si dezavantajele produsului, din punctul de vedere al autorului. Pe lângă aceasta concluzionare se vor trasa perspectivele de viitor în această direcție în scopul extinderii ariei de dezvoltare și a funcționalotăților.
La final este prezentat capitolul“Bibliografie” în care sunt incluse sursele de inspirație si documentare ale autorului.
2. Sisteme moderne de redare audio
În cadrul acestui capitol se vor prezenta două sisteme de nivel înalt de redare audio din același context cu sistemul din tema prezentă și anume sistemele Spotify și SoundCloud.
2.1 Spotify
Spotify este un sistem comercial de redare audio și video lasat in 2008 de un grup de dezvolatori suedezi, care la numai 2 ani (15 septembrie 2010) de la lansare a reușit sa fie vizitat de 10 milioane de utilizatori. Muica pusă la dispoziție poate fi redată atât în browser cât si prin aplicații mobile, cu opțiuni de cautare după nume artist, titlu piesă, gen și alte nume de albume.
În decembrie 2010, Spotify ofera acces la aproxumativ 20 de milioane de piese la care au acces toți utilizatori.
Utilizatorii au opțiunea de a-și crea liste cu piese preferate, pot să partajeze aceste liste cu alți utilizatori sau sa le editeze împreuna cu alți utilizatori. Aceste liste se actulizează automat pentru toți utilizatorii care o folosesc. Legatura spre o lista de piese poate fi transmisă intr-un mod foarte ușor spre un alt utilizator: poate fi trimisă printr-un email sau mai direct prin fereastra de comunicare oferită pentru utilizatori.
Spotify include și o funcționalitate de radio pentru utilizatorii gratis și premium. Această funcționalitate presupune crearea unei liste de piese în mod aleatoriu în funcție de genul și anii de apariție ai pieselor. Deasemenea permite înregistrarea utilizatorilor și cu alte conturi de alte rețele de socializare (Facebook, Twitter).
Aceste sistem nu este unul gratis ci utilizatorii trebuie să primească acces autorizat. Fișierele de muzică suportate sunt MP3 și ACC. Spotify are o medie a latenței de redare de 265-390 ms fară a salva intermediar bucați din fișier.
2.2 SoundCloud
SoundCloud este tot un sistem de redare audio care a fost fondat inițial în Suedia, dar după a fost stabilit în Germania. Dezvolatatorii și-au propus inițial să permită atiștilor sa își partajeze creațiile însă conceptul s-a transformat mai târziu într-un sistem dedicat pentru tot publicul. Putând fi folosit atât în browser cât și în aplicații pentru dispozitive mobile.
Acest sistem permite utilizatorilor să își creeze liste cu piese preferate, șă le partajeze cu alți utilizatori și chiar să urmărească activitatea altor utilizatori. Pe lăngă această opțiune utilizatorii pot să intre în grupuri în care cred ei că s-ar integra din punct de vedere al preferințelor muzicale.
3. Tehnologii și medii de dezvoltare folosite
Documentarea are un rol foarte important în crearea unei lucări bune, astfel că pentru realizarea unui proiect în acest domeniu este nevoie de cunoștiințe teoretice care să aprofundeze noțiunile folosite în implementarea ulterioară a acestuia. Pentru dezvoltarea sistemului de redare audio a fost nevoie de a pune cap la cap mai multe tehnologii și platforme de dezvoltare, precum și insușirea unor noțiuni și concepte software necesare realizării codului corespunzător implementării functionalităților. În următoarele subcapitole vor fi prezentate aceste tehnologii și concepte.
Figura 3.1 Logo sistem de operare Android
3.1. Sistemul de operare Android
3.1.1 Android. Prezentare generală
Android este o platformă de dezvoltare și un sistem de operare pentru dispozitive și telefoane mobile bazată pe nucleul Linux, dezvoltată inițial de compania Google, iar mai târziu de consorțiul comercial Open Handset Alliance. Android permite dezvolatatorilor să scrie cod gestionat în limbajul Java, controlând dispozitivul prin intermediul bibliotecilor Jave dezvoltate de Google.
SDK-ul (Software Devolopment Kit) Android include un set complet de instrumente de dezvolatre. Acestea includ un program de depanare, biblioteci, un emulator de dispozitiv, documentație, monstre de cod și tutoriale. Mediul de dezvolatare (IDE) suportat oficial este Eclipse, utilizând plug-in-ul Android Development Tools (ADT), deși dezvoltatorii pot folosi orice editor de text pentru a edita fișierele XML și Jave și apoi să utilizeze unelte din linia de comandă pentru a crea și depana aplicații Android.
Carcateristici ale platformei :
este adaptabilă la configurații mai mari, VGA, biblioteci grafiice 2D, biblioteci grafice 3D bazate pe specificația OpenGL ES 1.0 și configurații tradiționale smartphone.
android suportă tehnologii de conectivitate incluzând GSM/EDGE, CDMA, EV-DO, Bluethooth și Wi-Fi.
pune la dispoziție mai multe mecanisme de stocare a datelor:
Shared Preferences – este un framework de stocare privată a datelor sub formă de perechi-valoare;
Internal Storage – stochează privat datele sub fomă de fișiere în memoria dispozitivului, accesibil doar pentru aplicația care le-a creat;
External Storage – stochează datele public sub formă de fișiere pe un suport extern, cum ar fi cardul SD;
Baza de date SQLite – stochează datele în baza de date SQLite
3.1.2 Arhitectura sistemului de operare Android
Figura 3.1.2 Arhitectura software Android
Arhitectura sistemului de operare Android are la baza 5 nivele importanate:
Nucleul Linux – conține driver-ele pentru diferitle componente hardware (ecran, cameră foto, tastatură, antenă WiFi, memorie flash, dispozitive audio), fiind responsabil cu gestiunea proceselor, memoriei, perifericelor (audio/video, GPS, WiFi), dispozitivelor de intrare/ieșire, rețelei și a consumului de energie.
Bibliotecile – sau spațiul utilizatorului conțin codul care oferă principalele funcționalități a sistemului de operare Android, făcând legatura între kernel și aplicații.
Motorul Android – este reprezentat de două componente: biblioteci de bază si mașina virtuală Dalvik. Bibliotecile de bază permit utilizatorilor să dezvolte aplicații Android folosind limbajul de programare Java; acestea includ acces la funcțiile telefonului (telefonie, mesaje, resurse, locații), interfața cu utilizatorul, furnizori de conținut și gestiunea pachetelor (instalare, securitate). Masina virtuală Dalvik este compnenta principală la nivelul RUNTIME a sistemului de operare și este otimizată special pentru Android și permite ca fiecare aplicație sa poată rula într-un proces propriu. Scopul cu care a fost proiectată a fost ca sistemul de operare Android să poată rula în situații limitate, atât din punctul de vedere al bateriei cât si al memoriei. Android suportă rularea proceselor în fundal. Se încearcă menținerea procesului unei aplicații cat mai mult timp posibil, însă în cazul în care memoria dispozitivului pe care rulează este scăzută sau este solicitat de alte procese cu o prioritate mai mare pentru utilizator, Android poate închide un proces ce rulează la un moment dat pe acel dispozitiv. În acest caz componentele aplicației care ruleaza in procesul inchis forțat sunt distruse. Un proces este repornit pentru aceste componente.
Cadrul pentru aplicații expune diferite funcționalități ale sistemului de operare Android către programatori, astfel încât aceștia să le poată utiliza în aplicațiile lor. Acest cadru conține un set de unelte ce pot fi folosite de alte aplicație. Acest nivel este complet construit în Java și cuprinde următoarele componente: ActivityManager – coordonează ciclul de viață al aplicației; PackageManager – destionează pachetele instalate pe dispozitiv; WindowManager – destionează ferestrele și afișarea acestora pe ecran; TelephonManager – conține API-uri folosite pentru a construi aplicația telefon; ContentProvider – permite schimbul de date între aplicații; ViewSystem – o librărie de controale (butoane, liste etc.) ce pot fi folosite în aplicații ce este optimizată pentru a acepta ecrane de diferite mărimi și rezoluții; LocationManager – oferă acces la serviciul de locație Android; NotificationManager – oferă tuturor aplicațiilor posibilitatea de a afișa notificări.
Nivelul de aplicații – cuprinde toate aplicațiile care au o interfață prin care să comunice cu utilizatorul. Fiecare aplocație ruleaza un proces propriu, ceea ce asigură o securitate sporită și o memorie protejată. Astfel cănd una dintre aplicații se termina brusc și inexplicabil nu o sa influențeze buna funcționare a celorlalte
3.2 Mediul de dezvoltare Eclipse
În programarea calculatoarelor, Eclipse este un mediu de dezvoltare integrat ce conține un spațiu de lucru de bază și un sistem de plug-in-uri extensibil pentru a particulariza cât mai mult mediul de dezvoltare. Este scris în cea mai mare parte în Java și este folosit pentru a dezvolta aplicații. Datorită sistemului variat de plug-in-uri Eclipse poate fi folosit pentru dezvoltare de aplicații și în alte limbaje de programare în afară de Java.
Pentru dezvoltarea aplicațiilor in Android, Eclipse integrează plug-in-ul ADT (Android Development Tool) care ofera o suită de unelte ce oferă acces la multe facilitați care ajută utilizatorul să dezvolte aplicații Android. ADT oferă acces GUI la multe dintre SDK-urile linie de comandă, precum și un instrument de proiectare UI pentru pototipizarea rapidă, proiectarea și construirea inetrefeței cu utilizatorul a aplicației.
Din punctul de vedere al editorului de cod, ADT oferă in plus alte posibilități de editare pentru fișiere XML într-o forma de bază sau într-o formă grafică. Aceste particularitați sunt: Graphical Layout Editor, Android Manifest Editor, Menu Editor, Resources Editor, XML Resources Editor.
3.3 Limbajul Java
IN PROGRESSS
3.4 Platforma Node.js
Node.js este un mediu de rulare cross-platform pentru dezvoltarea partii de back-end a aplicațiilor web. Aplicațiile Node.js sunt scrise în JavaScript și pot fi rulate în Node.js avănd suport în sistemele de opereare OS X, Microsoft Windoes, Linux, FreeBSD și IBM. Activitatea sa este gazduită si suportată de Fundația Node.js, un proiect colaborativ cu Linux. Node.js se bazează pe furnizarea datelor imediată si pe un model intreare – iesire care îl face ușor și eficient, perfect pentru aplicații intensive de date în timp real, care se executa pe toate dispozitivele distribuite.
Permite dezvoltarea aplicațiilor web la nivel de server în limbajul JavaScript. Foloseste V8 – procesor (interpretor) JavaScript creat de Google și disponibil liber. Oferă suport pentru cele mai importante protocoale Web: HTTP (Hyper Text Transfer Protocol), DNS( Domain Name System), TLS(Transfer Layer Security) și funcționalități de nivel scăzut (socket-uri TCP).
IN PROGRESSSSSSSSSSS
3.5 Limbajul JavaScript
IN PROGRESSSSSSSSSSS
4. Descrierea generală a sistemului
Sistemul de redare audio din cadrul acestei teme este un sistem distribuit care constă într-o aplicație Android și un Server Web. Componentele comunică prin modelul Client-Server. Acest model este o structură sau o arhitectură de aplicație distribuită care partajează procesarea între funrnizorii de servicii numiți servere și elementele care solicită servicii, numiți clienți. Clienții și serverele comunică printr-o rețea de calculatoare , de obicei prin internet.
Figura 4.1 Ilustrare a protocolului Client-Server
Asfel partea sistemului de redare audio in temă poate fi descris atât din punct de verede al serverului cât și din punct de vedere al clientului. Funcționalitatea de redare locală nu poate fi încadrata în acest concept astfel va fi descrisă separat.
4.1 Descrierea serverului
Serverul constitue o componentă a sistemului de redare audio care se ocupă cu depozitarea și administrarea fișierelor audio, însă pe langă această funcție își duce la îndeplinire funcția de bază de server care presupune tratarea cererilor venite de la client. Severul audio este capabil să țină în evidență toată arhiva multimedia și șă raspundă prompt clientului la cerere. Este dezvoltat pe platforma Node.js și raspunde clientului prin protocolul HTTP.
Pe parcursul interacționării cu clientul, serverul trebuie să ruleze, acest lucru se face simplu din linia de comandă datorită facilităților oferite de platforma Node.js. Managementul fișierelor se face utilizănd o bază de date în care se afla informații atât despre cântece cât si despre listele pe care clientul le creează.
Serverul știe să raspundă clientului dacă vrea să caute în intreaga listă de piese. Știe sa îi rapsundă clientului când vrea să creeze o lista noua, când vrea să stergă o listă. Împlicit furnizează câteva liste pe care clientul poate să le redea.
O altă cerere care vine des de la client este de a descărca fișiere, cerere la care serverul răspunde. Asftfel clientul își poate descărca mai multe fișiere de pe server in cazul în care vrea sa le asculte local.
4.1 Descrierea clientului
În cadrul acestui sistem de redare audio clientul este reprezentat de aplicația Android care în contextul de client este capabilă să redea un fișier cerut serverului într-un audio player. Aplicația android oferă utilizatorului mai multe opțiuni de a intercaționa cu serverul.
Clientul la prima interacționare cu serverul cere o listă de liste cu cântece, acele liste care serverul le are create în interior ca să le furnizeze clientului ca liste implicite, din acest punct clientul poate sa își creeze propriile liste de piese în funcție de preferințe, asfetl serverul îi oferă raspuns pentru această cerere. În acest mod se realizează comunicarea între server și client, care mai exact în acest punct este practic utilizatorul aplicației.
Pe langă opțiunile ce se învârt în jurul unei liste de piese, o altă opțiune foarte importantă pe care o are utilizatorul este de a descărca piesele dorite pentru ca mai târziu să poată fi redate din partea locală.
Atunci când o piesă este selectată pentru a fi redată se va deschide într-un audio player care prezintă detalii despre piesa respectivă cu opțiunile unui audio player general. Audio player-ul are facilitatea de rula în fundal iar între timp utilizatorul sa poată interacționa cu alte aplicații.
4.1 Descrierea funcționalității locale
Funcționalitatea locală însemnă o altă funcționalitate a aplicației Android pe langă cea de client. Această ramură se ocupă cu redarea audio a fișierelor ce le gasește în memoria telefonulul fiind complet independentă de partea care lucrează cu serverulul. Aplicațiia creează interfța între utilizator și fișierele audio. Prezintă o listă cu piese ce le gasește stocate în telefon. Utilizatorul poate selecta o piesă care vrea să cânte și o să se deschidă în audio player. Pe langă această listă care se poate numi și listă implicită utilizatorul are opțiunea de a-și crea propriile liste de cântece în funcție de preferințe, dar lista din care poate să își facă selecția este tot lista implicită. Poate să creeze mai multe liste, poate să ștreagă listele create precum, poate sa adauge piese noi la o listă precum poate să și ștearga piese din liste.
Funcționalitatea de redare locală folosește același audio player ca și funcționalitatea de redare de pe server. Astfel audio player-ul prezintă aceleași caracteristici ca și la redarea de pe server.
5. Proiectarea și implementarea sistemului
În acest capitol se va prezenta în detaliu sistemul din punct de vedere al proiectării și al implementării.
5.1 Arhitectura
Arhitectura sistemului este caracterizată de două componente: Aplicația Android și Serverul Multimedia. Cele două componente comunică prin intermediul internetului. Figura următoare arată toate elementele sistemului și relațiile de interconectare dintre ele.
Figura 5.1 Arhitectura sistemului de redare
Aplicația Android este cea care comunică direct cu utilizatorul oferindu-i o interfață grafică în care el este liber să descopere facilitățile sistemului. Interfața grafică ascunde funcționalitatea din spate care reprezintă de fapt sistemul în sine.
Serverul multimedia este dezvoltat pe platforma Node.js și este creat astfel încăt să fie compatibil cu protocolul de comunicare HTTP. Acest lucru se face folosind unul dintre spațiile de lucru ale platformei de bază și anume ExpressJS. Am ales acest spațiu deoarece este unul rapid, foarte flexibil și în primul rând înglobează modul de HTTP necesar comunicării cu aplicația. Aici se folosește modulul express.Router(). Acestui modul i se pot adăuga metode de HTTP(get, put, post) la fel ca la o aplicație, fâcand diferența între ele la momentul rulării în funcție de cererile venite de la client. Astfel fiind creată funcționalitatea serverului îl face capabil să comunice cu orice client ce comunică prin același protocol. Un alt aspect important la crearea serverului este adresa IP(Internet Protocolo address) și Portul pe care raspunde. Adresa IP a serverului este reprezentată de adresa IP a mașini pe care rulează, iar portul este ales astfel încat să nu fie folosit un port protejat. Din aceste considerente rezultă serverul care raspunde la cererile venite de la clienți respectănd regulile de comunicare.
Comunicarea efectivă se realizează în același mod în care se realizează în toate sistemele generale care comunică prin HTTP. Pentru ca aplicația sa poată comunica cu serverul trebuie în primul rând sa aibă conxiune la internet și să ceară permisiuni de internet de la nucleul sistemului de operare. Aplicația cumunică cu serviciul de internet folosiind funcții predefine în acest scop. Aceste funcții primesc ca parametru un URL(Uniform Resourse Locator) care indică spre resursa dorită din server. Din schema unui URL ne putem da seama de felul cum are loc transmiterea de cereri si răspunsuri dintre server și client: <protocol>://<IP:Port>/<nume_cerință> .
Serverul multimedia comunică pe portul 8088 iar IP-ul nu este unul public așadar depinde de IP-ul mașinii pe care rulează, IP care este dat de rețeaua locală la care este conectată mașina. Aplicația știe acest lucru astfel că la începutul întrări în componenta de redare online întreabă utilizatorul de IP.
5.2 Aplicația Android
După cum reiese și din figura 4.1 Aplicația Android are trei componente mari, una dintre ele ele și anume Player-ul Audio este o componentă partajată de cele două Redări. La startul aplicației se ramifică funcționalitatea intre Redarea Online și Redarea Locală. Figura 5.2 arată activitatea de inceput în care utilizatorul alege ramura pe care merge. Local Playlist și Server Playlist reprezintă butonele care deschid noi activități cu funcționalități diferite.
Figura 5.2 Activitatea de start a aplicației
5.2.1 Redare locală
Aceată sub-componentă a aplicației este pusă în funcțiune prin apăsarea butonului LOCAL PLAYLIST care lasează în execuție o nouă activitate ce se ocupă cu redarea audio a fișierelor ce sunt găsite în memoria telefonului. Se deschide o listă implicită de cântele implicită care se formează în urma unei scanări și rezultă o listă formată din toate piesele găsite în telefon. Acest lucru se face folosind clasa ContentResolver oferită de Android.
Un cântec este reprezentat în aplicație de un obiect de tipul clasei Song și este caracterizat de mai multe atribute, cum ar fi: titlu, nume, id. Asupra acestui obiect pot fi apelate mai multe metode din care reies datele unui cântec. Scopul acestor operații pentru un obiect de timpul Song este de gasi cat mai ușor detalii ce sunt folosite fie pentru interfață fie pentru liste.
Acestă listă este făcută să răspundă la evenimente de tipul evenimentelor apăsării unui buton. Astfel dacă unul dintre obiectele din listă, adică un cântec, este apăsat se va deschide player-ul audio care va incepe să redea acel cântec. După terminarea de redare a obiectului curent este redat automat urmatorul. Functionalitate oferită de player-ul audio.
De la acest nivel se poate merge pe activitatea care administrează listele create de utilizator în funcție de preferințe. Această activitate este lansată în execuție prin apăsarea butonului Playlist care deschide o nouă fereastră pentru utilizator în care sunt listele de piese create până în acel moment de utilizator. Practic este o listă de liste. O listă înseamnă un obiect de tipul clasei Playlist care este caracterizat prin 3 atribute: id, nume și o listă de obiecte Song.
Opțiunile principale ale utilizatorului sunt de a crea o nouă listă, de a șterge o listă și de a adăuga un nou cântec la o listă. Adugarea și stergerea se face alegând opțiunea respectivă din meniu deschis la apăsarea lungă pe un obiect din listă, adică pe o listă cu piese. Astfel se face adăugarea sau stergerea la listă prin identificarea obiectului apăsat.
Opțiunea de creare a unei liste noi se alege prin apăsarea butonului NEW PLAYLIST care interacționează cu utilizatorul cerându-i numele noii liste printr-o fereastră de dialog. După introducerea numelui, utilizatorul își alege piesele dorite dintr-o listă cu opțiunea de a bifa o casută in dreptul cântecului. Alegerea este multiplă de la 0 la maximul de cântece găsite la scanarea memorie telefonului.
Figura 5.2.1. Creare lista de piese
Aceste funcționalități sunt create cu ajutorului API-urilor oferite de Android. Crearea de noi liste se bazează pe flexibilitatea de lucru cu liste din Java, însă pentru crearea unei noi liste în aplicație, se presupune transfer de date între activități precum și evidența listelor într-o bază de date pentru a putea fi utlizate și într-o altă deschidere a aplicației.
Transferul de date între activități se face prin intermediul Intent-ului folosit la deschiderea noii activități. Pentru a transmite date trebuie apelat pe obiectul de tipul Intent, funcția putExtra(String, Bundle); care transmite exta datele din al doilea parametru. Primul parametru de tipul String este folosit ca etichetă pentru preluarea datelor în noua activitate. Pentru a transmite lista cu piesele găsite în telefon activității care crează o lista nouă este apelat următorul bloc de cod:
Se observă că noua activitate, NewPlistActivity.class este deschisă cu startActivityForResult(Intent, REQUEST_CODE); adică se asteaptă și de la ea să returneze un rezulatat ce constă în date, în acest caz transmite ca rezultat noua listă creată. Acest rezultat este preluat printr-o rutina spreciala numită onActivityResult(int requestCode, int resultCode, Intent data). În cazul de fața această rutină arată astfel:
Listele nou create trebuie ținute în evidența astfel că la o nouă deschidere a aplicației ele trebuie să fie încă acolo, să nu dispară odată cu închiderea activității. Pentru a rezolva acest lucru listele sunt ținute într-o bază de date. Acesta nu este o bază de date efectivă ci sunt păstrate în fișiere, fiecare listă are fișierul propriu cu același nume ca și lista. Atunci cand o nouă listă este creată imedit de crează și un fișier cu același nume în care sunt reținute obiectele de tipul Song. A nu se întelege ca se face o dublare a cântecelor în memorie, ci doar a unor referințe dobiecte. Acest lucru este relativ simplu deoarece înainte de scrie fișierul respectiv, obiectului de tip Playlist, ce refera spre noua listă creată, i se face o copie de tip Gson, un tip de obiecte usor si transparent de transmis. Astfel in fișierul aferent listei curente este scris doar un obiect de tipul Gson care refera spre noua listă creată.
5.2.2 Redare online
În sub-componenta de redare online începe interacțiunea cu serverul. Dacă utilizatorul apasă butonul SERVER PLAYLIST primul lucru care se verifică este acela dacă este setat IP-ul serverul. Acest lucru pentru că serverul nu este unul public și difereă în funcție de rețeaua locală în care este mașina pe care rulează. În meniul aplicației este opțiunea pentru a seta IP-ul. După introducere se va analiza IP-ul introdus din puncul de vedere al construcție să fie în forma generală a unui IP Address. După ce IP-este confirmat el va fi transmis tuturor activitătilor care derivă din acest punct. Se va deschide prima fereastră de interacțiune cu utilizatorul care este asemănatoare cu cea a activității de Redare Locală, însă aici fiind vorba de un Server Multimedia, se va deschide cu mai multe liste inițiale cu piese puse la dispoziție de server. Și aici exista opțiunea de a crea liste noi în funcție de preferințele utilizitaorlui prin apasarea butonului NEW. Funcționalitatea de crearea a noi liste pe server este difierită de cea de creare a noi liste din Redarea Locală. Și aici primul pas este deschiderea ferestrei de dialog pentru numele listei. După introducerea numelui se deschide o fereastră în care se poate căuta dupa numele piesei sau titlul artistului. Aici nu se mai deschide o listă cu toate piesele de pe server, acest lucru ar dura foarte mult. Soluția optimă este căutarea în baza de date a serverului după prefererințe. Se face o cautare după secvența introdusă de utilizator în câmpul de căutare și va returna o listă de piese al căror nume conține secvența respectivă sau un mesaj corespunzător cazului în care nu a fost găsită nucio piesă. Aceasta listă este o listă cu optiune de bifare a cântecelor dorite după care se adaugă în noua listă. Opțiunea de cautare încă mai fiind acolo, dupa o adăugare se mai poate face o căutare și se repetă acesti pași cât este nevoie.
Aceste noi liste creare se pastrează atâta timp cât utilizatorul dorește. Aici spre deosebire de Redarea Locală nu mai este nevoie de transfer de date în tre activități. Aici principiul de lucru dupa care se operează poate fi descris astfel: utilizatorul cere aplicației, iar aplicația cere la server; serverul fiind cel care se ocupa de crearea listelor în baza de date.
Figura 5.2.2 Creere listă și cautare
Cea mai importantă parte a sub-componentei Redare Online este de comunicare cu serverul. Această comunicare se realizează prin trimiteri de cereri spre server folosind acelașî protocol de comunicare. Pentru creerea unei cereri aplicația trebuie sa formeze URL-ul astfel ca serverul când îl decodifică sa ințeleagă cerea. Un URL la care raspunde serverul trebuie sa aibă urmatoarea formă, care este o formă specifică acestui caz particular, derivată din forma generală: “http://IP:8088/search/secventa_după_care_se_face_căutarea”. Acest URL este specific rutinei de cautare dupa piese, însă cererile spre server trebuie sa aibă aceiași structura: protocol, IP:Port,comanda pentru server și atributele comenzii.
Se observă ca serverul răspunde cu obiecte de tipul JSON. S-a folosit acest tip de răspuns deoarece este foarte flexibil și transparent.
Pe langă optiunea de creare de liste noi, utilizatorul are opțiune și de a descărca o piesă de pe server în memorie și dupa folosită în Redarea Locală. Acestă opțiune este selctată prin apăsare pe un obiect de tipul cântec al listelor din server. Descarcarea se face în memoria telefonului. Pentru această funcționalitate a fost nevoie de implementarea unei clase DownloadFileAsync extends AsyncTask<String, String, String> care extinde o clasă specială pentru rulare și tratare a evenimentelor in fundal, fără a fi nevoie de mainipulare a firelor de execuție care se ocupă de acest lucru.
Figura 5.2.2 Descare fișiere
Dacă nu este conexiune la internet sau se întrerupe în timpul unei comunicări utilizatorul este anunțat printr-un mesaj.
5.2.3 Player-ul audio
Player-ul audio este o componentă care este folosită atât pentru redare locală cât și pentru redare online. Activitatea de Player Audio apelează la resursele sistemului de operare pentru a completa interfața cu utilizatorul cu elemente ce arată redarea audio. Pentru acest lucru activitatea Player implementează o interfața specială pentru acest lucru MediaPlayerControl. Implementând această metode automat trebuie implementate metodele ce vin prin definiția relației.
Deschiderea player-ului audio se face automat la apăsarea pe un obiect de tipul Song. La deschiderea activitații de player se transmite intreaga listă din care care face obiectul parte deoarece se vrea ca la finalul redării cântecului curent să înceapă automat un nou căntec. La începerea redării unui cântec apare și o bară de control a redării compusă din mai multe butoane, cum ar fi: start/pauză, urmatorul/anteriorul, derulare înainte/înapoi și o bară ce arată progresul redării cântecului curent, în minute și secunde.
Figura 5.2.3 Redare audio
Se observă din figura 5.2.3 ca player-ul are optiunea de Shuffle care este activată apasănd pe butonul ce indică aceată opțiune. Acestă opțiune se bazează pe generarea unul număr aleatoriu care este folosit la extragerea din listă a obiectului cu acest indicele, obiect ce este trimis spre redare.
Funcționalitatea de redare audio s-a dezvoltat folosind clasa MediaPlayer pentru a reda fișierele audio și clasa MediaControler pentru a oferi utilizatorului controlul asupra redării. De aseamenea se folosește și o instanța de Service pentru ca player-ul să fie capabil să redea și în timp ce utilizatorul nu interacționează cu aplicatia. Pentru acest lucru s-a creat o clasa numită MusicService ce extinde clasa Service. În această clasa este inițializată clasa MediaPlayer setându-i unele proprietăți printre care și cea de redare in continuare chiar daca utilizatorul este inactiv:player.setWakeMode(getApplicationContext(),PowerManager.PARTIAL_WAKE_LOCK);. Urmatorul pas în setarea clasei Service este de a face legatura cu activitatea care pornește player-ul, unde se face practic conexiunea în care se setează lista curentă.
Astfel după terminarea metodei de revenire din construirea noului serviciu va rezulta legatura dintre serviciu și activitatea care redă muzică. Acest lucru se face pentru da startul serviciului atunci cand se pornește și activitatea în care se face redarea pentru a exista o sincronizare necesară rulări în fundal
Dupa creerea funcționalității ce rulează în spate trebuie ca și utilizatorul sa știe acest lucru astfel ca se implemntează funcționlitate și la interfață. Atunci cand intracționează cu alte aplicații, redarea audio se face în fundal arătând acest lucru printr-o imagine sigestivă și titlul cântecului curent.
Figura 5.2.3 Redare audio în fundal
5.3 Serverul Multimedia
Această componentă se poate spune că este fomată din alte două sub-componente: serverul care se ocupă cu tratarea cererilor venite din partea aplicației si serverul care se ocupă cu plelucrarea bazei de date și definirea operațiilor care se pot face asupra ei.
Serverul este creat pe platforma Node.js în spațiul de lucru ExpressJS. Implementarea efectivă a funcționalităților este scrisă în limbajul JavaScript.
5.3.1 Server
Serverul în acest context se refera la partea Serverului Multimedia care se ocupă cu crearea serverului și cu tratarea cererilor venite de aplicație. Pentru a imlementa aceste fucționalități se începe importatea modulelor necesare. Serverul este creat prin intermediul modului Express. Pentru a putea folosi un modul mai întai trebuie solicitat.
Modul Express este folosit ca express.Router() datorită opțiunii acestuia de crea un sistem modulr de funcții responsabile cu raspunsul la cereri. Serverul creat trebuie raspundă prin portul setat de autor. Acest lucru este ușor de setat prin intermediul celor două module specificate mai sus.
Pentru ușurință putem spune ca variabila app reprezintă serverul care răspunde cererilor, astfel ca trebuie realizată legatura cu express.Router() pentru a trata în același fel cererile, practic crearea unei interfețe generale pentru cereri. Legatura se realizează prin:
app.use('/api', router); ceea ce înseamnă ca serverul raspunde la toate cererile adresate în acest mod.
O rutină de tratare a unei cereri este implementată în felul următor:
Această rutină răspunde unei cereri apelate prin metoda GET. În codul de mai sus se tratează o cerere de descărcare a unui cântec. Această cerere este trimisă prin apelarea metodei HttpGet cu parametrul: "http://" + SERVER_IP + ":8088/api/download_song/" + id; . Se observă în primă faza ca protocolul de comunicare este același (HTTP). După se observă ca cererea respectă interfața convenită mai sus “/api/” urmată de cererea efectivă a aplicației, în acest caz de a descărca un cantec identificat prin câmpul id. Serverul după ce a făcut căutarea în baza de date va răspunde aplicației prin res.download(file) prin care îi trimite efectic datele din fișierul audio, iar în consola în care rulează serverul se vor afișa mesajele transmise prin funcția console.log(“mesaj de transmis”);.
Pentru a raspunde la cereri cu date corecte, partea de server care se ocupa de ele este complet dependenta de partea care se ocupa cu baza de date. În felul se solicită modulele așa se solicită și celelalte compnente ale serverului, care se ocupa cu bazele de date.
5.3.2 Baza de date
Această parte a serverului nu este reprezentată doar de o bază de date ci în principal de două sub-componente ale serverului care crează si definesc operațiile asupra bazei de date.
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Pm C Cloud Personal de Muzica (ID: 150130)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
