wtorek, marca 31, 2009

Odtwarzanie muzyki z linii komend

Bardzo często zdarza mi się odtwarzać muzykę mplayerem. Jest to odtwarzacz konsolowy, co sprawia pewne kłopoty. Brakuje mu także opcji odtwarzania wszystkich utworów z danego katalogu i podkatalogów.

Oto rozwiązanie tego problemu za pomocą narzędzia find:

$ find -type f -printf "`pwd`/%p\n" | shuf > /tmp/pls && mplayer -playlist /tmp/pls

Kilka uwag:
- używam komendy "shuf" aby zrandomizować listę odtwarzanych utworów. mplayer posiada opcję -shuffle, ale powoduje ona losowanie przy każdej zmianie utworu. shuf ustala jedną permutację listy, dzięki czemu można się cofnąć do odegranego już utworu
- lista tworzona jest w /tmp/pls. Można uprościć polecenie find jeżeli zapiszemy ją w aktualnym katalogu:

$ find -type f | shuf > pls && mplayer -playlist pls
Ja nie chcę jednak sobie zaśmiecać katalogów playlistami.

Można wreszcie nie używać pliku pomocniczego, a korzystać z przekierowania strumieni:

$ find -type f | shuf | mplayer -playlist -

Wtedy jednak nie można sterować mplayerem, np. zmniejszając głośność lub zmieniając utwór. W tym momencie shuf staje się zbędny.

$ find -type f | mplayer -shuffle -playlist -

Na dobrą sprawę możemy pominąć także parametr "-type f" który mówi find by wyświetlał jedynie pliki, a pomijał katalogi.

$ find | mplayer -shuffle -playlist -

W ostateczności można też słuchać plików w kolejności podawanej przez find:

$ find | mplayer -playlist -

I tak wygląda komenda od której zacząłem :-)