10. kesäkuu 2010, 12:48

MPD-kirjastoja ja asiakkaita

Huu, kunhan huomisen tentin (Ihminen ja vuorovaikutteinen teknologia) vetäisee alta pois, malttaa viimein alkaa tammikuussa aloitettuun, mutta sittemmin keskeytyneeseen projektiin kirjailla uusi ja uljas MPD-lukukirjasto C++:lle.

Ehkä se projekti jää hautautumaan lopullisesti Pythonin ja Haskellin alle, mutta mielestäni alku oli jo melko lupaava. Ne työkalut, joita joudun käyttämään, ovat vahvasti proseduraalista C:tä erilaisin muistipuukotuksin, joten tehtävä ei ole sinänsä aivan helppo. Oliomallia ajattelin kuitenkin käyttää viimeiseen asti. Suunnittelu tuotti vähän vaikeuksia, mutta jos otan malliksi vaikka Javan vastaavan kirjaston organisoinnin, ei pitäisi tulla ongelmia siinäkään.

Sitten mitä siitä pitäisi tulla tuloksena, on vähän vielä työn alla. Hieno ja uljas levynsoitteluohjelma — siis painottuisi levyihin, albumeihin. Ei kappaleisiin. Jos ohjelmalla hakee vaikka kappalenimellä tietokantaa, tuloslistalla olisi pelkkiä levyjä. Joku puurakenne voisi tietysti olla kultainen keskitie: näinhän se Amarokissa oli. Kyllä kyllä. Integraatio MPD:hen on periaatteessa helppo toteuttaa: sehän luonnistuu valmiilla työkaluilla ja esimerkkikoodilla, jota C-kielinen libMPD ja sen hieman korkeampitasoinen (abstraktiotasoltaan korkeampi) libMPDclient tarjoavat.

Integraatiota Internetin sosiaalisten musiikkipalvelujen kanssa en ajatellut toteuttaa — onhan yksi MPD:n hienous juuri siinä, että yksi asiakasohjelma voi hoitaa käyttäjä-tietokone -välisen interaktion (vaikkapa oma suosikkini GMPC) ja toinen voi samanaikaisesti hoitaa tietokone-tietokone -interaktioita (esimerkiksi Last.fm:ään päivittelemisen). Yksikään scrobblaileva MPD-asiakasdaemoni ei ole ollut täysin toimintavarma, mutta scmpc pääsee mielestäni ihan kiitettäviin tuloksiin. Hieman älykkäämpi se saisi olla.

Entäs sitten tämä suuri ja mahtava Discogs? Sehän tarjoaa nimittäin paljon hyvää sarallaan. Niin, Discogs tarjoaisi HTTP-välitteisen XML-rajapinnan kaikkeen sen tietokantoihin. Rajoja on muutamia, esimerkiksi 4000 pyynnön vuorokausitahti voi olla hankala, jos käyttäjä ensikertaa käyttelee ohjelmaa ja haluaa lisäillä koko levykokoelmansa kuivana sisään. Ja eihän Discogs yksinään kovin kattava edes ole… se on erikoistunut kovasti elektroniseen tarjontaan.

Mutta pirun hyvin siellä tuntuu kaikkea olevan. Erityisen lempeitä elektronisia sävelmiä olen jo meinannut ostaa sieltä. Hitto soikoon, se vielä käy kukkarolle. Jos isken omaan profiiliini kattavan listan levyistä, joita haluan ostaa, osaa Discogs ryhmitellä niitä siten, että keneltä myyjältä löytyisi eniten. Säästöä postimaksuissa. Onneksi vielä ulkomailta on halpaa tilata käytettyjä levyjä. Neljä euroa vinykän postittaminen Alankomaista, kun Suomessa se olisi järjestään sisämaan postina vähintään seitsemän euroa.

Niin, takaisin asiaan. Jos ja kun kirjailen MPD-kirjastoni kasaan, ajattelin demota sitä sitten kirjailemalla pienen asiakasohjelman. Eräänlainen ‘emotion engine’ siitä kai olisi tuleva: käyttäjä voisi varsin vapaasti muotoilla levypyyntönsä, ja ohjelma vastaisi parhaansa mukaan. MPC:n syntaksi on kieltämättä hyvä, mutta toteutus on jätetty puolitiehen, ja meno on aika eläimellistä sen myötä. MPC tukee esimerkiksi seuraavanlaista komentoa: mpc search album Meddle | mpc add, mutta sitä ennen pitäisi muistaa tyhjentää soittolista, ja jälkikäteen pitäisi laittaa se vielä soimaan. Paljon muistettavaa, paljon kankeutta. Entäs jos haluaisi soittaa kaksi levyä peräkkäin? No se on melko sujuvaa, mutta tiettyjen kappaleiden repiminen juuri tietyiltä levyiltä muuttuu jo mahdottomaksi. Jotain lempeyttä ja kepeyttä olen ajatellut lisätä omaan asiakkaaseeni. Senkin parseroinnin voisi toteuttaa yhdeksi yksittäiseksi luokaksi, jonka voi lisätä vaikka minkälaiseen viritelmään. Luokka, jota voitaisiin kutsua merkkijonolla yksinään:

MPD_Jeeves jeeves = new MPD_Jeeves(MPD_instance);
jeeves.query("play Meddle mfsl");
jeeves.query("replace C-Numb Pulse with C-Numb gdansk");

Ja Jeeves hoitaisi. Jälkimmäinen esimerkki vaatii vielä säätöä, ja tulisi olemaan aika työläs koodatakin. En tiedä. Käyttäjä voisi lisäillä suosikkilistoilleen kappaleita lempinimien kanssa, josta tämä moottori voisi tehdä hakuja. Silloin suosikkiraidat voi valita vaikkapa juuri tyyliin “C-Numb” ja “Stairway”.

No, tämä kaikki on vielä auki. Huomisen tentin jälkeen alkaa olla aikaa, ehkä kenties. Muutto vie aikansa, se on vissi. Mutta ei tavaraa kuitenkaan kanniskella alituiseen. Aika näyttää; vain yksi asia on varma: sekä MPC että GMPC ovat riittämättömiä kunnolliseen työskentelyyn.

Tageja: , , ,

---
---

---

Aiheen vierestä