MPD Client Programming
DIESER ARTIKEL IST NOCH IN ARBEIT -- MECKERN VERBOTEN -- IST BALD FERTIG
Dieser Artikel erklärt, wie man sich für den Music Player Daemon einen eigenen Client mit sehr wenig Code schreibt.
Warum und Wofür den MPD verwenden?
Der Music Player Daemon ist ein Linux-"Dienst", welcher vollkommen versteckt im Hintergrund Musik abspielt. Die eigentliche Bedienoberfläche, der Client, ist dabei vollständig vom Abspielprogramm getrennt. Dadurch ist er sehr ressourcenschonend.
Gerade auf embedded-Linux Geräten lohnt sich der Einsatz des MPDs.
Mit Hilfe dieses Artikels lässt sich ein Client schreiben, der auf nahezu jedes Ereignis im System reagieren und so den Player steuern kann. Mögliche Ereignisse:
- GPIO Buttons
- Drehgeber
- Telnet-Server
- Touchscreen
- Maus, Tastatur, Joystick, Touchpad, ...
- Bestimmte ADC Werte für die jeweilige Aktion
- Zufallszahlengenerator ;)
C
Um in C den MPD ansprechen zu können, muss die libmpdclient für die jeweilige Toolchain installiert sein. Je nach Zielsystem ist dies entweder der "normale" System-Compiler oder die Cross-Toolchain. In den meisten Distributionen kommt diese gleich mit dem Paket MPD mit, da der bekannteste Konsolen-Client "mpc" auf dieser aufbaut. Er gehört quasi zum Lieferumfang des MPD.
Die Programm ist sehr einfach, da es für die verschiedenen Funktionen meist nur jeweils eine Anweisung im Code braucht.
Eingebuden werden muss nur eine einzige Headerdatei:
#include <mpd/client.h>
Dem Linker muss noch folgende Lib mit angegeben werden:
-lmpdclient
Dann kann man im Programm loslegen. Zuerst muss man sich mit dem Server verbinden:
#include <mpd/client.h>
...
struct mpd_connection *conn;
conn = mpd_connection_new("localhost", 6600, 0);
if (conn == NULL) { printf("cant connect to mpd\n"); exit(-1); }
...
localhost und 6600 sind die Adresse und der Port des Servers, in diesem Fall die Standardeinstellungen. Natürlich kann man sich auch auf jeden anderen MPD im Netzwerk, ja sogar im Internet verbinden.
Die Verbindung trennt man, nach abgeschlossener Arbeit dan so:
mpd_connection_free(conn);
Die einzelnen Funktionen zum Steuern des MPDs:
mpd_send_play(conn);
mpd_send_pause(conn);
mpd_send_toggle_pause(conn);
mpd_send_stop(conn);
mpd_send_previous(conn);
mpd_send_next(conn);
mpd_send_set_volume(conn, v); // v = lautstaerke von 0 bis 99
mpd_send_play_pos(conn, pos); // aktuellen track abspielen ab sekunde "pos"
mpd_send_play_id(conn, t); // lied "t" in der playliste abspielen
mpd_run_repeat(conn, r); // r=0 repeat aus; r=1 repeat an
mpd_run_crossfade(conn, s); // crossfade in sekunden "s"
mpd_run_random(conn, i); // i=0 random aus; i=1 random an