neděle 3. ledna 2010

Jak obcházím nedostatky Rhythmboxu

Z nějakého nepochopitelného důvodu jsem si z hudebních přehrávačů nejvíce oblíbil Rhythmbox, přestože příliš nesplňuje mé požadavky. Neumí třeba procházet adresářovou strukturu, hudební data organizuje pouze podle ID tagů do vlastní kolekce. Jenže to máte pár výběrů, některé soubory nemají tagy, .. a je to pěkný bordel. Další nepříjemnou vlastností Rhythmoxu na mém systému je to, že často tuhne. Prostě najednou přestane hrát a reagovat. Je třeba ho zabít a nastartovat znovu. Naštěstí to nedělá častěji, než jednou za hodinu :)  (Edit: možná za to může funkce crossfade ve spojení s formátem wma. Opět ten problémový Microsoft.. :) ...


Jenže on má ten program i pár výhod, zejména slušnou podporu D-Bus a bezproblémovou spolupráci s některými dalšími, mnou používanými, programy, jako třeba Cairo-Dock, či Gnome-Do. Dále né všechny hudební programy při zapauzování plynule zvuk ztiší, nemám rád, když to jentak usekne. Detail, ty já rád. (Edit: ale budu asi muset oželet wma, viz výše)
Vezmu to popořádku.

Minimalizace časových ztrát, při vytuhnutí Rhythmboxu
Spouštěč, který jsem si umístil do Cairo-Docku, ale můžete ho dát třeba na Panel, či Plochu, obsahuje následující kód:

bash -c "killall rhythmbox; rhythmbox & sleep 2; rhythmbox-client --play"

Při vytuhnutí programu, stačí jen kliknout na ikonu a Rhythmbox se restartuje a začne hrát skladbu, na které skončil. Spouštěč je možné použít i pro běžné spouštění přehrávače, nejen po vytuhnutí.

Přehrávání kýženého obsahu za pomoci Gnome-Do

Tento program jsem tu již několikrát zmínil a je to opravdu můj nejoblíbenější kousek desktopu. Homepage zde, recenze tu. Dnes mi jde především o jeho plugin Rhythmbox, který umožňuje předávání nalezených hudebních souborů přehrávači, čímž částečně nahrazuje chybějící možnost Rhythmboxu používat pro výběr přehrávaného obsahu adresářovou strukturu disku. Stačí aktivovat Do (v mém případě zkratka Meta+Space) a zapsat první písmena oblíbeného autora, alba, či skladby. Do nabídne, co nalezl, pokud je toho více, můžete seznam prolistovat kurzorovými klávesami. Do se učí, proto vám ze začátku asi bude nabízet místo otevření přehrávačem, zkopírování do clipboardu, nebo otevření složky, ale po pár použitích bude již vědět, co s takovými soubory nejčastěji děláte a upraví vám podle toho nabídku. Do vyhledává v adresářích a souborech, Rhythmbox plugin zajistí odeslání obsahu hudebního adresáře Rhythmboxu, jednotlivé skladby jsou otevírány přehrávačem přiřazeným k tomuto typu souboru, stejně jako když na ně poklepete ve správci souborů (Nautilu). V mém případě je to třeba vlc. Gnome-Do umí také ovládat přehrávání zadáním "next", "pause", atd.

Rhythmbox v Cairo-Docku a to i mimo dock

Cairo-Dock také nabízí plugin pro spolupráci s hudebními přehrávači a právě pouze s Rhythmboxem mi poslední verze spolupracuje. S posledními verzemi programů Exaile a Listen si neporadil, ale to je otázka času nejspíš, kdy se to doladí. Zmíněný plugin se nachází v nastavení Cairo-Docku pod názvem musicPlayer v sekci Controlers a v jeho nastavení je třeba vybrat přehrávač, který má ovládat, případně si upravit chování a vzhled. Lze tak mít v docku obrázek přehrávaného alba s údajem třeba o uplynulém čase skladby, který po najetí myši a kliknutí levého tlačítka funguje jako play/pause a otáčení kolečka přeskakuje po skladbách. Je ale také možné tento plugin od docku oddělit prostým přetažením myší na Plochu. Tento režim je možno použít třeba i jako interaktivní doplněk Conky (viz. obrázek). Zpět do docku se plugin dostane kliknutím na šipku, která se objeví po najetí kurzoru myši.

Přehrávání hudebního obsahu složek vybraných v Nautilu  Rhythmboxem


Jak jsem již zmínil na začátku, Rhythmbox nepodporuje výběr skladeb pro přehrávání přímo z adresářové struktury. Nejjednodušším řešením je skript pro file manager Nautilus, který by vybrané skladby posílal Rhythmboxu k přehrání. Když jsem takový skript začal hledat na webu, byl jsem překvapen, že jsem vlastně nic moc nenašel. Proto jsem se rozhodl takový skript napsat sám, koneckonců je to příležitost se něco nového naučit, zatím umím používat jen zlomek možností, které mi bash dává.
Následující skript je třeba umístit do složky ~/.gnome2/nautilus-scripts/ a nastavit mu spustitelný příznak. (chmod +x ~/.gnome2/nautilus-scripts/Play-Rhythmbox nebo naklikat v Nautilu) a nainstalovat balík libnotify-bin:

