MPD (Music Player Daemon)

Введение

Для тех, кто в танке: mpd (Music Player Daemon) - это музыкальный плеер с клиент-серверной архитектурой. Вы запускаете сервер (собственно, mpd), указывая, где расположена ваша музыкальная коллекция, после чего подключаетесь к mpd клиентской программой, с помощью которой получаете возможность управлять сервером. Музыку воспроизводить сам mpd => нет необходимости держать запущенным определенный клиент.

Такая организация работы дает несколько больших плюсов:

  • Воспроизведение вынуждено прерывается только после останова сервера (логины/логауты, запуски/остановы XWindow никоим образом на проигрывание музыки не влияют)

  • Плеер доступен и с других компьютеров, объединенных в сеть с тем, на котором mpd выполняется

  • Вы можете запустить сотню клиентов, каждый из которых будет выполнять свою функцию - например, если ваш клиент не поддерживает скроблинг, то запустите еще один, который целенаправленно будет отсылать данные на last.fm и иже с ним


Возможности mpd:

  • Поддержка форматов Ogg Vorbis, FLAC, OggFLAC, MP2, MP3, MP4/AAC, MOD, Musepack и WAV

  • Удалённое управление MPD через сеть (+поддержка IPv6)

  • Потоковое HTTP воспроизведение FLAC, OggFLAC, MP3 и Ogg Vorbis

  • Читает и кэширует информацию метаданных (теги) — (ID3 (id3v1 и id3v2)), комментарии Vorbis и теги MP4

  • MPD умеет перекодировать теги

  • Поддержка буфера при проигрывании (предотвращает пропуски при высокой загруженности или большом времени отклика сети)

  • Поддержка плавного наложения/плавного перехода (Crossfading)

  • Поддержка прокрутки

  • Сохранение, загрузка и управление плейлистами (в формате m3u)

  • Контроль громкости (OSS, ALSA и програмные микшеры)

  • Поддержка широкого диапазона аудио устройств (OSS, ALSA, Sun, esd, ARts, PulseAudio и др.)

  • Демон тестирован на GNU/Linux, FreeBSD, OpenBSD, NetBSD, Solaris и HP-UX


Сервер

Как ни странно, серверная часть mpd называется "mpd". Здесь вы можете забрать пакеты с исходными кодами/бинарными сборками mpd. Текущая стабильная версия mpd - 0.13.2, датируется июнем сего года. Сделать snapshoot с проекта можно с помощью cvs:

svn co https://svn.musicpd.org/mpd/trunk mpd

Я использую Slackware и поэтому компилирую mpd из исходников. К слову, компиляция и установка осуществляется банальным

./configure --prefix=/usr
make
su -c 'make install'

Кстати, в Slackware 12.1 доустановите faad2 - это библиотека, используемая mpd для воспроизведения mp4/aac. Взять faad2 можно на официальном сайте проекта. Компилировать так:

./bootstrap
./configure --with-mp4v2 --prefix=/usr
make
su -c 'make install'

Перед запуском сервера необходимо отредактировать конфигурационный файл. Сделайте:

cp MPD_SRC_DIR/doc/mpdconf.example ~/.mpdconf
mkdir ~/.mpd
mkdir ~/.mpd/playlists

(Здесь MPD_SRC_DIR - папка с исходниками mpd)
Таким образом, главным конфигурационным файлом будет "~/.mpdconf", каталог "~/.mpd" будет главным каталогом программы (в нем будут располагаться логи, коллекционная база данных, файл с данными о текущем статусе плеера) , а в "~/.mpd/playlists" будут лежать созданные вами плейлисты.

* Кстати, по умолчанию mpd ищет нужные файлы сначала в "/etc", а потом в "HOME" запустившего пользователя. Скорее всего, вам понадобится запускать несколько серверов mpd для разных пользователей - таким образом, целесообразней создавать файлы настройки в домашних каталогах, а не в "/etc"

