Archive from January, 2009

* MPD hack v Ruby

17. January 2009, Jakub Horák. Categorized as Scripts.


Vždy jsem byl příznivcem hudebního přehrávače Amarok. Nedávno mě ale jeho autoři naštvali. V nové verzi 2.0 jako databázový backend použili MySQL embedded. To je sice pěkné, ale tahle vlastnost je dostupná jenom v nejnovějších experimentálních verzích MySQL 5.1. Vzhledem k tomu, že MySQL potřebuji do práce, nechci nainstalovat nestabilní verzi, která se chová jinak než verze MySQL na ostrém serveru.

Před pár lety jsem používal jako hudební přehrávač MPD, a tak mě napadlo, že bych se mohl podívat, jak se za tu dobu změnil. Přehrávač MPD je zajímavý hlavně svojí architekturou — vlastní MPD se chová jako server a existuje spousta klientů, které se k němu připojují a doplňují přehrávací GUI. Vzhledem k tomu, že dávám přednost rychlým konzolovým aplikacím, vybral jsem si klienta ncmpcpp, který má jednoduché, ale přitom efektivní rozhraní.

Oproti Amaroku mi ale chyběla jedna důležitá vlastnost hudebního přehrávače — možnost přehrávat hudbu z externího disku. Amarok to řeší tím způsobem, že kromě songů z vlastní databáze umí přehrát i soubory vybrané v integrovaném prohlížeči souborů (KPart). Pro MPD je tohle bohužel docela velký problém. Rozhodl jsem se proto napsat si vlastní hack 🙂

Můj oblíbený filemanager Midnight Commander umí samozřejmě spustit hudební soubory jakýmkoliv programem mu řeknu. Takže mi stačilo napsat prográmek, který vybrané hudební soubory přidá do playlistu MPD. V praxi to provádím tak, že ve složce na lokálním disku, kam MPD může, vytvořím symbolický odkaz na soubor z externího disku. Když pak MPD pustí aktualizaci databáze, zaindexuje i tyto soubory a tím pádem už je možné je snadno přidat do playlistu a přehrát.

Napsat takový krátký program v kompilovaném jazyce mi přišlo nevhodné a v PHP zas jako naprostá prasárna. Ze skriptovacích jazyků se podle mě k tomuto účelu nejvíc hodí jeden z jazyků Perl, Python nebo Ruby. Ačkoliv každý z této trojice jazyků má něco do sebe, nakonec jsem si vybral Ruby. Na Ruby se mi líbí jeho filozofie “Všechno je objekt” a “Princip menšího překvapení”. Ruby má také interaktivní shell zvaný IRB, což je docela pěkná věc, ve které se dají zkoušet rozmanité jazykové konstrukty a kterou používám místo kalkulačky.

Zdrojový kód hacku je ke stažení zde. Pro ovládání MPD používám knihovnu librmpd.rb.

Instalace

Otevřete mpdplay.rb v editoru a nastavte MUSIC_DIR na složku s hudbou, jakou máte v konfiguraci MPD.

$  vi mpdplay.rb

Dále spusťte:

#  mv mpdplay.rb /usr/local/bin/mpdplay
#  chmod +x /usr/local/bin/mpdplay.rb
#  mv librmpd.rb /usr/local/lib/
$  vi .mc/menu

Na konec souboru .mc/menu přidejte text:

|   Enqueue
mpdplay -a %f
\   Play
mpdplay %f

Otevřete .mc/bindings

$  vi .mc/bindings

Upravte

regex/\.([mM][pP]3)$
View=%view{ascii} mpg123 -vtn1 %f 2>&1 | sed -n '/^Title/,/^Comment/p;/^MPEG/,/^Audio/p'
Open=mpdplay %f
 
regex/\.([oO][gG][gG])$
View=%view{ascii} ogginfo %s
Open=mpdplay %f

A je to! Kdykoliv teď chci přehrát soubor, zmáčknu v Midnight Commanderu F2 a \ pro přehrání nebo | pro zařazení do playlistu.

Tags: , , .