Eine liebevoll gepflegte Plattensammlung bringt viel Freude beim Finden und Hören von Musik. Asunder liest Audio-CDs aus, LAME komprimiert den Datenstrom anhand eines psychoakustischen Modells und MP3diags korrigiert Metadaten. 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 Kanalnummer 6600.
apt install asunder cdparanoia lame mp3diags mpd mpc
Asunder liest mit einem
Ripper (cdparanoia
) einzelne Titel von
CD, komprimiert sie mit einem
Encoder (lame
) und ergänzt mit einem
Tagger (id3tag
) Metainformationen aus
einer Online-Datenbank (freedb
). Für die Qualitätskontrolle verwende ich
MP3diags mit folgende Schablonen:
$HOME/music/Album/%g/%a/%y - %b/%n - %t $HOME/music/Soundtrack/%y - %b/%n - %a - %t $HOME/music/Compilation/%g/%y - %b/%n - %a - %t
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 | Künstler | Album | Nummer | Titel | Jahr | Genre | composer | Kommentar |
MP3diags | %a | %b | %n | %t | %y | %g | |||
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 |
Der Daemon muss vor allem den Pfad zur Musiksammlung kennen.
/etc/mpd.confmusic_directory "/home/phrank/music"
Zur Inbetriebnahme starten wir den Daemon und aktualisieren die interne Datenbank der Metadaten.
systemctl enable --now mpd 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 wie zum Beispiel das Sonos System mit Musik zu versorgen, können wir einen HTTP-Datenstrom einrichten. Dieser ist dann unter http://localhost:8000 erreichbar.
audio_output { type "httpd" name "HTTP Stream" encoder "lame" port "8000" quality "5.0" 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 folgende 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
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' $HOME/music/Source /media/Dest