Отредактируем "~/.mpdconf". Умолчательные настройки хороши, однако кое-что все же нужно "допилить":

  • В секции "REQUIRED PATHS" вместо "~" впишите полные пути к домашнему каталогу пользователя (необходимо, если вы будете запускать mpd root'ом - я делаю именно так, т.к. mpd стартует у меня при загрузке системы из специального демона)

  • Повторите предыдущий пункт для секции "OPTIONAL PATHS" (и обязательно снимите комментарий с "pid_file" и "state_file"

  • Снимите комментарий с полей "bind_to_address" и "port" (порт, на котором будет висеть mpd). Кстати, поскольку у меня запущено несколько mpd, в поле "port" содержаться разные значения для каждого сервера

  • Раскомментируйте поле "password" и отредактируйте его следующим образом: ПАРОЛЬ@read,add,control,admin - таким образом, при подключении к mpd клиентом с паролем "ПАРОЛЬ" вы получите права на чтение потока и всяческое управление им (добавление/удаление треков, останов/запуск и т.п.)

  • Раскомментируйте поле "default_permissions" и установите его в "read" - таким образом, клиенты, подключившиеся к серверу без пароля, смогут только читать поток

  • Поля "filesystem_charset" и "id3v1_encoding" я рекомендую установить в вашу общесистемную кодировку (у меня - "UTF-8"). С "filesystem_charset" все ясно, а вот с "id3v1_encoding" возникает соблазн поставить "CP1251" и получить удобочитаемые русские теги - однако, в этом случае при создании базы треков mpd постоянно вылетает и я счел меньшим злом перекодировать все треки из "CP1251" в "UTF-8" с помощью EasyTag, чем решать проблему копанием в mpd

  • Удобства ради раскомментируйте поле "save_absolute_paths_in_playlists" и установите его в "yes"


Теперь создадим базу треков в коллекции:

mpd --create-db

ИЛИ

mpd --create-db /home/USER/.mpdconf

* Этими же командами вы можете базу данных обновить
** Здесь и далее "USER" - имя текущего пользователя

Запуск:

mpd

ИЛИ

mpd /home/USER/.mpdconf

Останов:

mpd --kill

ИЛИ

mpd --kill /home/USER/.mpdconf

Как вы могли заметить, уникальность каждого запущенного сервера mpd в его конфигурационным файле

Напоследок, демон "rc.mpd" для Slackware:

#!/bin/sh
#
# Start/stop/restart the MPD server.
#

mpd_start() {
echo "Start mpd"
/usr/bin/mpd /home/USER/.mpdconf
/usr/bin/scmpc -f /usr/share/scmpc/scmpc.conf
}

mpd_stop() {
echo "Stop mpd"
/usr/bin/mpd --kill /home/USER/.mpdconf
killall scmpc
}

mpd_restart() {
mpd_stop
sleep 2
mpd_start
}

case "$1" in
'start')
mpd_start
;;
'stop')
mpd_stop
;;
'restart')
mpd_restart
;;
*)
mpd_start
esac

* scmpc - клиент для mpd, отсылающий информации на last.fm о текущем треке. О нем я расскажу немного позже

Консольные клиенты

Собственно, наиболее популярны два консольных клиента - mpc и ncmpc.

mpc

mpc - неитерактивный консольный клиент для mpd. Скачать его (в виде пакета с исходным кодом) можно с официального сайта mpd - вот отсюда (текущая версия 0.12.1)

Установка:

./configure --with-default-host="[PASSWORD@]HOST" --with-default-port="PORT" --prefix=/usr
make
su -c 'make install'

Здесь --with-default-host и --with-default-port указывают, к какому серверу mpd mpc должен подключаться по умолчанию. [PASSWORD@] можно опустить. Если опустить эти два аргумента, то умолчательным сервером будет localhost:6600 (без пароля)

Использование:

mpc COMMAND ARG
mpc --help

Здесь COMMAND - команда серверу, а ARG - аргументы команды. Полный список команд можно получить при вызове mpc с ключом "--help"

Переменные среды MPD_HOST и MPD_PORT определяют, к какому серверу необходимо подключаться. Формат их значений идентичен формату значений ключей --with-default-host и --with-default-port скрипта configure

* Кстати, в MPC_SRC_DIR/doc лежит файл mpc-bashrc - добавьте содержимое этого файла в ~/.bashrc и вы получите удобное дополнение по TAB для mpс

ncmpc

ncmpc - в отличие от mpc, интерактивный клиент для mpd. Официальный сайт проекта - текущая версия: 0.11.1

Как обычно, я устанавливаю ncmpc из исходных кодов:

./configure --with-default-host="[PASSWORD@]HOST" --with-default-port="PORT" --prefix=/usr
make
su -c 'make install'

Запускаем ncmpc:

ncmpc

* Переменные среды MPD_HOST и MPD_PORT определяют, к какому серверу необходимо подключаться. Формат их значений идентичен формату значений ключей --with-default-host и --with-default-port скрипта configure

Управляется ncmpc в основном с клавиатуры, однако доступна и мышь. Функциональные клавиши:

  • F1 - помощью (список сочетаний клавиш)

  • F2 - плейлист

  • F3 - просмотр коллекции

  • F5 - поиск трека по тегамv


