mpd что это такое
Установка
Пакет mpd находится в официальных репозиториях Ubuntu, поэтому для установки необходимо выполнить команду:
Настройка
Конфигурационный файл можно найти по пути
он очень хорошо комментирован, поэтому если проблем с английским языком нет, с конфигурацией проблем не будет. Ниже приведено описание только тех пунктов, которые необходимо сконфигурировать для работы. Комментарии для удобства чтения удалены.
Замените «имя_пользователя» на имя своего пользователя.
Директория с музыкой.
Целесообразно создать в домашней папке директорию mpd, где будут храниться рабочие файлы приложения.
Следующие 6 строчек указывают место хранения рабочих файлов- создаваемых плейлистов, базы данных, лог файла, файла хранения PID и sticker_file.
Далее следуют основные настройки приложения.
Необходимо указать пользователя, от имени которого будет запускаться демон.
При запуске демона на сервере, необходимо указать IP адреса, которые будут иметь доступ к управлению плеером, возможные варианты:
localhost— для работы на локальном компьютере;
any— для доступа любого клиента из сети;
определенные IP адреса— через запятую можно выборочно указать адреса, имеющие доступ.
И порт, по умолчанию 6600.
Автообновление базы при добавлении файлов в папку с музыкой
Доступ к функциям демона по умолчанию.
Конфигурация аудио выхода. На современных дистрибутивах Ubuntu по умолчанию установлен музыкальный сервер PulseAudio, который целесообразно указать в настройках mpd, в результате этого вы получите нормализованный звук в различных приложениях и mpd. Достаточно указать только тип и имя, остальные параметры mpd определит автоматически.
Одновременно с этим нужно настроить pulseaudio на прием звукового потока по TCP, для этого в файле /etc/pulse/default.pa необходимо раскомментировать и подредактировать строчку
Указываем кодировку имен файлов и id3-тэгов.
и выставлением параметра
Теперь пульс не будет самостоятельно запускаться. Но нам-то он нужен! Создаем файл с именем pulseaudio.desktop в каталоге
Открываем текстовым редактором, например
Использование
Сервер установлен, настроен и запущен, теперь можно подключаться к нему любым из доступных клиентов и наслаждаться вашей любимой музыкой.
Интеграция с Unity
Данный пакет обеспечивает возможность переключать треки вперед, назад, ставить на паузу, а также быстро переключаться между созданными ранее списками воспроизведения.
После установки необходимо настроить приложение, для чего нажать на индикатор звука Unity и выбрать MPD Sound Menu, в появившемся окне в строке Library Path необходимо указать путь к папке с музыкой (это нужно для того чтобы при экспорте путей к файлу в MPRIS можно было формировать валидные URI ), а также, если MPD запущен не на локальном компьютере, а на сервере, ввести адрес MPD-хоста. При желании, можно выставить автоматический запуск при старте системы.
Выглядит это следующим образом: Как видно, в меню не отображается обложка диска воспроизводимого трека и содержимое MPD-sound-menu не корректно отображается на светлых темах GTK-кнопки становятся просто черными (ошибки интерфейса не являются mpd-sound-menu-специфичными и все давно зарепорчены в Ubuntu-пакет indicator-sound 1) ).
В настоящее время разработка проекта фактически заморожена, так как автор больше не использует MPD. Наработки для новой версии (включая асинхронную библиотеку libmpd-qt для работы с сервером MPD) автор готов передать любому энтузиасту, желающему развивать проект дальше.
Консольные клиенты
Полный функционал управления плеером предоставляет консольный клиент mpc. Для установки необходимо выполнить
MPD+cron+mpc=будильник
Создаем и сохраняем плейлист в mpd c приятными уху записями.
Делаем его исполняемым
Добавляем запись в cron пользователя
Клиенты GTK+
Пакет gmpc находится в официальных репозиториях, для установки необходимо выполнить:
При первом запуске появится помощник настройки подключения. Указываем параметры подключения, нажимаем кнопку «Подключить» и «Готово».
Основное окно выглядит следующим образом.
Клиенты Android
MPDroid
Удобный клиент MPD предоставляющий полный функционал управления демоном. После установки необходимо выбрать беспроводную сеть, при подключении к которой будет осуществляться управление MPD
После чего необходимо указать IP aдрес сервера и порт для подключения
Окно управления выглядит так:
Клиенты iOS
Довольно неплохой клиент на iOS MPoD предоставляет полное управление серверной частью плеера. Клиент самостоятельно сканирует сеть на наличие MPD, но так же адрес и порт сервера можно указать вручную.
И к тому же в настройках можно выбирать любой источник воспроизведения, указанный в конфиге MPD
Go, локдаун и новый MPD-клиент — встречайте Ymuse
Уже лет десять моим основным медиаплеером на компьютере является MPD, Music Player Daemon — фоновый сервис, воспроизводящий музыку.
Чтобы с этим сервисом как-то взаимодействовать, нужна программа-клиент. Таких программ существует не один десяток, но до недавнего времени я никак не мог найти ту, которая меня бы полностью устраивала — поэтому в один прекрасный день я решил написать свою (тут и локдаун кстати подвернулся).
Предлагаю вашему вниманию краткий обзор (сравнительно) нового MPD-клиента для Linux/GTK под названием Ymuse, версию 0.16 которого я недавно выпустил.
Music Player Daemon
Сначала немного о том, что же такое Music Player Daemon, — для тех, кто с ним незнаком.
Он представляет собой сервис (на айтишном жаргоне демон), который работает в фоновом режиме в недрах компьютера и способен воспроизводить музыку или стриминговое Интернет-аудио (Интернет-радио).
Помимо воспроизведения звука, сервис этот внешне никак себя не проявляет. Чтобы им управлять, требуется специальная программа, которую традиционно называют клиентом, и этих клиентов есть множество под разные платформы — от Windows до Wear OS.
Когда я впервые познакомился с такой концепцией разделения компонентов на невизуальный (воспроизводящий аудио) и визуальный, то был немного озадачен, однако довольно быстро осознал её удобство.
MPD берёт на себя управление музыкальной библиотекой (сканирование и индексирование аудиофайлов) и проигрывание файлов, а программу-клиента можно подобрать по вкусу. В такой архитектуре клиентов у MPD-демона может быть сколько угодно, причём они вообще могут располагаться на другом компьютере или даже мобильном телефоне — подключение к нему осуществляется по сетевому протоколу.
Нередко используется конфигурация, когда MPD крутится на микрокомпьютере типа Raspberry Pi, подключенном к колонкам, а управляют им с компьютера или через мобильное приложение.
Также MPD поддерживает плейлисты (списки воспроизведения) и стандартное стриминговое аудио, благодаря чему становятся доступны тысячи Интернет-радиостанций.
Кстати, в Линуксе есть смысл вместе с MPD сразу поставить пакет mpdris2, который свяжет его со стандартным интерфейсом медиаплеера MPRIS. Тогда демоном можно будет управлять стандартными медиа-клавишами (перемотка, пауза, стоп и т.д.).
Ymuse
Теперь о том, зачем, собственно, понадобился ещё один MPD-клиент.
В своё время я перепробовал несколько существующих клиентов и в итоге остановился на минималистичном Sonata, который практически полностью меня устраивал, за исключением пары моментов:
Последний пункт был следствием того, что Sonata написана на Python, который, как известно, не славится особой производительностью.
В общем, терпел я, терпел, и в конце концов не выдержал и написал свой клиент, который получил название Ymuse и иконку в виде бокала для мартини, напоминающего букву Y :
Внешне Ymuse также ожидаемо минималистичен:
При этом его функционал, по моему скромному мнению, достаточно богат:
Работает Ymuse по моим наблюдениям достаточно стабильно — у меня он вкалывает почти непрерывно.
Библиотека:
Потоки (Интернет-радиостанции):
Настройки:
Go Go Go
Для реализации Ymuse я выбрал молодой, но многообещающий язык Go, разрабатываемый Google.
Go — язык со строгой типизацией, который нативно компилируется под огромное количество платформ и архитектур, от Linux до Android и от SPARC до ARM. Это делает его весьма перспективной заменой морально устаревшему и довольно неуклюжему C++. Go очень дружественен к программисту, синтаксисом напоминая Python, а также предоставляет поддержку многопоточности «из коробки».
Ну и самое, пожалуй, главное для того, чтобы язык не зачах где-нибудь на обочине истории, это мощная стандартная библиотека функций, а также тысячи опенсорсных библиотек, любую из которых можно подключить к проекту одной командой go get ….
Именно наличие двух готовых библиотек — gompd для коммуникации с MPD-демоном и gotk3, позволяющей работать с графическим интерфейсом GTK — сделало возможным создание практически полной функциональной копии Sonata за пару недель (!) работы по вечерам. В обе библиотеки, кстати, пришлось слать пулл-реквесты, чтобы что-нибудь исправить или добавить.
И вот результат: с моим плейлистом на 12K+ треков Ymuse работает визуально раза в два-три быстрее «Сонаты». (Замечу в сторону, что скорость работы приложения теперь ограничивается производительностью GTK, что особенно заметно на больших списках.)
Исходный код и установка
Подробнее об установке можно прочитать на странице приложения (версия на английском).
Жалобы и предложения пишите в трекер на Гитхабе (желательно на английском).
Cобираем звуковую станцию на базе Linux и MPD
В основе референсного аудиопроигрывателя Bryston BDP–2 стоимостью, на минуточку, 156 тысяч рублей лежит стандартная материнка с процессором Intel Atom и звуковой картой ESI Juli@ PCI. В качестве ОС для этого плеера разработчики выбрали Debian Linux. При наличии времени и желания можно собрать аналогичный цифровой источник из имеющегося железа, а с установкой нужного ПО и тонкой настройкой параметров системы тебе поможет эта статья.
Введение
1 мс, что уже считается отличным результатом. Поэтому первым делом мы скомпилируем ядро и звуковой сервер MPD с RT-патчами, чтобы максимально снизить задержки, затем настроим высокоточный таймер событий, выставим максимальные приоритеты для устройств и процессов, связанных с передачей аудио, а в завершение проведем тюнинг системных параметров. В общем, сделаем то, что должны были сделать hi-end’овцы.
Будем рассматривать на примере древнего компа (материнка VIA Epia-MS, проц VIA C3 800 МГц, 512 Мб ОЗУ, звуковая карта ESI Juli@ PCI) и дистрибутива Debian 7.1, установленного по минимуму, то есть без графики и лишних сервисов. У тебя может быть другая звуковуха, только мы бы рекомендовали именно PCI/PCI-E, поскольку внешние карты USB могут некорректно работать с некоторыми материнскими платами.
Подопытный комп, аналоговая часть ESI Juli@ демонтирована
Для тестов использовался цифро-аналоговый преобразователь Nagra DAC
Компиляция RT-ядра
RT-патч предназначен для поддержки реального времени в ядре, причем не «мягкого», а «жесткого». Разница заключается в том, что системы «мягкого» реального времени допускают небольшое превышение желаемого времени выполнения, в системах же «жесткого» реального времени подобное превышение недопустимо. Патч накладывается на ванильное ядро, поэтому ставим все необходимое для его компиляции и качаем ядро и патч:
Распаковываем и патчим:
Вместо CONCURENCY_LEVEL=3 можешь поставить свое число, в зависимости от количества ядер процессора + 1.
Устанавливаем и перезагружаемся:
Выбор нужной опции ядра
Подготовка MPD
Для начала — что это такое? Зачем нужен еще один плеер, если их и так предостаточно? Собственно, MPD — демон с клиент-серверной архитектурой, что открывает довольно любопытные возможности, а именно:
Сам же MPD поддерживает множество возможностей, в том числе поддержку FLAC, ALAC, WAV, MP3, OGG, потокового воспроизведения аудио, gapless playback (воспроизведение без пауз)… всего не перечислишь.
Исходники берем с официального cайта (по указанным ниже причинам необходима версия 0.17.1), затем ставим необходимые зависимости для сборки:
После этого можно, в принципе, заходить в каталог и набирать команду autogen, а затем make… но мы торопиться не будем, поскольку в противном случае MPD будет скомпилирован с опциями по умолчанию, что нам может не подойти. Кроме того, придется применять RT-патч к самому MPD, который предназначен для улучшения качества звука путем управления приоритетами потоков (зря, что ли, RT-ядро компилировали?). Поскольку сам плеер развивается быстрее, чем патч, версия MPD должна быть именно 0.17.1. Скачиваем патч и накладываем его:
Теперь уже можно выбирать опции сборки. Конечно, это дело вкуса, но мы собирали со следующими опциями:
Рассмотрим некоторые опции подробнее:
А теперь, после успешной сборки и установки, давай перейдем к настройке аудиосистемы.
Начальная настройка и тюнинг
Приведем наиболее важные части файла mpd.conf:
По желанию (и если MPD был скомпилирован с соответствующей опцией) можно, например, включить потоковое аудио по HTTP — для последнего надо добавить следующие строчки в конфиг:
Конфигурационный файл mpd.conf
Также необходимо произвести тюнинг системы. Первым делом создаем файл /etc/security/limits.d/mpd со следующим содержанием:
Этот файл практически выключает ограничения приоритетов для демона. Далее необходимо изменить настройку HPET (который является генератором тактовой частоты и на многих довольно старых материнских платах по умолчанию не используется). Для этого правим строку в файле /etc/default/grub — заодно добавим опцию threadirqs, которая имеет отношение к RT-ядру и которая понадобится в дальнейшем:
HPET необходим для более точной (по времени) подачи сигнала на ЦАП. Казалось бы, разница в несколько микро- (а то и нано-) секунд при подаче потока битов настолько незначительна, что на нее не стоит обращать внимания… ан нет. Один бит задержался, два пришли раньше времени — и в высококлассной стереосистеме разница может быть ощутима человеческим ухом. С использованием HPET вероятность подобного сценария уменьшается.
Давай также настроим некоторые параметры ядра через sysctl. Открой в своем любимом редакторе /etc/sysctl.conf и добавь в него следующие строчки:
В дополнение к последнему параметру необходимо изменить подобный же для rtc — но, поскольку он находится в sysfs, придется прописывать его в rc.local:
Поставим пакет rtirq-init. Он содержит скрипт, увеличивающий приоритеты IRQ-потоков, связанных со звуковым оборудованием:
После установки, возможно, потребуется отредактировать файл /etc/default/rtirq, а именно список IRQ-потоков, которые будут иметь повышенный приоритет:
Ну и напоследок — если у тебя PCI’ная звуковая карта, то надо увеличить до максимума таймер времени ожидания (latency timer, задающий время, которое может занимать карта на шине, если к шине обращаются другие карты) для нее и, соответственно, немного увеличить его для других устройств PCI. Но сперва надо узнать PCI ID карты:
В моем случае ID был 01:09.0, следовательно, для увеличения latency timer набираем команды
Эти команды ты тоже можешь прописать в rc.local.
Интерфейс QMPDClient
Sonata — еще один клиент для MPD
RT-патч превращает ядро Linux в полностью преемптивное (то есть с вытесняющей многозадачностью)
Проверка работоспособности
В общем-то, теперь можно запускать демон MPD. Перед запуском убедись, что музыка в соответствующем каталоге присутствует и создан каталог для плей-листов. Если же она разбросана по разным каталогам, то можно указывать на них симлинками. Команда для ручного запуска выглядит так:
А как же проверить работоспособность? Дело в том, что даже самый простой консольный клиент в состав исходников MPD не входит, как и библиотека libmpdclient, поэтому можно либо скомпилировать их самостоятельно, либо установить соответствующий пакет. Поскольку клиент не требует наложения патчей, то особого смысла заморачиваться с компиляцией нет, а значит, ставим пакет:
Перед запуском рекомендуем посмотреть настройки микшера — в Debian 7.1 звук по умолчанию отключен. Обновляем базу данных MPD, добавляем всю музыку в плей-лист и запускаем воспроизведение:
Если все нормально, то должна зазвучать музычка. В случае же потокового воспроизведения тебе надо еще проверить работу этого потока. Указываем адрес и порт, прописанный в конфиге. Для некоторых плееров необходимо также указывать файл mpd.ogg — например 192.168.1.5:8000/mpd.ogg.
Удаляем лишнее
Ну а теперь необходимо подчистить систему. В общем-то, ты можешь это сделать и сам, но есть некоторые тонкости — к примеру, пакеты, установленные с помощью apt-get build-dep, удалить не совсем просто. Итак, сначала мы отмечаем нужные для MPD пакеты, чтобы они не удалились следующей командой, а уже затем удаляем пакеты, относящиеся к сборке:
Затем выполняем следующую трехэтажную команду:
Команда эта выглядит пугающе, но делает вполне безобидную вещь — удаляет все пакеты, которые нужны были для сборки MPD.
Удаляем также MTA — зачем нам почта на аудиостанции?
В общем-то, остальные бесполезные для аудиостанции пакеты ты можешь удалить и сам. Но если ты не уверен, понадобится ли тебе, к примеру, cron или syslog, — лучше их просто отключить из init-скриптов.
Монтирование корневой ФС в режиме RO
Если музыка у тебя будет находиться на ином накопителе, нежели система, имеет смысл при загрузке монтировать корневую ФС в режиме read only. Наиболее простой способ сделать это — прописать соответствующую опцию в /etc/fstab. Однако это потребует размещения всех изменяемых частей на других разделах либо удаления программ, которые эти данные генерируют, что иногда не совсем просто.
Еще один способ заключается в использовании unionfs/aufs/overlayfs — эти файловые системы позволяют объединять в одной точке монтирования и RO, и RW — последняя может размещаться в оперативной памяти. Данная техника используется при создании Live-дистрибутивов. Подробнее о том, как это делать, можно узнать на страничке.
Клиенты для MPD
Есть ли для MPD другие клиенты? Конечно, есть. Более того, наличие множества клиентов — одна из особенностей этого демона. Некоторые из них опишем чуть подробнее.
Отдельно стоит упомянуть клиенты для коммуникаторов. Для Android в Google Play нашлись MPDroid и DroidMPD. Какой из них выбрать — дело вкуса; интерфейс второго показался несколько аляповатым. Для iPhone/iPod пользуется популярностью MPoD, для iPad есть специализированная версия — MPaD.
Интерфейс MPDRoid довольно симпатичен
MPoD: клиент для iPhone
Околоаудиофильские дистрибутивы
Существует множество дистрибутивов для работы со звуком — от минималистичных, для работы исключительно в качестве аудиоцентра без монитора с управлением по сети, до навороченных, имеющих кучу секвенсоров и VST-плагинов. Все их, конечно, описать невозможно, но небольшой обзор отдельных не помешает. И начнем мы с Voyage MPD.
Voyage MPD — встраиваемый дистрибутив на базе Debian 7.1. Последняя на момент написания статьи версия содержит MPD 0.18, ядро 3.8.13 с последними драйверами ALSA, веб-интерфейс на основе Meshlium, заявлена также поддержка DoP (DSD over PCM, упаковка DSD в фреймы PCM). Имеется Voyage MPD Starter Kit, позволяющий собрать аудиостанцию. Стоимость набора 149 долларов, но звуковая карта в комплект не входит.
64 Studio — дистрибутив (опять же на Debian), позиционируется как заточенный под создание медиаконтента. Имеет следующие особенности: low-latency ядро, секвенсоры, такие как Rosegarden, Ardour — мультитрековый звуковой редактор… Однако дистрибутив не обновлялся с 2008 года.
Ubuntu Studio — как говорится, без комментариев. По сути, тот же Ubuntu с XFCE, заточенный под создание мультимедийного контента. Ничем особенным не выделяется — разве только low-latency ядром да возможностью поставить на обычный Ubuntu метапакет и превратить в данный дистрибутив.
AV Linux, несмотря на название, не антивирус под Linux, а еще один дистрибутив для работы с аудио и видео. Из особенностей можно назвать то, что он включает в себя не только свободное ПО, но и демоверсии проприетарных продуктов, таких как LinuxDSP и Mixbus.
Итоги
Linux вполне может использоваться как в качестве ПО для аудиоцентров, так и в качестве ПО для профессиональной работы со звуком. И если первый аспект еще более-менее обозрим (хотя и тут есть свои тонкости, как можно было увидеть из вышесказанного), то профессиональная работа со звуком настолько разнообразна, что и в рамках книги ее не охватишь. Статья, однако, такую цель не преследовала — мы хотели всего лишь показать, что на основе древнего компа можно собрать систему, качество звучания которой не будет уступать оборудованию стоимостью в тысячи долларов.
Оптимальные настройки BIOS
Приведем некоторые настройки BIOS, которые рекомендуется подправить для улучшения производительности:
Впервые опубликовано в журнале «Хакер» от 08/2013.