Tag: mc

  • MPD hack v Ruby

    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.