Инструменты пользователя

Инструменты сайта


mpd

mpd

mpd - Music Player Daemon - музыкальный плеер, запускающийся в качестве службы, выполненный по схеме «клиент-сервер». Приложение занимает исключительно мало ресурсов и идеально подходит для различных систем с небольшим объёмом оперативной памяти и слабым процессором. mpd не имеет собственного интерфейса управления - служба выполняет операции передачи чтения/декодирования музыкального файла(-ов) и направления потока на аудио-устройство. Непосредственное управление треками - создание списков воспроизведения, запуск и останов проигрывания композиции, управление уровне громкости - ложиться на «клиентское» приложение. В конце статьи представлен программ для управления mpd.
Материалом для написания статьи послужил собственный опыт установки и настройки mpd.
Схема


Ниже представлено описание схемы:

  • 1. bsd10 - компьютер под управлением FreeBSD 10 в котором установлена хорошая звуковая карта и подключены колонки. На этом хосте установлен mpd.
  • 2. nas6 - компьютер под управлением CentOS 61) на котором реализован NAS (доступ к файлам по протоколам NFS/SMB/iSCSI). Музыкальные файлы доступны по протоколу NFS.
  • 3. Устройства подключены к гигабитному (gigabit) коммутатору и доступны в рамках одной локальной сети к которой также имеют доступ по Wi-Fi (wireless) мобильные устройства.
  • 4. Для управления mpd с устройств под управлением OS Android используется приложение MPDroid, на OS Windows - Auremo MPD, а на OS Linux - mpc.

Установка и настройка MPD

Установка

Так как у меня в качестве устройства к которому подключены колонки используется ПК под управлением OS FreeBSD 10, то и описание процесса установки и настройки mpd будет, соответственно, для FreeBSD. Однако в других UNIX-like OS (Linux) последовательность действий аналогичная - различия присутствуют только в методе инсталляции (могут использоваться различные пакетные менеджеры) и процессе запуска сервиса2).
Установка с помощью pkg:

# pkg install musicpd11

Если же Вы предпочитаете собирать программу из исходных текстов (например, для включения поддержки некоторых форматов воспроизведения), то следует выполнить:

# cd /usr/ports/audio/musicpd
# make install

Личный опыт

Личный опыт

Личный опыт

При сборке с указанием поддержки MIKMOD в разделе FILE_FORMAT в версии mpd 0.18.11 у меня наблюдалась нестабильная работа ПО в процессе создания базы данных файлов. Настоятельно рекомендую отказаться от использования опций, которые вам не требуется «здесь и сейчас», либо быть готовым к непредсказуемому поведению ПО.
Мнение является субъективным! :-)


По завершению процедуры инсталляции следует добавить запись в файл /etc/rc.conf для автоматического запуска сервиса при старте системы:

musicpd_enable="YES"

Настройка

Для настройки mpd потребуется отредактировать файл /usr/local/etc/musicpd.conf.
Ниже приведён пример моего конфигурационного файла:

# каталог с музыкальными файлами
music_directory         "/zspool/nas6/store/music"
# каталог для сохранения "списков воспроизведения"
playlist_directory      "/zspool/mpd/playlists"
# файл базы данных, содержащий сведения о композициях
db_file                 "/zspool/mpd/database/mpd.db"
# файл журнала -- сведения о работе приложения
log_file                "/zspool/mpd/mpd.log"
# PID
pid_file                "/zspool/mpd/pid"
# сведения о текущем состоянии сервиса и композиции
state_file              "/zspool/mpd/state"
# пользователь от имени которого работает mpd
user                    "filesrv"
# IP адрес(-а), который(-ые) "слушает" сервис
bind_to_address         "192.168.100.111"
bind_to_address         "127.0.0.1"
# также mpd может взаимодействовать через UNIX-сокет
# путь к сокету
bind_to_address         "/zspool/mpd/socket"
# порт для подключения по TCP
port                    "6600"
# уровень протоколирования
log_level               "default"
# какие сведения собирать о композициях (извлекать из ID3)
metadata_to_use         "artist,album,title,track,name,genre,date,composer,performer,disc"
# 
input {
        plugin "curl"
}
# вывод на аудио-устройство (используется OSS)
audio_output {
        type            "oss"
        name            "My OSS Device"
}
# кодировка в файловой системе
filesystem_charset      "UTF-8"
# кодировка в которой хранятся данные в ID3 тэгах
id3v1_encoding          "UTF-8"

