Publisert 22. Januar 2011
Vi har et knakende flott mediacenter her hjemme. Myth gjør jobben med videoavspilling til en lek. Dessverre er ikke det saken når det gjelder musikkavspilling. MythMusic er treg, uoversiktelig og generelt irriterende. Så hva gjør man når man vil spille av musikk på stereoanlegget? Man skriver noe selv.
En metode er å starte et alternativt program på mediacenteret, som f.eks Banshee. Men når man kun bruker fjernkontroll til å styre er det å skifte program forferdelig upraktisk. En annen metode er å styre det fra en annen PC med f.eks Cplay i konsoll, eller å kjøre f.eks XMMS via SSH. Greit nok om man er kjapp på tastaturet, men når man bor sammen med ei som ikke er like datakyndig som meg selv, byr det på problemer.
Tanken på å kunne styre musikken fra nettleseren kom kjapt opp. Siden både jeg og Stine har bærbar PC, og bruker disse omtrent hele tiden, er det greit å kunne styre musikken derfra.
Under GNU/Linux har man et program som heter mpg123, som man lett kan spille av mp3-filer med i konsollet (tekst-modus). Kommandoen kjøres enkelt og greit med mpg123 sang.mp3. Og ettersom man med PHP har muligheten til å kjøre kommandoer, var det et logisk valg. Et eksempel i PHP kan være:
Men det hele er ikke helt uten problemer:
Løsningen på det første problemet er å la Apache kjøre som den samme brukeren jeg bruker. Dette er selvfølgelig ikke noen god løsning med tanke på sikkerhet, da denne brukeren da har tilgang til å kjøre alt som min bruker kan. Men siden dette kun gjelder mediacenteret, er det ingenting fornuftig å "utnytte" der. Det eneste Apache brukes til, er nemlig å styre musikken, og både brukernavn og passord er annerledes enn det jeg bruker på mine andre maskiner.
Endring av brukeren Apache bruker gjøres i /etc/apache2/apache.conf. Endre user og group til din bruker, og restart Apache med /etc/init.d/apache2 restart.
Problem nummer to løses med et program kalt mikehup, som lukker stdin, stdout og stderr, slik at mpg123 kan kjøres i bakgrunnen. Last ned programmet, pakk ut, og kjør sudo make & sudo make install, og programmet blir installert i /usr/local/bin. Man kan dermed bruke følgende kommando i PHP:
Man kan dermed spille av mp3-filer (og sikkert nok ogg/flacc, uten at jeg har prøvd) med PHP. Resten av løsningen består enkelt og greit av å liste mapper og filer med PHP, og kjøre programmet når en fil blir valgt.
Når man bruker mikehup og mpg123 er man nødt til å bruke backslash på mellomrom i filnavn. Dette vil ikke fungere:
Dette vil derimot fungere:
Man må dermed benytte str_replace for å sørge for at mappe og filnavn blir riktig. Jeg endte opp med en kode som kun støtter ett nivå med mapper, men dette er selvsagt enkelt å utvide. Kildekoden ble til slutt seende slik ut:
Musikkbibliotek "); if ($_POST['act'] == "stop") { exec("killall mpg123"); echo ("Avspilling stoppet.
"); $_SESSION['spilles'] = ""; } else if (!$_GET['file'] == "") { $dir = $_GET['dir']; $dir = str_replace(" ", "\ ", $dir); $dir2 = "$basedir/$dir"; $file = $_GET['file']; $file2 = str_replace(" ", "\ ", $file); $file2 = "$dir2/$file2"; exec("killall mpg123"); exec("mikehup mpg123 \"$file2\" &"); $_SESSION['spilles'] = $file; } if (!$_SESSION['spilles'] == "") { $file = $_SESSION['spilles']; echo ("Nå spilles: $file
"); } if (!$_GET['dir'] == "") { $dir = $_GET['dir']; $dir2 = "$basedir/$dir"; echo ("Muskkbibliotek - $dir
"); echo (""); if ($handle = opendir($dir2)) { echo ("
Dermed kan man styre musikken fra nettleseren uten problemer. Ønsker man passordbeskyttelse er dette enkelt å gjør med enten PHP eller htaccess.
Jeg har fortsatt litt problemer med sære tegn som & osv, men det merkes i liten grad.
Det er mulig det finnes enklere måter å gjøre dette på, det finnes blant annet et par slike prosjekter fra før av, uten at jeg har fått noen av dem til å fungere. Uansett er ikke dette en spesielt vanskelig løsning om man har litt teksnisk innsikt. Skulle noen derimot ha forslag til bedre løsninger tar jeg gjerne imot dem.
Svar på denne kommentarenEivind
09. Januar 2008
Hva med MPD? Finnes endel webklienter til den.
Svar på denne kommentarenAudun
09. Januar 2008
Ja, det gjør det, og jeg har kikket på noen av dem. Problemet er at jeg har faktisk ikke fått en eneste klient til å fungere. Mulig jeg har gjort noe totalt feil, men et eller annet sted har alle trynet. Også kan jeg vel ikke skjule av jeg liker utfordringen med å lage noe selv og :)
Svar på denne kommentarenEivind
10. Januar 2008
MPD er litt tricky å få til. http://gentoo-wiki.com/HOWTO_MPD den er rettet mot gentoo. Men fulgte selve config delen når jeg satt det opp på ubuntu for noen uker siden. Funket helt fint. tips: telnet mot localhost og porten mpd kjører på kan du se om den faktisk kjører.
Svar på denne kommentarenAudun
16. Januar 2008
Takk for tipset, får se om behovet for å bytte system melder seg.
Du svarer på en kommentar fra . angre