Musik auf dem Linux-PC unkonventionell mit Shell oder Smartphone steuern

Verbindet man seinen Linux-PC mit hochwertigen Aktivboxen oder mit der Stereo- oder Heimkino-Anlage, so kann der Linux-PC als hochwertigen Abspieler für Internetradio-Streams und für lokal gespeicherte Musik und Hörspiele dienen.

Die Steuerung kann komfortabel über gut ausgestattete Mediaplayer wie Amarok, Rhytmbox, Cantata, MythTV oder VLC erfolgen.

Hier sollen zwei weniger verbreitete Steuerungsmöglichkeiten beschrieben werden – per Kommandozeile/Skript oder per Smartphone. Gemeinsame Basis ist der MPD (Musik Player Daemon).

Die Einrichtung von MPD ist meist schnell erledigt. Auf openSUSE kann man MPD und den MPD-Client wie folgt installieren, wenn das Multimedia-Repository Packman aktiviert ist:

# zypper install mpd mdclient

Unter Ubuntu geht das mit

# apt-get install mpd mpc

Nun sollte man im MPD-Konfigurationsverzeichnis noch das Verzeichnis mit den Musik- oder Hörspieltiteln eintragen. Systemweit geht das in der Datei /etc/mpd.conf, benutzerspezifisch in ~bv/.mpdconf.

music_directory                "/daten/musik"

Damit MPD vom lokalen Netz erreichbar ist, sollten Bind-Adresse und Port auskommentiert oder auf Standard-Einstellungen stehen. Außerdem sollte die Firewall den TCP-Port 6600 geöffnet haben.

# For network
#bind_to_address                "any"
# And for Unix Socket
#bind_to_address                "~/.mpd/socket"
# Port
#port                           "6600"

In lokalen Netzwerken mit vielen Benutzern kann es sinnvoll sein, MPD mit einem Passwort zu sichern und die Firewall restriktiver einzustellen, sodass z.B. nur bestimmte Smartphones mit festgelegten MAC-Adressen MPD steuern können.

Gestartet wird MPD als Benutzer direkt mit

# mpd

oder über einen Autostart-Eintrag des jeweiligen Desktops.

Für einen ersten Test werden alle gefundenen Musikstücke aufgelistet, ein Musikstück davon wird in die Playlist gestellt und die Wiedergabe wird gestartet:

# mpc listall
[...]Lana Del Rey/Video Games/01 - Video Games.mp3
[...]
# mpc add "Lana Del Rey/Video Games/01 - Video Games.mp3"
# mpc playLana Del Rey - Video Games
[playing] #1/1   0:00/4:01 (0%)
volume: n/a   repeat: off   random: off   single: off   consume: off

Der Kommandozeilen-MPD-Client „mpc“ bringt eine große Zahl an Befehlen mit, die über „mpc help“ oder ‚man mpc'“ angezeigt werden können:

# mpc help
[...]Commands:
  mpc                                                   Display status
  mpc add <uri>                                         Add a song to the current playlist
  mpc crop                                              Remove all but the currently playing song
  mpc current                                           Show the currently playing song
  mpc del <position>                                    Remove a song from the current playlist
  mpc play [<position>]                                 Start playing at <position>
  mpc next                                              Play the next song in the current playlist
  mpc prev                                              Play the previous song in the current playlist
  mpc pause                                             Pauses the currently playing song
  mpc toggle                                            Toggles Play/Pause, plays if stopped
  mpc cdprev                                            Compact disk player-like previous command
  mpc stop                                              Stop the currently playing playlists
  mpc seek [+-][HH:MM:SS]|<0-100>%                      Seeks to the specified position
  mpc clear                                             Clear the current playlist
  mpc outputs                                           Show the current outputs
  mpc enable [only] <output # or name> [...]            Enable output(s)
  mpc disable [only] <output # or name> [...]           Disable output(s)
  mpc toggleoutput <output # or name> [...]             Toggle output(s)
  mpc shuffle                                           Shuffle the current playlist
  mpc move <from> <to>                                  Move song in playlist
  mpc playlist [<playlist>]                             Print <playlist>
  mpc listall [<file>]                                  List all songs in the music dir
  mpc ls [<directory>]                                  List the contents of <directory>
  mpc lsplaylists                                       List currently available playlists
  mpc load <file>                                       Load <file> as a playlist
  mpc insert <uri>                                      Insert a song to the current playlist after the current track
  mpc save <file>                                       Save a playlist as <file>
  mpc rm <file>                                         Remove a playlist
  mpc volume [+-]<num>                                  Set volume to <num> or adjusts by [+-]<num>
  mpc repeat <on|off>                                   Toggle repeat mode, or specify state
  mpc random <on|off>                                   Toggle random mode, or specify state
  mpc single <on|off>                                   Toggle single mode, or specify state
  mpc consume <on|off>                                  Toggle consume mode, or specify state
  mpc search <type> <query>                             Search for a song
  mpc searchadd <type> <query>                          Search songs and add them to the current playlist
  mpc find <type> <query>                               Find a song (exact match)
  mpc findadd <type> <query>                            Find songs and add them to the current playlist
  mpc searchplay <pattern>                              Find and play a song in the current playlist
  mpc list <type> [<type> <query>]                      Show all tags of <type>
  mpc crossfade [<seconds>]                             Set and display crossfade settings
  mpc clearerror                                        Clear the current error
  mpc mixrampdb [<dB>]                                  Set and display mixrampdb settings
  mpc mixrampdelay [<seconds>]                          Set and display mixrampdelay settings
  mpc update [<path>]                                   Scan music directory for updates
  mpc sticker <uri> <get|set|list|delete|find> [args..] Sticker management
  mpc stats                                             Display statistics about MPD
  mpc version                                           Report version of MPD
  mpc idle [events]                                     Idle until an event occurs
  mpc idleloop [events]                                 Continuously idle until an event occurs
  mpc replaygain [off|track|album]                      Set or display the replay gain mode
  mpc channels                                          List the channels that other clients have subscribed to.
  mpc sendmessage <channel> <message>                   Send a message to the specified channel.
  mpc waitmessage <channel>                             Wait for at least one message on the specified channel.
  mpc subscribe <channel>                               Subscribe to the specified channel and continuously receive messages.

