MPD - Music Player Daemon, демон, позволяющий без особых ресурсозатрат воспроизводить аудиофайлы. Работает по принципу клиент/сервер, причём клиент может располагаться как на самом сервере, так и на другой машине в локальной сети. Внимание: установка и настройка MPD - только половина работы, обязательно необходим клиент для управления воспроизведением.

В этой статье я покажу как поставить демона и заставить его петь песни на самом сервере и на подключающихся по сети компьютерах. В качестве ОС будет использована Ubuntu версий 10.04 и 11.04.

Установка

Для начала ставим демона на сервер:

sudo apt-get install mpd

Т.к. это демон - он не ест много ресурсов, следовательно не будет мешаться на вашем сервере, каким бы маломощным он ни был.

Настройка

Нам необходимо редактировать файл /etc/mpd.conf, в котором находятся все настройки mpd.

Разработчики не поленились и хорошо расписали комментарии.

Прописываем нужные папки, сокращаем комментарии, приводим его в человеческий вид:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
 # Корректировка по статье на http://wikiadmin.net
  # Папка с музыкой
  music_directory     "/home/ibis/Music"
  # Папка с плейлистами
  playlist_directory      "~/.mpd/playlists"
  # Файл базы данных 
  db_file         "~/.mpd/mpd.db"
  # Файл, где будут жить логи ошибок
  log_file            "~/.mpd/mpd.log"
  # process identificator file
 # Требует права 644 для пользователя, от которого запускается
  pid_file            "/var/run/mpd/pid"
  # Текущий список воспроизведения
  state_file          "~/.mpd/state"     
  # Пользователь, который имеет право запускать демона
 # Нельзя запускать демона от root
 user             "ibis"
 # Настройки доступа по сети
 # Разрешение доступа - "localhost" или "any"
 # Порт (по умолчанию)
 # bind_to_address        "any"
 # port               "6600"
 # Настройки вывода аудио
 # Не стоит их стирать, пока вы не убедитесь, что всё работает безупречно
 audio_output {
    type      "alsa"
    name      "My ALSA Device"
    device        "hw:0,0"    # optional
 #    format      "44100:16:2"    # optional
    mixer_device  "default"   # optional
    mixer_control "PCM"       # optional
    mixer_index   "0"     # optional
 }
 
 # An example of an OSS output:
 #
 #audio_output {
 #    type        "oss"
 #    name        "My OSS Device"
 #    device      "/dev/dsp"  # optional 
 #    format      "44100:16:2"    # optional
 #    mixer_device    "/dev/mixer"    # optional
 #    mixer_control   "PCM"       # optional
 #}
 #
 # An example of a shout output (for streaming to Icecast):
 #
 #audio_output {
 #    type        "shout"
 #    encoding    "ogg"           # optional
 #    name        "My Shout Stream"
 #    host        "localhost"
 #    port        "8000"
 #    mount       "/mpd.ogg" 
 #    password    "hackme"
 #    quality     "5.0"
 #    bitrate     "128"
 #    format      "44100:16:1"
 #    protocol    "icecast2"      # optional
 #    user        "source"        # optional
 #    description "My Stream Description" # optional
 #    genre       "jazz"          # optional
 #    public      "no"            # optional
 #    timeout     "2"         # optional
 #}
 #
 # An example of a httpd output (built-in HTTP streaming server):
 #
 #audio_output {
 #    type        "httpd"
 #    name        "My HTTP Stream"
 #    encoder     "vorbis"        # optional, vorbis or lame
 #    port        "8000"
 #    quality     "5.0"           # do not define if bitrate is defined
 #    bitrate     "128"           # do not define if quality is defined
 #    format      "44100:16:1"
 #}
 # 
 # An example of a pulseaudio output (streaming to a remote pulseaudio server)
 #
 #audio_output {
 #    type        "pulse"
 #    name        "My Pulse Output"
 #    server      "remote_server"     # optional
 #    sink        "remote_server_sink"    # optional
 #}
 #
 ## Example "pipe" output:
 #
 #audio_output {
 #    type        "pipe"
 #    name        "my pipe"
 #    command     "aplay -f cd 2>/dev/null"
 ## Or if you're want to use AudioCompress
 #    command     "AudioCompress -m | aplay -f cd 2>/dev/null"
 ## Or to send raw PCM stream through PCM:
 #    command     "nc wikiadmin.net 8765"
 #    format      "44100:16:2"
 #}
 #
 ## An example of a null output (for no audio output):
 #
 #audio_output {
 #    type        "null"
 #    name        "My Null Output"
 #}
 #
 # This setting will change all decoded audio to be converted to the specified
 # format before being passed to the audio outputs. By default, this setting is
 # disabled.
 #
 #audio_output_format     "44100:16:2"
 #
 # На всякий пожарный оставляем эту строчку
 #
 #samplerate_converter        "Fastest Sinc Interpolator"
 #
 ###############################################################################
 
 # Кодировка тегов
 
 id3v1_encoding           "UTF-8" 

