(Music Player Daemon) – kao Winamp ali malo drugačije (bolje?)

MPD je mala, fleksibilna server aplikacija čija je osnovna funkcija renderovanje muzike i obezbeđivanje signala koji preko audio interfejsa (zvučna kartica, eksterni DAC, HDMI…) možete da prosledite na neki uređaj za reprodukciju zvuka (aktivni zvučnici, pojačalo, risiver, mini linija…). Ono što razlikuje fundamentalno MDP (i slične aplikacije) od onoga što tradicionalno smatramo za Audio Player-e je kompletna odvojenost ovog Servera koji vrši rendering audio sadržaja i nečega što mi percipiramo kao korisnički interfejs iliti u ovom slučaju Klijent. Posledica ovoga i ono što ovakva struktura dozvoljava je da se Server i Klijent mogu nalaziti na različitim fizičkim uređajima – u prevodu, imate računar (ili nuc ili raspberry pi ili ordroid ili android box ili….) zakačen za vaš omiljeni HiFi sistem za reprodukciju a upravljanje samom reprodukcijom (Play, FF, Skop, Vol+. Vol-…) obavljate na Android telefonu / tabletu / laptopu zavaljeni u omiljenu fotelju ili opruženi na kanabetu

Obzirom na moje iskustvo i navike, a imajući u vidu da je sam našao vrlo malo tekstova koji pokrivaju ovakav scenario korišćenja, ovde ćemo se baviti podešavanjem i osposobljavanjem MDP servera na Windows 10 računaru.

Prvi korak - preuzimanje i instalacija serverske komponente

Skinite poslednju *.exe verziju datoteke sa zvanične strane za preuzimanje ovog projekta

Izvršnu datoteku snimite u željeni folder (u mom slučaju to je E:\MPD_Server). To je to. Nema nekog drugog procesa instalacije. Ovaj folder izaberite imajući u vidu da treba da bude negde gde problem neće praviti Windows UAC ili na nekom mestu gde nekome može slučajno pasti na pamet da ga obriše

Nastavak - konfiguracija

Pokretanjem snimljenog exe fajla neće se desiti apsolutno ništa. Da bi stvar proradila, mora da postoji konfiguracioni fajl putem kojeg određujemo željenu konfiguraciju servera. Fajl treba snimiti u isti folder i dati mu neko logično ime (u našem slučaju mpd.conf). Pokretanje servera, vršićemo komandom mpd.exe mpd.conf. Dakle, uz pokretanje binarnog fajla, prosleđujemo i argument koji konfiguracioni fajl treba da koristi

Ovaj konfiguracioni fajl mora da sadrži neki minimum koji će obezbediti funkcionisanje servera. Sledeći atributi su neophodni

  • music_directory: lokacija gde se nalaze vaši mp3 fajlovi. Obratite pšažnju da, obzirom na poreklo iz linux sveta, mora se pratiti konvencija za putanje koja inače važi tamo a to je da se svi backslashes (\) moraju zameniti sa forward slashes (/)
  • log_file: File gde je MPD output upisan
  • db_file: MPD čuva meta informacije dobijene iz MP3 fajlova u ovoj bazi podataka
  • playlist_directory: folder gde će se čuvati plej liste koji koristi MPD

ovo dole je sadržaj mog mpd.conf fajla

music_directory "http://username:password@192.168.20.108:5000/Music"
log_file "E:/MPD_server/mpd.log"
db_file "E:/MPD_server/mpd.db"
playlist_directory "E:/MPD_server/playlists"
audio_output {
type "winmm"
name "Speakers"
device "Headphones (High Definition Audio Device)"
}

Da napravimo malu digresiju pre negoli krenemo u analizu ovoga. Da objasnimo šta u stvari MPD radi i koje su mu funkcije. Ako pokrenemo komandu mdp.exe –version, dobijemo nekakav ovakav izlaz