Interessant ist, dass man eine große Musiksammlung schnell und flexibel mit Linux-Mitteln durchsuchen kann. Alle Titel von Lana Del Rey findet man z.B. über ein normales „grep“ oder mit dem „search“-Kommando:

# mpc listall | grep -i lana
Lana Del Rey/Video Games/01 - Video Games.mp3
Lana Del Rey - Born to Die/01 - Born to Die.mp3
Lana Del Rey - Born to Die/02 - Off to the Races.mp3
Lana Del Rey - Born to Die/03 - Blue Jeans.mp3
Lana Del Rey - Born to Die/04 - Video Games.mp3
Lana Del Rey - Born to Die/05 - Diet Mountain Dew.mp3
Lana Del Rey - Born to Die/06 - National Anthem.mp3
Lana Del Rey - Born to Die/07 - Dark Paradise.mp3
Lana Del Rey - Born to Die/08 - Radio.mp3
Lana Del Rey - Born to Die/09 - Carmen.mp3
Lana Del Rey - Born to Die/10 - Million Dollar Man.mp3
Lana Del Rey - Born to Die/11 - Summertime Sadness.mp3
Lana Del Rey - Born to Die/12 - This Is What Makes Us Girls.mp3
# mpc search Artist Lana

Mit MPC-Kommandos kann man eine Playlist zusammenstellen (mpc add), anzeigen (mpc playlist) und steuern (mpc next, mpc play u.a.):

# mpc add "Lana Del Rey/Video Games/01 - Video Games.mp3"
# mpc add "Lana Del Rey - Born to Die/08 - Radio.mp3"
# mpc add "ABBA - Gold - Greatest Hits/04 - Mamma Mia.mp3"
# mpc playlist
Lana Del Rey - Video Games
Lana Del Rey - Radio
ABBA - Mamma Mia
# mpc next
volume: n/a   repeat: off   random: off   single: off   consume: off
# mpc
Lana Del Rey - Video Games
[playing] #1/3   2:10/4:01 (53%)
volume: 92%   repeat: off   random: off   single: off   consume: off

Für die gängigen Smartphone-Betriebssysteme gibt es komfortable Apps zur Steuerung des MPD auf dem Linux-PC. Manche können z.B. Album-Cover anzeigen. Viel mehr als die IP-Adresse des Linux-PCs brauchst man in den Apps nicht zu konfigurieren. Empfehlenswert ist z.B. MPDroid für Android.

Internet-Radio kann MPD übrigens auch abspielen. Das Erstellen von Internetradio-Einträgen für MPD ist auf der Kommandozeile allerdings etwas umständlich, weil es z.B. keine direkte Unterstützung für gängige Radio-Playlist-Formate wie M3U gibt und weil MPD keine eigene Datenbank mit Internetradio-Stationen enthält. Prinzipiell geht es aber. Hier wird z.B. die Radiostation 1Live erstellt und abgespielt:

# mpc add $(wget -q -O- http://www.wdr.de/wdrlive/media/einslive.m3u | grep http://)
# mpc play
http://1live.akacast.akamaistream.net/7/706/119434/v1/gnl.akacast.akamaistream.net/1live
[playing] #1/1   0:00/0:00 (0%)
volume: n/a   repeat: off   random: off   single: off   consume: off

Der Musikplayer Cantata basiert ebenfalls auf MPD, hat aber eine umfangreiche Liste an Internet-Radiostationen an Bord. Aktuell kann man einen MPD-Server jedoch nicht gleichzeitig über Cantata auf dem Desktop und über Smartphone steuern, da Cantata MPD so startet, dass MPD nur lokal verfügbar ist.

Übrigens kann man manche Musikplayer auch über die Kommandozeile steuern. Beispielsweise kann man die Radio-Applikation Kradio über DBus steuern. Hier wird z.B. Kradio gestartet, dann wird die nächste Radiostation eingestellt und danach Kradio wieder beendet.

# kradio4 &
# dbus-send --dest=net.sourceforge.kradio4-$(pidof kradio4)  \
          --print-reply  \
          /KRadio4/Instance1 \
          net.sourceforge.kradio.nextStation
# dbus-send --dest=net.sourceforge.kradio4-$(pidof kradio4)  \
          --print-reply  \
          /KRadio4/Instance1 \
          net.sourceforge.kradio.powerOff