Der Music Player Daemon lässt sich über ein textorientiertes Netzwerkprotokoll steuern. Man kann darüber Wiedergabelisten verwalten und Musik wiedergeben. Der Daemon lauscht standardmäßig auf Port 6600.
Zusätzlich zum Daemon installieren wir Werkzeuge zu dessen Steuerung sowie Codecs für Internetradio und Shoutcast.
apt install mpd mpc lame
Der Daemon muss vor allem den Pfad zur Musiksammlung kennen.
/etc/mpd.confmusic_directory "/srv/music"
Vor Inbetriebnahme müssen wir die interne Datenbank der Metadaten aktualisieren.
mpc update
Der Daemon speichert seine Daten in folgenden Dateien:
/var/lib/mpd/state
/var/lib/mpd/playlists
/var/lib/mpd/tag_cache
/var/lib/mpd/sticker.sql
Auf einem PC läuft meist der PulseAudio Daemon. Darüber lässt sich Musik beliebig im Netzwerk verteilen.
audio_output { type "pulse" name "Pulse" }
Auf einem Server können wir die Musik via ALSA auch direkt über den eingebaute Soundchip auf Lautsprecher ausgeben.
audio_output { type "alsa" name "Speaker" device "hw:1,0" }
Falls kein (hochwertiger) Soundchip zur Verfügung steht, können wir als Alternative einen DAC per USB anschließen.
audio_output { type "alsa" name "FiiO DAC" device "hw:2,0" mixer_type "hardware" }
Um internetfähige Radios mit Musik zu versorgen, können wir einen HTTP-Datenstrom einrichten…
audio_output { type "httpd" name "HTTP Stream" encoder "lame" port "8000" quality "5.0" format "44100:16:1" }
…oder via Shoutcast senden.
audio_output { type "shout" encoding "mp3" name "Shout Stream (mp3)" host "icecast" port "8000" mount "/mpd.mp3" password "hackme" quality "0" # highest format "44100:16:1" }
Das zeilenorientierte Protokoll eignet sich gut für manuelle oder skriptgesteuerte Interaktion mit dem Daemon. Zeichenkodierung ist UTF-8.
netcat localhost 6600 OK MPD version 0.18.0 command_list_begin volume 86 play 7 currentsong command_list_end file: unsorted/teen_spirit.mp3 Last-Modified: 2012-12-23 18:23:45 Time: 215 Artist: Nirvana Title: Smells Like Teen Spirit Album: Nevermind Pos: 7 Id: 42 OK
Diese Auflistung soll nur einen Überblick über die verfügbaren Kommandos und Optionen vermitteln und erhebt keinen Anspruch auf Vollständigkeit. Als authoritative Quelle gelten nur die Manpages und die offizielle Dokumentation.
Kommando | Parameter | Beispiel | Beschreibung |
---|---|---|---|
Status | |||
clearerror | Löscht die aktuelle Fehlermeldung | ||
currentsong | Gibt Metadaten des aktuellen Lieds aus | ||
status | Gibt Status der Wiedergabe aus | ||
stats | Anzahl der Künstler und Lieder, Gesamtspieldauer und Laufzeit | ||
Wiedergabe | |||
play | Pos | 1 | Startet die Wiedergabe (an dieser Position) |
playid | Id | 1 | Startet die Wiedergabe mit diesem Lied |
pause | true | false | 0 | Pausiert die Wiedergabe oder setzt sie fort |
stop | Beendet die Wiedergabe und vergisst die Position | ||
seek | Pos Seconds | 1 120 | Spult das Lied an die Position |
seekid | Id Seconds | 1 120 | Spult das Lied an die Position |
seekcur | Seconds | 120 | Spult im aktuellen Lied an die Position |
previous | Springt zum voerhergehenden Lied | ||
next | Springt zum nächsten Lied | ||
setvol | Percent | 80 | Setzt Lautstärke von 0 (Aus) bis 100 (Maximum) |
[-]Percent | 50 | Ändert die Lautstärke relativ | |
crossfade | Seconds | 5 | Setzt Überblendungsdauer beim Übergang von Liedern |
mixrampdb | Decibel | -17 | Dämpfung, -17 Decibel sind gut |
mixrampdelay | Seconds | 5 | Verzögerung |
random | true | false | 0 | Wählt das nächste Lied zufällig |
repeat | true | false | 0 | Wiederholt die Wiedergabeliste |
single | true | false | 0 | Spielt nur das aktuelle Lied – endlos im repeat Modus |
consume | true | false | 0 | Entfernt gespielete Lieder aus der Wiedergabeliste |
replay_gain_mode | off | track | album | auto | ||
Wiedergabeliste | |||
add | Url | /song.mp3 | Hängt Lied hinten an |
addid | Url Pos | /song.mp3 20 | Hängt Lied irgendwo ein |
clear | Entfernt alle Lieder | ||
delete | Pos[:Pos] | 2:4 | Entfernt das aktuelle Lied oder eine Spanne |
deleteid | Id | 2 | Entfernt irgendein Lied |
move | Pos[:Pos] Pos | 2:4 20 | Verschiebt das aktuelle oder mehrere Lieder auf einen anderen Platz |
moveid | Id Pos | 2 20 | Verschiebt ein Lied auf einen anderen Platz |
swap | Pos Pos | 2 20 | Vertauscht zwei Lieder |
swapid | Id Id | 2 20 | Vertauscht zwei Lieder |
Listet URIs aller Lieder auf | |||
playlistid | Id | 2 | Zeigt ein bestimmtes Lied |
playlistinfo | Pos:Pos | 2:4 | Zeigt alle Lieder oder Lieder in einer Spanne |
playlistfind | Tag Value | artist Beyonce | Zeigt Lieder mit exakten Übereinstimmungen |
playlistsearch | Tag Value | artist B | Zeigt Lieder mit schwammigen Suchkriterien |
plchanges | Version | 7 | Listet Änderungen seit einer älteren Version auf |
plchangesposid | Version | 7 | |
prio | Priority Pos:Pos … | 1 2:4 | Weist Priorität beim shuffle zu |
prioid | Priority Id … | 1 2 | Weist Priorität beim shuffle zu |
shuffle | Pos:Pos | 2:4 | Randomisiert die Sortierung (einer Spanne) unter Beachtung von Prioritäten |
Liedsammlungen | |||
load | Name [Pos:Pos] | bestof 2:4 | Ersetzt (Teile der) Wiedergabeliste |
save | Name | bestof | Persistiert die Wiedergabeliste |
rename | Name NewName | bestof worst | Benennt eine Liedsammlung um |
rm | Name | bestof | Löscht eine Liedsammlung |
listplaylists | Listet alle gespeicherten Liedsammlungen auf | ||
listplaylist | Name | bestof | Listet URIs in einer Liedsammlung auf |
listplaylistinfo | Name | bestof | Listet Metadaten in einer Liedsammlung auf |
playlistadd | Name Url | bestof /s.mp3 | Hängt Lied an eine Liedsammlung an |
playlistmove | Name Id Pos | Sortiert Liederer innerhalb einer Liedsammlung um | |
playlistdelete | Name Pos | Entfernt Lied aus einer Liedsammlung | |
playlistclear | Name | Entfernt alle Lieder aus einer Liedsammlung | |
Datenbank | |||
list | Tag Value | artist Beyonce | Listet eindeutige Etiketten eines Typs (mit Einschränkungen) auf |
Url | /heap | Listet URLs (in einem Verzeichnis) auf | |
Url | /heap | Listet Metadaten (in einem Verzeichnis) auf | |
lsinfo | Url | /heap | Listet Metadaten (in einem Verzeichnis) auf |
count | Tag Value | artist Beyonce | |
find | Tag Value … | artist Beyonce | Search exact match |
findadd | Tag Value … | artist Beyonce | Add search results to current playlist |
search | Tag Word … | artist B | Search substring |
searchadd | Tag Word … | artist B | Add search results to current playlist |
searchaddpl | Name Tag Word | bestof artist B | Hängt Suchergebnisse an die Wiedergabeliste |
update | Url | /heap | Aktualisiert die (oder Teile der) Datenbank |
rescan | Url | /heap | Dito, aber auch unveränderte Dateien |
sticker set | Url Name Value | /song.mp3 foo bar | Erzeugt oder ändert ein Etikett |
sticker get | Url Name | /song.mp3 foo | Liefert ein Etikett |
sticker list | Url | /song.mp3 | Listet alle Etiketten auf |
sticker find | Url Name | /song.mp3 foo | |
sticker delete | Url Name | /song.mp3 foo | Entfernt ein Etikett |
Verbindung | |||
password | Password | Authentifiziert den Client mit einem Klartext-Passwort | |
ping | Liefert immer OK | ||
close | Schließt die Verbindung | ||
kill | Beendet den Daemon | ||
Ausgabe | |||
outputs | Listet Ausgabegeräte auf | ||
disableoutput | Id | 1 | Schaltet ein Ausgabegerät aus |
enableoutput | Id | 1 | Schaltet ein Ausgabegerät ein |
toggleoutput | Id | 1 | Wechselt hin und her |
Reflexion | |||
local config | Gibt interessante Variablen aus: music_directory | ||
commands | Gibt die erlaubten Kommandos aus | ||
notcommands | Gibt die verbotenen Kommandos aus | ||
tagtypes | Listet verfügbare Etiketten auf | ||
urlhandlers | Listet unterstützte URL-Schemata auf | ||
decoders | Listet unterstützte Dateiformate auf | ||
Chat | |||
channels | Listet Kanäle auf | ||
subscribe | Channel | chitchat | Betritt einen Kanal bei oder erzeugt einen Neuen |
unsubscribe | Channel | chitchat | Verlässst einen Kanal |
readmessages | Liest Nachrichten von allen Kanälen | ||
sendmessage | Channel Text | chitchat Hello | Sendet Nachricht an einen Kanal |
artist
album
title
track
name
genre
date
composer
performer
comment
disc
filename
Man unterscheidet unkomprimierte (PCM, WAVE), verlustfrei komprimierte (FLAC, APE) und verlustbehaftetete (MP3, WMA) Datenformate. Diese erreichen bei einer Bitrate von 128 kbit/s (1 Megabyte pro Minute) eine ordentliche Qualität, wobei modernere Codecs bereits bei geringeren Bitraten transparent klingen.
Jahr | Erfinder | Codec | Auflösung (Bit) |
Abtastrate (KHz) |
Bitrate (KBit/s) |
Endung |
verlustfrei | ||||||
---|---|---|---|---|---|---|
1982 | Philips | CD-DA | 16 | 44.1 | 1411 | .cdda |
1990 | Microsoft | WAVE | 8–32 | .wav | ||
2001 | Xiph | FLAC | 8–32 | 1–655 | .flac | |
2002 | Monkey's Audio | APE | 8–24 | 8–96 | 448 | .ape |
verlustbehaftet | ||||||
1992 | MPEG-1 Part 3 | MP3 | 16 | 8–48 | 8–320 | .mp3 |
1992 | Dolby | AC3 | 24 | 32–48 | 32–640 | .ac3 |
1996 | Coherent | DTS | 24 | 96 | 1500 | .dts |
1997 | MPEG-2 Part 7 | AAC | 8–192 | 8–529 | .aac | |
1998 | Microsoft | WMA | 24 | 8–96 | 8–768 | .wma |
2002 | Xiph | Vorbis | 1–200 | 1–448 | .ogg | |
2012 | Xiph | Opus | 8–48 | 6–510 | .opus |
Abtastraten jenseits 44 KHz und Auflösungen jenseits 16 Bit sind physiologisch sinnlos, da das menschliche Ohr maximal Frequenzen zwischen 20Hz und 20KHz wahrnimmt und die Dynamik den Bereich bis an die Schmerzgrenze abdeckt.
Ein Etikett speichert Informationen wie Künstlername, Album, Titel, Veröffentlichungsdatum und vieles mehr.
Format | Zeichensatz | artist | album | track | title | year | genre | composer | comment |
ID3 | ISO-8859-1 | 33:62 | 63:92 | 126:1 | 3:32 | 93:96 | 127:1 | 97:125 | |
ID3v2.3 | UCS-2 | TPE1 | TALB | TRCK | TIT2 | TYER | TCON | TCOM | COMM |
ID3v2.4 | UTF-8 | TPE1 | TALB | TRCK | TIT2 | TDRC | TCON | TCOM | COMM |
Vorbis | UTF-8 | ARTIST | ALBUM | TRACK NUMBER | TITLE | DATE | GENRE | ||
APE | UTF-8 | Artist | Album | Track | Title | Year | Genre | Composer | Comment |
Beim Ergänzen der Musiksammlung liest Asunder mit einem
Ripper (cdparanoia
) einzelne Tracks von
CD, komprimiert sie mit einem
Encoder (lame
) und ergänzt mit einem
Tagger (id3tag
) Metainformationen aus
einer Online-Datenbank (freedb
). Zur Qualitätskontrolle leistet
MP3Diags gute Dienste.
Ein gepflegtes Archiv bringt viel Freude beim Finden und Hören von
Musik. Ich verwende folgende Templates für Mp3diags:
/srv/music/Album/%g/%a/%y - %b/%n - %t /srv/music/Soundtrack/%y - %b/%n - %a - %t /srv/music/Compilation/%g/%y - %b/%n - %a - %t
WAVE in MP3 umwandeln mit Standardeinstellungen
lame -h song.wav
FLAC in MP3 umwandeln
flac -d -c song.flac | lame -h - song.mp3
Album mit Cue- und FLAC-Datei in einzelne WAVE-Dateien zerlegen
shnsplit -t "%n - %t" -f album.cue album.flac
Dateien mit Sonderzeichen auf ein FAT32-Dateisystem kopieren und dabei die nicht erlaubten Zeichen durch einen Unterstrich ersetzen:
pax -rw -s '/[?<>\\:*|\"]/_/gp' /srv/music/Source /media/Dest