E:\MPD_server>mpd --version
Music Player Daemon 0.22.3 (0.22.3)
Copyright 2003-2007 Warren Dukes <warren.dukes@gmail.com>
Copyright 2008-2018 Max Kellermann <max.kellermann@gmail.com>
This is free software; see the source for copying conditions.  There is NO
warranty; not even MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Database plugins:
simple proxy
Storage plugins:
local nfs curl
Decoders plugins:
[vorbis] ogg oga
[oggflac] ogg oga
[flac] flac
[opus] opus ogg oga
[dsdiff] dff
[dsf] dsf
[hybrid_dsd] m4a
[modplug] 669 amf ams dbm dfm dsm far it med mdl mod mtm mt2 okt s3m stm ult umx xm
[wildmidi] mid
[ffmpeg] 16sv 3g2 3gp 4xm 8svx aa3 aac ac3 adx afc aif aifc aiff al alaw amr anim apc ape asf atrac au aud avi avm2 avs bap bfi c93 cak cin cmv cpk daud dct divx dts dv dvd dxa eac3 film flac flc fli fll flx flv g726 gsm gxf iss m1v m2v m2t m2ts m4a m4b m4v mad mj2 mjpeg mjpg mka mkv mlp mm mmf mov mp+ mp1 mp2 mp3 mp4 mpc mpeg mpg mpga mpp mpu mve mvi mxf nc nsv nut nuv oga ogm ogv ogx oma ogg omg opus psp pva qcp qt r3d ra ram rl2 rm rmvb roq rpl rvc shn smk snd sol son spx str swf tak tgi tgq tgv thp ts tsp tta xa xvid uv uv2 vb vid vob voc vp6 vmd wav webm wma wmv wsaud wsvga wv wve
[gme] ay gbs gym hes kss nsf nsfe sap spc vgm vgz
[pcm]
Filters:
Tag plugins:
Output plugins:
null httpd recorder winmmwasapi
Encoder plugins:
null vorbis opus lame wave flac
Input plugins:
file curl ffmpeg nfs
Playlist plugins:
extm3u m3u pls xspf asx rss flac cue embcue
Protocols:
http:// nfs://
Other features:
ipv6 tcp

U prvom delu imamo informaciju o trenutnoj verziji programa i copyright info. Ono što nas više zanima je deo o Plugin-ovima. Svu svoju funkcionalnost MPD ostvaruje preko plugin-ova i ovde imamo izlistane sve one koji su po default-u aktivirani i uključeni u baznu distribuciju programa. Database plugin nam daje informaciju o engine koji će se koristiti za kreiranje i pristup lokalnoj bazi podataka. Storage plugin nam daje raspoložive protokole za pristup datotekama na različitim tipovima uređaja za čuvanje podataka – local logično omogućava pristup fajlovima u lokalnom file sistem na kompjuteru, nfs omogućava pristup linux (unix) deljenim mrežnim direktorijumima a curl omogućava pristup WebDav folderima. Ovde fali nešto veliko a to je smbclient plugin!!! Trenutno postoji bug unutar Samba koji ima za posledicu obaranje MPD servera te ne ovaj plugin za sada onemogućen (link). Za povlačenje muzike sa vašeg omiljenog smb servera, moraćemo (kao u mom primeru) da nađemo neko drugo rešenje. Ostatak pluginova nam daje informacije o enkoderima, dekoderima, raspoloživim ulazima, izlazima, filterima… ono što nam je u ovom momentu zanimljivo je winmm output plugin. Ovaj plugin u windowsu (MME API or the Windows Multimedia API) omogućava da se render iz servera prosledi prema nekom audio uređaju kojeg imamo konfigurisanom u sistemu.

Da se vratimo na interpretaciju onog gore datog mpd.conf fajla

music_directory "http://username:password@192.168.20.108:5000/Music"

Lokacija mp3 fajlova, u mom okruženju se nalazi na NAS uređaju (QNAP) koji se nalazi na adresi 192.168.20.108. Music deljeni folder je kod mene mountovan kao mrežni disk X: pa bi sprva, činilo se da bi ovde logičnije bilo da ova linija ima oblik music_directory "X:/“ i to bi funkcionisalo ako bi MPD server pokretali preko neke prečice kada se ulogujemo na komp. Ali to je već malo gubljenje konfora. Mi želimo da server bude aktivan onog momenta kada se računar uključi. Pre logovanja korisnika. I da bude nezavistan od trenutno ulogovanog korisnika. Da bi ovo postigli, MPD server ćemo namestiti da se pokreće kao system servis – ovo znači da ga izvršava System account a obzirom da se mrežni diskovi ne mauntuje pre logovanja korisnika, ovako referencirane lokacije bi bile nedostupne MPD serveru. Da bi stvar radila, moramo dati punu putanju do deljenog direktorijuma, sa specifikacijom protokola i punim kredencijalima korisničkog naloga koji koristimo za pristup. Da smbclient plugin funkcioniše, logično bi bilo da ova linija bude u formatu

music_directory "smb://username:password@192.168.20.108/Music"