$ sudo apt-get install libnotify-bin 

Play-Rhythmbox
#!/bin/bash

[ -e /dev/shm/rp.pid ] && kill -9 $(cat /dev/shm/rp.pid)
echo "$$" > /dev/shm/rp.pid
[ -e /dev/shm/rhyth.enque ] && rm /dev/shm/rhyth.enque
touch /dev/shm/rhyth.enque

if [ ! `pidof rhythmbox` ]; then rhythmbox &
until [ `pidof rhythmbox` ]; do sleep 1; done
sleep 2
fi

filter()
 {
   egrep -i -e '\.mp3$' \
            -e '\.mp4$' \
            -e '\.ogg$' \
            -e '\.wma$' \
            -e '\.flac$' \
            -e '\.wav$' \
            -e '\.m4a$' |
   sed -e 's/\(.*\)/"\1"/g' -e "s/\`/\\\\\`/g"
 }

clean()
 {
   rm /dev/shm/rhyth.enque
   rm /dev/shm/rp.pid
 }

rhythmbox-client --no-start --pause
echo "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" | sed '$d'| while read LINE
   do
      if [ -d "$LINE" ];
         then find "$LINE" -name "*.*"| filter >> /dev/shm/rhyth.enque
         else echo "$LINE"| filter >> /dev/shm/rhyth.enque
      fi
   done

sleep 1

COUNT=$(wc -l /dev/shm/rhyth.enque | awk '{print $1}')

notify-send -i rhythmbox "Play-Rhythmbox" "Přidávám $COUNT souborů"
if [ $COUNT == "0" ]; then clean; exit 1; fi

LIST=$(cat /dev/shm/rhyth.enque | tr "\n" " ")

rhythmbox-client --no-start --clear-queue --pause
eval "rhythmbox-client --no-start $LIST"

eval "rhythmbox-client --no-start --enqueue $LIST"

sleep 1

rhythmbox-client --no-start --next --play
clean
exit 0

Skript akceptuje kromě souborů i složky, které prohledá rekurzivně až do nejnižší úrovně a vyfiltruje všechny soubory s koncovkami definovanými ve funkci filter(). Tento seznam pak pošle Rhythmboxu do fronty a spustí jeho přehrávání. Pro komunikaci s RB slouží program rhythmbox-client, který je jeho součástí. Do fronty umí RB zařadit pouze soubory, které již má v databázi a proto se seznam vybraných skladeb nejdříve importuje (duplicitních importů se netřeba bát, to si RB ohlídá) a teprve potom se seznam pošle do fronty a spustí přehrávání. Systémová informační bublina v pravém horním rohu, by měla zobrazit informaci o počtu přidaných skladeb. Maximální počet souborů, které se mi najednou podařilo do RB procpat, byl něco pod 1500, což bude bezpochyby pro účely, pro které je skript určen stačit.
filter() neobsahuje všechny formáty, které RB podporuje, ale není problém si je v případě potřeby přidat, nebo naopak ubrat. Budu je průběžně doplňovat, pokud na nějaký další potřebný formát vzpomenu.
Pokud není RB před použitím skriptu spuštěn, spustí se.
Také se hodí mít skript, který skladby do fronty jen přidá. Stačí tedy z výše uvedeného skriptu vymazat zelené řádky, uložit ho do stejného adresáře pod jiným jménem a nezapomenout nastavit příznak pro spuštění.

Budu rád za případné korekce, či náměty na vylepšení.

4 komentáře:

  1. uzitecne info, dekuji

    OdpovědětVymazat
  2. Není zač, i já děkuji za info.

    OdpovědětVymazat
  3. Přidávání MP3 složek do Rythmboxu funguje perfektně, jsem nový uživatel Linuxu a tohle mně fakt chybělo. Díky moc...

    OdpovědětVymazat
  4. Rádo se stalo. V blízké době se mi snad podaří dostat do publikovatelné podoby i plugin napsaný v Pythonu, který se objeví hned v první úrovni menu. Instalační balík včetně české lokalizace jsem už udělal před časem, ale trochu mi hapruje právě lokalizace, tak jsem to odložil, neb jsem líný..

    OdpovědětVymazat

Zkuste prosím při komentováni používat místo volby Anonymní volbu Název/adresa URL, kde vyplníte nějakou přezdívku, adresu zadávat nemusíte. Vědět, které příspěvky jsou od jednoho člověka, je fajn. Díky.

Pokud by se vám náhodou odeslaný komentář na stránce nezobrazil, vytáhnu ho z koše hned jak si toho všimnu. I Google spam filter se občas sekne.