Запуск сервиса
Для запуска сервиса mpd потребуется выполнить команду:

# service musicpd start

При первом запуске появиться сообщение вида db: Database corrupted – база данных повреждена – однако его следует игнорировать, так как файл, содержащий сведения о композициях пуст и будет создан.

"Рецепты"

В этом разделе я расскажу о некоторых настройках, которые были выполнены в процессе реализации вышеуказанной схемы.

Дело в том, что моя свою музыкальную коллекцию я начал собирать ещё в 2002 году, когда в большинстве файлов в формате mp3 данные в ID3-тэгах хранились преимущественно4) в кодировке CP1251. По какой-то причине mpd – несмотря на всевозможные ключи при сборке и наличии поддержки набора символов в iconv – корректно работать с кодировкой CP12515) работать не захотел и часть имён отображалось некорректно. По этой причине я решил выполнить конвертацию метаинформации из CP1251 в UTF-8.
Кажется, что нет ничего проще6), однако я потратил почти часа на поиск инструмента с помощью которого можно автоматизировать процесс. Скрипт называется mid3iconv и входит в состав пакета python-mutagen.

Описание и ключи запуска

Описание и ключи запуска

Описание и ключи запуска

# head -2 `which mid3iconv` | grep -v "/usr"
# ID3iconv is a Java based ID3 encoding convertor, here's the Python version.

Ключи запуска:

Options:
  --version             вывод версии
  -h, --help            вывод справки
  -e ENCODING, --encoding=ENCODING
                        текущая кодировка в которой хранятся тэги (по умолчанию UTF-8)
  -p, --dry-run         демонстрационное преобразование (не вносить изменения в файл(-ы) )
  --force-v1            использовать тэги ID3 версии 1, даже если ID3v2 присутствуют
  --remove-v1           удалить тэги ID3 версии 1 после обновления файла(-ов)
  -q, --quiet           выводить только сообщении об ошибках
  -d, --debug           выводить только сообщения об обновлении информации


Установка
Для установки mid3iconv необходимо выполнить:

# pkg install python-mutagen

Процедура преобразования
Для выполнения процедуры изменения перекодировки тэгов следует выполнить:
:!: Внимание! Будут обработаны файлы во всех вложенных каталогах!

# cd /store/music
# find -iname '*.mp3' -print0 | xargs -0 mid3iconv -eCP1251 --remove-v1

Установка и настройка клиентов

Для OS Android

  • 1. С помощью PlayMarket найти и установить приложение MPDroid.
  • 2. Запустить программу и ввести IP / port сервера на котором запущен mpd.
  • 3. Проверить соединение, запустив воспроизведение музыки.

Для OS Microsoft Windows

  • 1. Перейти на сайт Auremo MPD, загрузить и запустить файл установки приложения.
  • 2. В настройках программы указать IP / port сервера на котором запущен mpd.
  • 3. Проверить соединение, запустив воспроизведение музыки.

Для OS Linux

  • 1. С помощью пакетного менеджера7) выполнить установку пакета ncmpc
  • 2. Запустить ncmpc.
  • 3. Проверить соединение, запустив воспроизведение музыки.

Полезная функция ncmpc – возможность выполнения обновления базы данных, содержащую сведения о композициях. Для этого потребуется перейти в раздел Help с помощью клавиши 1 на клавиатуре8) и нажать комбинацию клавиш [Ctrl]+[U] на клавиатуре. База данных будет обновлена!

Дополнение: установка в Linux openSUSE

Процесс установки и настройки mpd в OS Linux openSUSE 13.2 - с учётом особенностей моей конфигурации - оказался чуть более сложным, нежели во FreeBSD.
Дело в том, что в ПК под управлением OS openSUSE у меня были установлены три аудиокарты, а вывод требовалось реализовать лишь на одну – ASUS Xonar D1.

