GrabDuck

MPD (Music Player Daemon) - сервер для воспроизведения музыки дома и в офисе - ...

:

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
2
 listen: Failed to listen on *:6600: Address already in use  Аварийный останов

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

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

Установка 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). В строке

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

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

Клиенты

Список всех клиентов вы можете увидеть на официальном сайте на mpd.wikia.com/wiki/Clients.

Для примера настрою два клиента - консольный 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.