MPD (Music Player Daemon)

Ca prim post pe acest blog, o sa va prezint MPD si cum il puteti folosi local si prin retea prin propriul server de httpd de stream din MPD.
Ce este MPD?
MPD (music player daemon) este un player audio care are o arhitectura server-client. Citeste fisiere audio, organizeaza playlist-uri si mentine o baza de date a fisierelor folosind foarte putine resurse. Pentru a interactiona cu MPD este nevoie de un client separat. Pentru o lista accesati: MPD Clients. MPD ar trebui sa fie in orice repo, daca nu, puteti lua sursa de pe MPD Server

O data instalat, o sa gasiti fisierul de configurare in /etc/mpd.conf pentru setari globale sau copiati /usr/share/mpd/mpd.conf.example in ~/.mpdconf pentru setari specifice utilizatorului. O sa ne axam pe setarile specifice utilizatorului dar daca setati ca MPD sa fie pornit la startup inainte de X (in cazul lui Archlinux adaugand mpd la linia de DAEMONS din /etc/rc.conf) trebuie sa modificati /etc/mpd.conf sa fie ca ~/.mpdconf. Daca vreti ca mpd sa porneasca o data cu X, adaugati mpd in ~/.xinitrc sau creati un fisier .desktop si adaugati-l in ~/.config/autostart/mpd.desktop dupa cum urmeaza:
[Desktop Entry]
Encoding=UTF-8
Version=0.9.4
Type=Application
Name=Music Player Daemon
Comment=
Exec=mpd
StartupNotify=false
Terminal=false
Hidden=false

Configurare
La inceputul fisierului de configurare o sa avem urmatoarele linii care trebuie modificate si decomentate daca este cazul:
music_directory "/home/USER/Music"
playlist_directory "/home/USER/.mpd/playlists"
db_file "/home/USER/.mpd/mpd.db"
log_file "/home/USER/.mpd/mpd.log"
pid_file "/home/USER/.mpd/mpd.pid"
state_file "/home/USER/.mpd/mpdstate"

La prima linie aratam unde sa se uite pentru fisierele audio, a doua unde sa salveze playlist-urile, a treia unde sa salveze baza de date, urmatoarea unde sa salveze log-ul, unde sa salveze id-ul de proces (pentru a putea folosi mpd –kill sau unele scripturi init) iar ultima unde sa salveze fisierul cu informatii despre starea in care a fost oprit MPD (pentru ca la repornire sa incerce sa reia de unde a ramas, daca nu este prezent fisierul atunci MPD va fi resetat la fiecare repornire)
Pentru a crea toate acele fisiere in ~/.mpd/ putem folosi:

touch ~/.mpd/{mpd.db,mpd.log,mpd.pid,mpdstate}

Urmatoarele linii importante sunt:
user "USER"
group "GROUP"
bind_to_address "127.0.0.1"
port "6600"

MPD nu trebuie niciodata sa fie pornit ca root, deci daca setati MPD sa fie pornit inainte de X (cum am scris mai sus in cazul lui Archlinux adaugand mpd la DAEMONS in /etc/rc.conf) trebuie sa setati la linia cu user, user-ul vostru (asta asigura si ca poate sa citeasca fisierele audio din locatia care ati setat-o mai sus). Group este setat initial ca fiind grupul principal de la user-ul setat la linia user dar pentru unele placi de sunet este nevoie sa folositi grupul audio pentru a avea permisiuni la placa respectiva.

Restul pot fi lasate cum au fost setate initial si vom continua mai departe cu Audio Output.
Daca folositi ALSA, o setare simpla ar fi:
audio_output {
type "alsa"
name "My ALSA Device"
# device "hw:0,0" # optional
# format "44100:16:2" # optional
mixer_type "software" # optional
# mixer_device "default" # optional
# mixer_control "PCM" # optional
# mixer_index "0" # optional
}

mixer_type “software” pentru a putea controla volumul din ce client folosim la MPD, daca e setat mixer_type “hardware” atunci schimbarea de volum dintr-un client pentru MPD va schimba volumul si la Master (asta daca nu setam mixer_control), in cazul in care vreti output-ul sa fie pe alta placa de sunet decat cea principala (onboard) trebuie decomentat si schimbat device hw:0,0 pentru a arata pe ce placa sa faca output.

Pentru Pulseaudio, comentati ce aveti la ALSA si decomentati la Pulseaudio; o setare simpla pentru Pulseaudio ar fi:
audio_output {
type "pulse"
name "My Pulse Output"
# server "remote_server" # optional
# sink "remote_server_sink" # optional
mixer_type "software"
}

De restul se ocupa Pulseaudio sau chiar voi prin pavucontrol (care ar trebui la randul lui sa fie in toate repo-urile oficiale).

Daca vreti sa aveti vizualizari in clientul care il folositi, este nevoie sa setati si fifo output:
audio_output {
type "fifo"
name "fifo"
path "/tmp/mpd.fifo"
format "44100:16:1"
# server "remote_server" # optional
# sink "remote_server_sink" # optional
}

Pentru o setare ca mai sus, nu uitati si sa creati fisierul /tmp/mpd.fifo (touch /tmp/mpd.fifo) si desigur sa setati in clientul care il folositi sa se uita dupa acel fifo, de exemplu in ncmpcpp:
visualizer_fifo_path = "/tmp/mpd.fifo"
visualizer_output_name = "fifo"
visualizer_sync_interval = "25"
visualizer_type = "spectrum" (spectrum/wave)

Dupa ce am configurat putem porni mpd si actualizam baza de date cu ajutorul unui client (eu voi folosi mpc, ca si mpd ar trebui sa se afle in toate repo-urile oficiale daca nu, sursa o luati de aici ) mpc update. Mpc poate fi folosit si pentru a seta scurtaturi la tastatura pentru play/pause/stop/etc. Dupa ce am actualizat baza de date, putem sa folosim un client sa ascultam fisierele audio.

Daca vrem sa facem streaming la fisierele audio, atunci in fisierul de configurare decomentam la httpd:
audio_output {
type "httpd"
name "My HTTP Stream"
encoder "vorbis" # optional, vorbis or lame
port "8000"
bind_to_address "0.0.0.0" # optional, IPv4 or IPv6
# quality "5.0" # do not define if bitrate is defined
bitrate "128" # do not define if quality is defined
format "44100:16:1"
max_clients "0" # optional 0=no limit
}

O data configurat httpd, mergem la alt pc/device si ne conectam la stream-ul nostru dintr-un player la adresa http://ip:port/ ip este ip-ul calculatorului care are stream-ul, port este port-ul setat la httpd in fisierul de configurare. Daca http://ip:port/ nu merge, atunci folositi http://ip:port/mpd.ogg

Sper ca o sa va placa si voua acest program care consuma foarte putine resurse si poate foarte multe.
Auditie placuta !

Leave a Reply

Your email address will not be published. Required fields are marked *