Чтобы демон не стучал в пустоту - создаём каталог playlists и файлы mpd.db, mpd.log и state:

1
2
3
4
 mkdir /home/ibis/.mpd/playlists
 touch /home/ibis/.mpd/mpd.db
 touch /home/ibis/.mpd/mpd.log
 touch /home/ibis/.mpd/state

Разрешаем пользователю читать файл с настройками mpd:

1
 chmod 644 /etc/mpd.conf

Почти всё готово. Обновляем базу данных:

1
 mpd --create-db

Запускаем демона:

1
 mpd

Если выскакивают ошибки типа

1
2
 listen: Failed to listen on *:6600: Address already in use
 Аварийный останов

То убейте процесс, так как порт уже просто занят

1
 sudo killall -9 mpd

И повторите команду. Настройка сервера завершена, займёмся клиентами.

Установка ALSA

В случае, если установка проходит на Ubuntu Server, изначально звуковой системы ALSA там может просто не быть. Установите её:

apt-get install alsa-base alsa-tools

И инициализируйте:

alsactl init

Рабочий конфиг /etc/mpd.conf с Ubuntu Server 12.04:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
 music_directory         "/media/raid1"
 playlist_directory              "/var/lib/mpd/playlists"
 db_file                 "/var/lib/mpd/tag_cache"
 log_file                        "/var/log/mpd/mpd.log"
 pid_file                        "/var/run/mpd/pid"
 state_file                      "/var/lib/mpd/state"
 sticker_file                   "/var/lib/mpd/sticker.sql"
 user                            "root"
 group                          "root"
 bind_to_address         "10.0.0.1"
 port                            "6600"
 metadata_to_use "artist,album,title,track,name,genre,date,composer,performer,disc"
 auto_update    "yes"
 auto_update_depth "5"
 follow_outside_symlinks "yes"
 follow_inside_symlinks          "yes"
 input {
         plugin "curl"
 }
 audio_output {
         type            "alsa"
         name            "My ALSA Device"
         device          "hw:0,0"
         format          "44100:16:2"
         mixer_control   "Master"
 }
 filesystem_charset              "UTF-8"
 id3v1_encoding                  "UTF-8"

Адрес 10.0.0.1 смотрит в локальную сеть, /media/raid1 - отдельный диск с музыкой

Была проблема с регулятором громкости. Он не хотел работать в Ario (Windows) и MPDroid (Android). В строке

1
 mixer_control   "PCM"

поставил значение

1
 mixer_control   "Master"

и проблема пропала.

Клиенты

Список всех клиентов вы можете увидеть на официальном сайте.

Для примера настрою два клиента - консольный mpc и Ario

с mpc всё очень просто:

  • ставим

sudo apt-get install mpc

  • создаём плейлист из всех файлов в папке, той самой, которую указывали в первой строчке конфига:

mpc ls | mpc add

  • и начинаем воспроизведение с первой позиции

mpc play 1

mpc не загромождает консоль, работает в фоновом режиме.

Чтобы узнать, что он сейчас воспроизводит - воспользуйтесь командой

mpc stats

И почитайте, там расписаны все команды по управлению воспроизведением и редактированию плейлистов

man mpc

Для управления сервером с клиента mpc на другой машине необходимо прописывать команды в формате

mpc -h

например

mpc -h 192.168.200.105 play 5

где - ip машины, на которой установлен mpd

Ario ставится аналогично

sudo apt-get install ario

Запускается от простого пользователя, интуитивно настраивается в пару кликов мышью, при первом запуске необходимо ввести ip сервера или поставить галочку о том, что клиент соседствует с mpd на одной машине, при желании указать имя профиля и подключиться. Плейлисты создются путём выбора исполнителя - альбома - названия и двойного щелчка по необходимым исполнителям, альбомам, композициям. поддерживается выделение с помощью shift. Не забудьте в настройках на вкладке Server (Сервер) поставить галочку Stop music on exit (Останавливать воспроизведение при выходе), иначе клиент закроете - а демон продолжит воспроизведение. ario тоже не мешается, т.к. висит в трее.

Данные настройки просты на десктоп-машине. Для установки на сервере нужно так же настроить ALSA.