al' obzirom da ne, mi koristimo WebDav dok se stvari ne promene i greške otklone. Ako se fajlovi nalaze na lokalnom disku, sve ove gimnastike ne bi bilo i ova linija bi ima oblik

music_directory "E:/Music"

Dalje…

log_file "E:/MPD_server/mpd.log"
db_file "E:/MPD_server/mpd.db"
playlist_directory "E:/MPD_server/playlists"

ovi fajlovi moraju da postoje kako bi server funkcionisao. Neće biti kreirani automatski već korisnik mora da ih sam napravi kako bi stvar radila. Ako nešto od ovoga nema na disku, server neće uspeti sa startuje

Izlaz

audio_output {
type "winmm"
name "Speakers"
device "Headphones (High Definition Audio Device)"
}

Ovaj deo je kompletno opcionalan. Ne mora da bude deo konfiguracionog fajla. Al meni je posebno interesantan a verujem i vama će biti. Ovde birate, na koji audio izlaz, MPD server će da pošalje renderovan audio signal. Ako ovog dela konfiguracionog fajla nema, server će audio poslati na default izlaz odabran u windowsu. Ako se pak stavi, signal će uvek ići prema predefinisanom uređaju bez obzira na trenutno aktivan izlazni uređaj u windowsu. Štoćereći, na kompu na kome radi ovaj server, neko igra igricu, ili gleda film, ili gleda youtube na zvučnicima ili slušalicama a vaš audio server uredno šalje audio na vaš omiljeni hifi uređaj bez ikakvih opstrukcija i prekida

Kad ovaj deo završimo, kreiramo mpd.conf sa željenm parametrima, kreiramo playlist folder, prazan log fajl i prazan db fajl, ostaje da pokrenemo server. Kao što pomenusmo, moguće je pokrenuti server iz Command Propth-a komandom mpd.exe mpd.conf i tada se server pokreće u tzv. console modu – pojaviće se crna tekstualna konzola sa par poruka i to vam je indikacija da je server aktivan. Kao što rekosmo, mi ne bi da naš konfor zavisi od potrebe da ručno startujemo server niti želimo da nam bude aktivan crn tekstualni ekran koji bi bio podsetnik da tu neki server nešto radi. Cilj je da podesimo da mpd radi kao system service i to postižemo ovom komandom

sc create musicpd binpath= “E:\MPD_server\mpd.exe E:\MPD_server\mpd.conf” displayname=”Music Player Daemon”

Sada već možemo da koristimo Windows Service konzolu za praćenje rada i konfiguraciju Music Player Daemon sistemskog servisa

Drugi deo – klijent

Postoji popriličan broj rešenja koje možete da koristite. Postoji lista dostupna na zvaničnom sajtu projekta a verovatno postoji i nemali broj nezavisnih projekata ne koje možete da nabasate lutajući po internetu. Ovde ću se zadržati na preporuci za korišćenje windows i android besplatnih klijenata

Windows

MPDCtrl - https://torum.github.io/MPDCtrl/

Stylophone - https://github.com/Difegue/Stylophone

prvi je besplatan a drugi na Winstore košta nekih 650 dinara. Souce mu je dostupan na GitHub pa neko vičniji programiranju / kompajliranju može da dođe i do besplatne varijante

Android

MPDroid - https://github.com/abarisain/dmix

M.A.L.P. - https://gitlab.com/gateship-one/malp

oba su besplatna i dostupna na Play Store

Sve što je potrebno je da unutar svake od ovih aplikacija podesite IP adresu vašeg servera i upišete eventualno port koji server sluša – ako ništa niste menjali, server čeka komunikaciju na portu 6600

I za kraj…

Dakle, ako ovo do sada treba na nešto da vam liči, odgovor je da. Ideja je da vam dam ideju kako u sopstvenoj režiji možete da napravite ekvivalent Mrežnim Player-ima, WiFi speakerima i sličnim uređajima. I ovo pre liči na neki početak negoli na kraj. Kako krenu da vam rastu apetiti i javaljaju ideje za dalja unapređenja, polako će se krenuti prema Linuxu (ipak prirodnije okruženje za ovakve poduhvate), nameštanju UPnP, prelasku na Mopidy i njegove derivate, neki hack sa RPi… Sky is the limit

https://www.daangemist.nl/2012/11/16/installing-mpd-on-windows
https://github.com/catx23/mpd-windows/blob/master/mpd.conf
https://chriswarrick.com/blog/2013/09/01/mpd-on-windows/