Как определить, какие звуковые карты установлены в системе?

Как определить, какие звуковые карты установлены в системе?

Как определить, какие звуковые карты установлены в системе?

# cat /proc/asound/cards
0 [D1             ]: AV200 - Xonar D1
                      Asus Virtuoso 100 at 0xd000, irq 20
 1 [Intel          ]: HDA-Intel - HDA Intel
                      HDA Intel at 0xfe200000 irq 45
 2 [NVidia         ]: HDA-Intel - HDA NVidia
                      HDA NVidia at 0xfe080000 irq 17


С настройками ASUS Xonar под различные версии OS Linux у меня регулярно возникали проблемы. В OS Linux CentOS 6, например, звука я добиться не смог. В openSUSE – потребовалось некоторое время. Дело в том, что из-за особенностей реализации архитектуры звуковой карты требуется выполнить определённые манипуляции c настройкой параметров pcm9).
В итоге получалось, что такие приложения, как alsamixer устройство видели, тестирование успешно выполнялось, а приложения mpd или cmus воспроизводить звук отказывались.

Тестирование – вывод звука

Тестирование – вывод звука

Тестирование – вывод звука

# speaker-test -Dplug:front -c2 -l5 -twav
[Ctrl]+[c] <- если всё в порядке


Как получилось настроить?

  • 1. Требуется переопределить звуковую карту на default. Для этого нужно:
    • 1.1 установить plugin для системы управления YaST: # zypper install yast2-sound
    • запустить Yast2 и выбрать: HardwareSound (или: # yast2 sound ;; или # xdg-su -c »/sbin/yast2 sound» )
    • 1.2 назначить звуковую карту «основной»:
      • а) выбрать пункт в списке;
      • б) нажать кнопку Other;
      • в) выбрать Set as the Primary Card
  • 2. Создать файл /etc/asound.conf
pcm.!default {
        type plug
slave.pcm {
        type dmix
        ipc_key 1024
slave {
        pcm "hw:0,0"
        rate 44100
}
}
}
defaults.pcm.rate_converter "samplerate_medium"
  • 3. Теперь можно устанавливать настройки в приложениях.

Конфигурационный файл cmus

Конфигурационный файл cmus

Конфигурационный файл cmus

Фрагмент.

set mixer.alsa.channel=PCM
set mixer.alsa.device=default
set mixer.oss.channel=PCM
set mixer.oss.device=
set output_plugin=alsa


Конфигурационный файл mpd

Конфигурационный файл mpd

Конфигурационный файл mpd

К сожалению, пришлось запускать от имени пользователя root, так как в ином случае «база данных» не создаётся.

music_directory         "/zspool/music"
playlist_directory      "/io/mpd/pls"
db_file                 "/io/mpd/dbs/mpd.db"
log_file                "/io/mpd/mpd.log"
pid_file                "/io/mpd/mpd.pid"
state_file              "/io/mpd/mpdstate"
user                    "root"
group                   "audio"
bind_to_address         "127.0.0.1"
bind_to_address         "192.168.1.11"
bind_to_address         "/io/mpd/socket"
port                    "6600"
log_level               "default"
metadata_to_use         "artist,album,title,track,name,genre,date,composer,performer,disc"
auto_update             "yes"
auto_update_depth       "3"
input {
        plugin "curl"
}
audio_output {
        type            "alsa"
        name            "default"
        device          "hw:0,0"        # optional
        mixer_type      "software"      # optional
}
filesystem_charset              "UTF-8"
id3v1_encoding                  "UTF-8"
1) RHEL 6 Client, однако настройка аналогична
2) разумеется, названия устройств в подсистеме /dev/ в *BSD отличаются от Linux
3) также существует ID3v2 :-)
4) не исключительно!
5) или windows-1251
6) редакторы ID3 есть во всех современных плеерах
7) yum,apt-get или zypper
8) при отсутствии специальных настроек для «горячих клавиш»
9) как это более лаконично описать я не знаю :-)
mpd.txt · Последние изменения: 2015/02/06 15:57 — Alex