Графические клиенты

GUI'вых клиентов великое множество, однако ж мне понравились только два: sonata и qmpdclient

Sonata

Sonata - графический клиент для mpd, написанный на python с помощью gtk2. Sonata многое чего умеет (правда не осиливает очередь воспрозведения) - включая скроблинг и управление из консоли, но я предпочел ей qmpdclient

Официальный сайт Sonata - текущая версия: 1.5.2

QMPDClient

QMPDClient - графический клиент для mpd, написанный на C++ с помощью QT4. Красив и удобен, сворачивается в трей и выводит сообщения о проигрываемой композиции, управляется с помощью мультимедийной клавиатуры. Общаться с last.fm не умеет, однако это поправимо с помощью клиента под названием scmpc

Скачать QMPDClient можно отсюда - текущая версия: 1.0.9

Я устанавливаю клиент из исходных кодов:

tar xzf qmpdclient-1.0.9.tar.gz
cd qmpdclient-1.0.9
wget -c http://havtknut.tihlde.org/qmpdclient/files/translations/ru_RU.ts
qmake-qt4
make
su -c 'make install'

* ru_RU.ts - исходный код локализации

Запустить QMPDClient можно следующим образом:

qmpdclient &

Другие клиенты

Собственно, очень хотелось бы сделать еще пару вещей с mpd:

  1. Отправлять данные о проигрываемом треке на last.fm

  2. Управлять mpd с помощью web-интерфейса

  3. Слушать mpd'овский поток из Windows


Last.fm

Есть две альтернативы:

  1. Sonata - в минусе у Sonat'ы ее графический интерфейс - связь с last.fm прервется с остановом X'ов

  2. Использовать консольный неинтерактивный клиент, заточенный под скроблинг: список таковых можно найти здесь


Я пошел по второму пути и выбрал клиент под названием scmpc

Официальный сайт scmpc - текущая версия: 0.2.2 датирована декабрем 2006-го, однако работает "на ура"

Зависимости, которые нужно удовлетворить в Slackware 12.1:

Компиляция и установка scmpc:

./configure --with-default-host="[PASSWORD@]HOST" --with-default-port="PORT" --prefix=/usr
make
su -c 'make install'

Настройка scmpc (я использую last.fm только одним пользователем):

su -c 'cp SCMPC_SRC_DIR/examples/scmpc.conf /usr/share/scmpc/scmpc.conf'
su -c 'mkdir /var/lib/scmpc'

Здесь SCMPC_SRC_DIR - путь к каталогу с исходным кодом scmpc

Кое-какие замечания относительно /usr/share/scmpc/scmpc.conf:

  • Расскоментируйте поля log_level, log_file, pid_file, cache_file

  • Расскоментируйте поля host, port, timeout - первые два указывают, с каким сервером mpd scmpc работает

  • В поля username и password впишите ваш логин и пароль для last.fm


Запуск scmpc:

/usr/bin/scmpc -f /usr/share/scmpc/scmpc.conf

Останов:

killall scmpc

Примечание:

Q: Все хвалят mpdscribble, почему ты его не используешь?
A: mpdscribble тянет за собой libsoup, а та в свою очередь gnome-common. В-общем, устанавливать Gnome ради клиента для mpd мне лениво

Web-клиенты

Посмотрите полный список web-клиентов вот здесь

Windows-клиент

Проблема взаимоотношений Windows и mpd подробно описана здесь

В Windows я использую QMPDClient. Скачать версию 1.0.9 для Windows можно по этой ссылке

Почитать

3 комментария:

r1s комментирует...

Спасибо за подробный обзор. Пробовал mpd, но долго он у меня не продержался, сейчас наверно попробую еще раз. А почему Вы не используете checkinstall или slackbuild? Для тех же, кто не хочет заморачиваться даже с такой просто компиляцией, здесь есть собраные пакеты.

verzhak комментирует...

Пожалуйста :-)

Собственно, по привычке и Just for Fun на домашнем десктопе ставлю все из исходников.

slackbuild, linuxpackages и иже с ними - оно, конечно, хорошо, но там не особенно много программ - и большинство не особенно свежие.

checkinstall'ом я пользуюсь для удаления кое-каких несговорчивых программ. В этом - он рулит

Alex Balin комментирует...

Не возникала ли у кого проблема с mpd - проигрывает mp3 в два раза медленнее, после остановки/запуска скорость нормализуется. Мне пришлось из-за этого отказаться от него. от mp3 файлов не зависит, это происходит совершенно случайно в не зависисмости от битрейта и прочего...