Ich beschreibe hier die Nutzung des MPDs als AutoDJ, insbesondere als Ergänzung zu Icecast-Streams (Webradio) von Nutzen.
Ich gehe hier nicht auf alle Optionen des MPDs ein, dafür gibt es zuviele gute Anleitungen im Netz (z.B. wiki.ubuntuusers.de.
Im ersten Teil der Konfiguration werden die globalen Einträge eingetragen, der zweite Teil behandelt die Audio-Streams.
music_directory "/srv/media/AutoDJ" playlist_directory "/var/lib/mpd/playlists" db_file "/var/lib/mpd/mpd.db" #log_file "/var/log/mpd.log" pid_file "/var/lib/mpd/mpd.pid" bind_to_address "::" port "6600" log_level "default" mixer_type "software" id3v1_encoding "ISO-8859-1" audio_buffer_size "512" buffer_before_play "3%" filesystem_charset "UTF-8"
audio_output { type "httpd" name "MPD HTTP Stream" encoder "lame" # optional, vorbis oder lame port "8000" # quality "5.0" # entweder bitrate "128" # oder max_clientes "10" }
audio_output { type "shout" encoding "mp3" name "Auto DJ" host "127.0.0.1" port "8000" mount "/auto" password "xxxxxxxx" bitrate "64" format "44100:16:2" user "source" description "Stream" }
audio_output { type "alsa" name "Aureon 7.1 USB" device "analog" }
Dieser Teil der Konfiguration muss bei Streams verwendet werden, wenn parallel keine Ausgabe über eine Soundkarte erfolgt.
audio_output { type "null" name "Null Output" mixer_type "none" # optional }
Normalerweise spielt der MPD die Musikdateien aus dem angegebenen Verzeichnis oder wird mit einer Playlist gefüttert. Damit man wechselnde Playlisten für den AutoDJ erstellen kann, kopiert man Musikdateien im MP3- oder OGG-Format in das angegebene Verzeichnis und ruft das unten stehende Script auf.
autodj.sh update
Das Script durchstöbert das Verzeichnis, normalisiert die Lautstärke und nennt die MP3-Dateien nach den Tags. Danach kann der MPD mit der neuen Playlist gefüttert werden.
autodj.sh start
Das Stoppen des MPDs über
autodj.sh stop
führt nicht zum Anhalten des MPDs, sondern lädt eine feste Playlist, welche nur eine Datei mit Stille enthält. Dieser Trick diente mir dazu, um eine Pause zwischen zwei externen Streams (z.B. Übergabeverzögerung bei DJ-Wechsel im Webradio) zu überbrücken und den Stream nicht zu verlieren. Icecast kennt dazu die Option „fallback-mount“.
#!/bin/sh PLAYLIST=/var/lib/mpd/playlists/autodj.m3u DIR=/srv/media/AutoDJ MPC=`which mpc` NORMALIZE=`which normalize` EYED3=/usr/local/bin/eyeD3 VORBISGAIN=`which vorbisgain` ID3V2=`which id3v2` if [ ! -d $DIR ]; then echo "Directory for AutoDJ not found" exit 1 fi mp3 () { find "$1" -type f -iname '*.mp3' | while read file; do #$ID3V2 -d -C "$file" if [ "$NORMALIZE" != "" -a -x "$NORMALIZE" ]; then $NORMALIZE -q -a -10db "$file"; fi if [ "$EYED3" != "" -a -x "$EYED3" ]; then $EYED3 --rename="%A-%t" --to-v2.4 --fs-encoding=UTF8 "$file" >/dev/null fi done; } ogg () { find "$1" -type f -iname '*.ogg' | while read file; do ARTIST=`ogginfo "$file" | grep -i "ARTIST=" | awk -F= '{print $2}'` TITLE=`ogginfo "$file" | grep -i "TITLE=" | awk -F= '{print $2}'` if [ ! -f "$1/$ARTIST - $TITLE.ogg" ]; then if [ "$VORBISGAIN" != "" -a -x "$VORBISGAIN" ]; then $VORBISGAIN -q -g -10 "$file" fi mv "$file" "$1/$ARTIST - $TITLE.ogg" fi done; } case $1 in -update) if [ -f $PLAYLIST ]; then rm $PLAYLIST fi mp3 $DIR ogg $DIR find $DIR -type f \( -iname '*.mp3' -o -iname '*.ogg' \) -exec basename {} \; > $PLAYLIST echo "found `/usr/bin/grep -c "" $PLAYLIST` songs for playlist autodj..." $MPC update ;; -start) $MPC crop $MPC load autodj $MPC play 2 $MPC del 1 ;; -stop) $MPC crop $MPC load quiet $MPC current --wait $MPC playlist | /usr/bin/grep -c "" | /usr/bin/xargs $MPC play $MPC del 1 ;; esac