====== The Music Player Daemon ======
Jeżeli system będzie działać tylko jako serwer MPD to środowisko graficzne możemy wyłączyć.
sudo systemctl set-default multi-user.target
Sprawdzić możemy poleceniem:
sudo systemctl get-default
Powrócić do wersji graficznej możemy:
sudo systemctl set-default graphical.target
===== Instalacja =====
==== Instalacja serwisu mpd ====
sudo dnf install mpd
==== Dodanie użytkownika mpd do grupy audio ====
sudo usermod -aG audio mpd
==== Usunięcie użytkownika z grupy audio ====
sudo gpasswd -d nazwa_użytkownika audio
===== Uruchomienie serwera mpd jako usługi systemowej =====
==== Edycja pliku /etc/mpd.conf ====
# Ścieżka do katalogu, w którym MPD przechowuje pliki muzyczne.
music_directory "/var/lib/mpd/music"
# Ścieżka do katalogu, w którym MPD przechowuje listy odtwarzania.
playlist_directory "/var/lib/mpd/playlists"
# Lokalizacja pliku bazy danych, który MPD używa do przechowywania informacji o dostępnych plikach muzycznych.
db_file "/var/lib/mpd/mpd.db"
# Ścieżka do pliku logów, w którym MPD zapisuje swoje komunikaty dotyczące błędów i działania.
log_file "/var/l_g/mpd/mpd.log"
# Ścieżka do pliku stanu, w którym MPD zapisuje informacje o aktualnym stanie odtwarzania.
state_file "/var/lib/mpd/mpdstate"
# Użytkownik systemowy, pod którym działa MPD.
user "mpd"
# Grupa systemowa, do której należy użytkownik MPD.
group "audio"
# Adres IP, na którym MPD nasłuchuje na połączenia z klientami.
bind_to_address "0.0.0.0"
# Port, na którym MPD nasłuchuje połączeń.
port "6600"
# Umożliwia automatyczne wykrywanie MPD w sieci przy użyciu zeroconf (np. Bonjour).
zeroconf_enabled "yes"
# Nazwa, pod którą MPD będzie wykrywany w sieci.
zeroconf_name "Music Player @ %h"
# Sekcja definiująca wtyczkę wejściową, która pozwala na odtwarzanie strumieni z internetu.
input {
plugin "curl"
}
# Kodowanie znaków, które MPD używa do obsługi plików w systemie.
filesystem_charset "UTF-8"
# Sekcja definiująca konfigurację wyjścia audio.
audio_output {
# Typ wyjścia audio (w tym przypadku ALSA, co jest standardowym systemem audio w Linuksie)
type "alsa"
# Nazwa wyjścia, która może być używana w klientach MPD.
name "My ALSA Device"
# Urządzenie audio, które MPD powinien używać (wskazuje na kartę dźwiękową i urządzenie)
device "hw:1,0"
# Ustawienie dotyczące rodzaju miksera (sprzętowy, który kontroluje rzeczywistą głośność na urządzeniu)
mixer_type "hardware"
# Jeżeli nie chcesz kontrolować głośności to mixer_type "none"
# Nazwa kontrolera głośności, który MPD będzie używał do sterowania poziomem głośności
mixer_control "Master"
# Jeżeli podstawowymi plikami audio będą pliki flac, ogg i mp3 to
dop "no"
}
==== Pozbyć się pulseaudio i pipewire ====
sudo dnf remove pipewire
sudo dnf remove pulseaudio
==== Konfiguracja domyślnej karty ALSA w /etc/asound.conf ====
defaults.ctl.card 1
defaults.pcm.card 1
* defaults.ctl.card 1 – Definiuje domyślną kartę dźwiękową używaną do kontroli miksera (czyli ustawienia głośności, wyciszania i innych parametrów dźwiękowych). Oznacza to, że gdy ALSA będzie musiała kontrolować ustawienia miksera dźwięku, będzie używać karty numer 1.
* defaults.pcm.card 1 – Ustawia domyślną kartę dźwiękową używaną do odtwarzania i nagrywania dźwięku, zwaną PCM (Pulse Code Modulation). Oznacza to, że wszystkie programy korzystające z ALSA będą domyślnie wysyłać dźwięk do karty numer 1 (w systemie może być więcej niż jedna karta dźwiękowa).
Można również użyć formatu zapisu jak poniżej
pcm.!default {
type hw
card 1
}
ctl.!default {
type hw
card 1
}
Przydatne polecenia do uzyskania informacji o karcie
lspci | grep -i audio
sudo lspci -v | grep -A7 -i audio
aplay -l
lsmod | grep snd
==== Ustawienie domyślnego poziomu głośności ====
Po uruchomieniu systemu operacyjnego dumyślny poziom głośności ustawia usługa ''alsa-restore'' o ile została zainstalowana i odblokowana.
amixer set Master 100%
sudo alsactl store
==== Uruchomienie usługi ====
sudo systemctl enabled mpd
sudo systemctl start mpd
sudo systemctl status mpd
==== Instlalcja prostego klienta mpd ====
sudo dnf install mpc
==== Instalacja bardziej przyjaznego klienta mpd ====
sudo dnf install ncmpcpp
Użycie
ncmpcpp -h adres_serwera -p 6600
==== Obsługa plików OGG ====
Jeżeli serwer nie odtwarza plików ''.ogg'' instalujemy pakiet ''vorbis-tools'' poleceniem:
sudo dnf install vorbis-tools
===== Konfiguracja globalna =====
W systemie warto ustawić domyślny poziom głośności po starcie systemu. Logujemy się na konto root. Nie korzystamy z ''sudo'' czy ''su -''. Po zalogowaniu się ustawiamy poziom np w ''alsamixer''. Po ustawieniu żądanego poziomu zapisujemy poleceniem:
alsactl store
===== Konfiguracja użytkownika =====
mkdir -p ~/.config/mpd
nano ~/.config/mpd/mpd.conf
Przykład konfiguracji ''mpd.conf'':
# Muzyka - ustaw ścieżkę do twojej kolekcji muzycznej
music_directory "~/Muzyka"
# Katalog na pliki bazy danych MPD
db_file "~/.config/mpd/mpd.db"
# Katalog na plik playout socket
log_file "~/.config/mpd/mpd.log"
# Katalog na plik z kolejką odtwarzania
state_file "~/.config/mpd/mpd.state"
# Katalog na plik z informacją o głośności
sticker_file "~/.config/mpd/sticker.sql"
# Adres, na którym MPD będzie działał
bind_to_address "0.0.0.0"
port "6600"
# Ustawienia dla katy dźwiękowej na płycie terminala WYSE
audio_output {
type "alsa"
name "My ALSA Device"
device "hw:1,0" # Numer kolejny karty
mixer_type "hardware" # Typ miksera
mixer_control "Master" # Który suwak
}
# Ustawienia dla wyjścia HDMI na płycie terminala WYSE
audio_output {
type "alsa"
name "HDMI Audio"
device "plughw:0,3" # Dopasuj numer karty i urządzenia
mixer_type "none" # "hardware" lub możesz użyć "none", jeśli chcesz pełną kontrolę
}
Utwórz katalogi MPD
mkdir -p ~/.config/mpd/playlists
touch ~/.config/mpd/mpd.db ~/.config/mpd/mod.log ~/.config/mpd/mod.state ~/.config/mpd/sticker.sql
Skonfiguruj autostart usługi MPD
systemctl --user enable --now mpd
Uruchom usługę MPD
systemctl --user start mpd
Sprawdź, czy MPD jest aktywny
systemctl --user status mpd
Do odtwarzania utworów mamy do dyspozycji klientów mpc, ncmpcpp lub graficzny Cantata.
Jeżeli mamy problem z połączeniem sprawdź firewall:
Sprawdzamy nazwy aktywnych stref:
sudo firewall-cmd --get-active-zones
Przykładowy wynik działania polecenia i w tym wypadku port usługi mpd musimy dodać do strefy ''home'':
home
interfaces: wlo1
public (default)
Dodanie usługi do strefy home i restart firewall:
sudo firewall-cmd --zone=home --permanent --add-service=mpd
sudo firewall-cmd --reload
Sprawdzenie reguł strefy ''home'':
sudo firewall-cmd --zone=home --list-all
W wyniku działania polecenia otrzymujemy:
home (active)
target: default
ingress-priority: 0
egress-priority: 0
icmp-block-inversion: no
interfaces: wlo1
sources:
services: dhcpv6-client mdns mpd samba-client ssh
ports:
protocols:
forward: yes
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
===== Inne ustawienia =====
==== Sprawdzenie aktualnie używanych modułów audio ====
lsmod | grep snd
Przykładowy wynik działania polecenia:
snd_hda_codec_realtek 208896 1
snd_hda_codec_generic 131072 1 snd_hda_codec_realtek
snd_hda_codec_hdmi 102400 1
snd_hda_scodec_component 20480 1 snd_hda_codec_realtek
snd_hda_intel 69632 2
snd_intel_dspcfg 40960 1 snd_hda_intel
snd_intel_sdw_acpi 16384 1 snd_intel_dspcfg
snd_usb_audio 598016 1
snd_usbmidi_lib 57344 1 snd_usb_audio
snd_hda_codec 225280 4 snd_hda_codec_generic,snd_hda_codec_hdmi,snd_hda_intel,snd_hda_codec_realtek
snd_ump 40960 1 snd_usb_audio
snd_rawmidi 57344 2 snd_usbmidi_lib,snd_ump
snd_hda_core 155648 5 snd_hda_codec_generic,snd_hda_codec_hdmi,snd_hda_intel,snd_hda_codec,snd_hda_codec_realtek
mc 90112 1 snd_usb_audio
snd_hwdep 20480 2 snd_usb_audio,snd_hda_codec
snd_seq 135168 0
snd_seq_device 16384 3 snd_seq,snd_ump,snd_rawmidi
snd_pcm 196608 5 snd_hda_codec_hdmi,snd_hda_intel,snd_usb_audio,snd_hda_codec,snd_hda_core
snd_timer 53248 2 snd_seq,snd_pcm
snd 163840 20 snd_hda_codec_generic,snd_seq,snd_seq_device,snd_hda_codec_hdmi,snd_hwdep,snd_hda_intel,snd_usb_audio,snd_usbmidi_lib,snd_hda_codec,snd_hda_codec_realtek,snd_timer,snd_ump,snd_pcm,snd_rawmidi
soundcore 16384 1 snd
==== Lista wykrytych urządzeń audio ====
aplay -l
Przykładowy wynik działania polecenia:
**** List of PLAYBACK Hardware Devices ****
card 0: Generic [HD-Audio Generic], device 3: HDMI 0 [Philips FTV]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 1: SB [HDA ATI SB], device 0: ALC269VB Analog [ALC269VB Analog]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 2: U0x262a0x9023 [USB Device 0x262a:0x9023], device 0: USB Audio [USB Audio]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 2: U0x262a0x9023 [USB Device 0x262a:0x9023], device 1: USB Audio [USB Audio #1]
Subdevices: 1/1
Subdevice #0: subdevice #0
===== Wyświetlenie dostępnych wyjść urządzeń audio =====
aplay -L
Przykładowy wynik działania polecenia:
null
Discard all samples (playback) or generate zero samples (capture)
pipewire
PipeWire Sound Server
hdmi:CARD=Generic,DEV=0
HD-Audio Generic, Philips FTV
HDMI Audio Output
sysdefault:CARD=SB
HDA ATI SB, ALC269VB Analog
Default Audio Device
front:CARD=SB,DEV=0
HDA ATI SB, ALC269VB Analog
Front output / input
surround21:CARD=SB,DEV=0
HDA ATI SB, ALC269VB Analog
2.1 Surround output to Front and Subwoofer speakers
surround40:CARD=SB,DEV=0
HDA ATI SB, ALC269VB Analog
4.0 Surround output to Front and Rear speakers
surround41:CARD=SB,DEV=0
HDA ATI SB, ALC269VB Analog
4.1 Surround output to Front, Rear and Subwoofer speakers
surround50:CARD=SB,DEV=0
HDA ATI SB, ALC269VB Analog
5.0 Surround output to Front, Center and Rear speakers
surround51:CARD=SB,DEV=0
HDA ATI SB, ALC269VB Analog
5.1 Surround output to Front, Center, Rear and Subwoofer speakers
surround71:CARD=SB,DEV=0
HDA ATI SB, ALC269VB Analog
7.1 Surround output to Front, Center, Side, Rear and Woofer speakers
sysdefault:CARD=U0x262a0x9023
USB Device 0x262a:0x9023, USB Audio
Default Audio Device
front:CARD=U0x262a0x9023,DEV=0
USB Device 0x262a:0x9023, USB Audio
Front output / input
surround21:CARD=U0x262a0x9023,DEV=0
USB Device 0x262a:0x9023, USB Audio
2.1 Surround output to Front and Subwoofer speakers
surround40:CARD=U0x262a0x9023,DEV=0
USB Device 0x262a:0x9023, USB Audio
4.0 Surround output to Front and Rear speakers
surround41:CARD=U0x262a0x9023,DEV=0
USB Device 0x262a:0x9023, USB Audio
4.1 Surround output to Front, Rear and Subwoofer speakers
surround50:CARD=U0x262a0x9023,DEV=0
USB Device 0x262a:0x9023, USB Audio
5.0 Surround output to Front, Center and Rear speakers
surround51:CARD=U0x262a0x9023,DEV=0
USB Device 0x262a:0x9023, USB Audio
5.1 Surround output to Front, Center, Rear and Subwoofer speakers
surround71:CARD=U0x262a0x9023,DEV=0
USB Device 0x262a:0x9023, USB Audio
7.1 Surround output to Front, Center, Side, Rear and Woofer speakers
iec958:CARD=U0x262a0x9023,DEV=0
USB Device 0x262a:0x9023, USB Audio
IEC958 (S/PDIF) Digital Audio Output
iec958:CARD=U0x262a0x9023,DEV=1
USB Device 0x262a:0x9023, USB Audio #1
IEC958 (S/PDIF) Digital Audio Output
===== Ustawienie kolejnego numeru urządzenia audio za pomocą opcji ładowania modułu =====
==== Edycja pliku /etc/modprobe.d/snd-usb-audio.conf ====
options snd-usb-audio index=2
Jeżeli pliku nie ma to go tworzymy. W powyższym urządzenie audio które korzysta z modułu snd-usb-audio zawsze powinno powinno mieć przydzielony numer 2. Jeżeli posiadamy więcej urządzeń audio podłączonych do portów USB konfiguracja może wyglądać następująco:
# Texas Instruments PCM2704C stereo audio DAC 08bb:27c4
# SAVITECH Corp. SA9023 audio controller 262a:9023
options snd_usb_audio index=4,5 vid=0x08bb,0x262a pid=0x27c4,0x9023
Jak widać w zakomentowanych liniach pierwszy to DAC oparty o chipset PCM2704C a kolejny to SA9023. W tym przykładzie PCM2704C otrzyma numer 4 a SA9023 numer 5. Opcje te muszą być wprowadzone w jednej linii dla obu urządzeń ponieważ gdybyśmy zrobili to oddzielnie system przydzieli określone ustawienia tylko pierwszemu urządzeniu a kolejne otrzyma ustawienia domyślne.
===== Optymalne ustawienia dla DAC PCM2704 =====
audio_output {
type "alsa"
name "DAC PCM2704"
device "hw:2,0"
format "44100:16:2"
mixer_type "none"
auto_resample "no"
auto_channels "no"
auto_format "yes"
}
- **auto_resample "no"**
* **Opis:** Wyłącza automatyczne resamplowanie (zmianę częstotliwości próbkowania) przez MPD.
* **Efekt:** MPD przesyła dane w ich oryginalnej częstotliwości próbkowania. Jeśli plik audio ma 44.1 kHz, dane będą przesyłane z tą samą częstotliwością, bez dostosowania do specyfikacji urządzenia.
* **Zastosowanie:** Ważne dla uzyskania bit-perfect, jeśli DAC obsługuje natywne próbkowanie. Wyłączenie resamplowania pozwala uniknąć potencjalnej degradacji jakości dźwięku.
- **auto_channels "no"**
* **Opis:** Wyłącza automatyczne dostosowanie liczby kanałów (mono/stereo).
* **Efekt:** Jeśli plik audio jest mono (1 kanał), MPD nie będzie automatycznie przekształcać go w stereo (2 kanały) lub odwrotnie. Wysyłane dane zachowają oryginalną liczbę kanałów.
* **Zastosowanie:** Ważne, jeśli chcesz uniknąć niepotrzebnych zmian w danych audio, które mogą wpłynąć na jakość odtwarzania.
- **auto_format "no"**
* **Opis:** Wyłącza automatyczne dostosowanie formatu danych (bit-depth i częstotliwości próbkowania) do urządzenia.
* **Efekt:** MPD będzie wysyłać dane w oryginalnym formacie (np. 16-bit/44.1 kHz), bez konwersji do innego formatu akceptowanego przez DAC.
* **Zastosowanie:** Przydatne w konfiguracjach, gdzie DAC wymaga danych w specyficznym formacie, aby uniknąć utraty jakości.
===== Optymalne ustawienia dla DAC SA9023 + ES9018K2M =====
audio_output {
type "alsa"
name "TILEAR D2-MINI"
device "hw:5,0"
format "44100:16:2"
mixer_type "none"
auto_resample "no"
auto_channels "no"
auto_format "yes"
}
Dlaczego ustawienia **44,1 kHz** i **16 bit** skoro DAC jest w stanie otworzyć pliki z parametrami **96 kHz** i **24 bit**? Standardowa płyta **Audio-CD** (Red Book) jest zapisywana w formacie **44,1 kHz** i **16 bit**. Aby uniknąć przekłamań pliki flac powinny być tworzone w takim samym formacie. Tym samym odtwarzanie również aby uniknąć przekłamań.
Podnosząc sztucznie parametry wymusimy resampling nie uzyskując większej ilości danych. Zyskamy przekłamania informacji. Jeżeli jakimś cudem w naszej bibliotece z plikami flac znajdzie się plik o wyższych parametrach przykładowo **96 kHz** i **24 bit** co by wskazywało, że pochodzi z płyt danych np: **DVD-Audio, SACD, Blu-ray Audio** to w tym wypadku opcja ''auto_format "yes"'' załatwia sprawę.
Tu też mamy odpowiedź czy jest sens podłączania DAC o lepszych parametrach niż **96 kHz** i **24 bit**? Nie. Nie mamy dostępu do źródła do lepszych parametrach.
===== Aplikacje klienckie na Android =====
* [[https://play.google.com/store/apps/details?id=org.gateshipone.malp&hl=pl|M.A.L.P.]]
* [[https://play.google.com/store/apps/details?id=com.maximummpd&hl=pl|MaximumMPD]]