Очередной mp3-box из mpd и raspberry

в 7:06, , рубрики: linux, mp3, Raspberry Pi, Гаджеты. Устройства для гиков, метки: ,

Захотелось мне собрать сетевой аудиоплеер. Не «медиа», а исключительно под музыку. Раньше этим занимался домашний сервер (foobar2000 + всякие удаленные управления для него), но наконец-то созрел вынести его поближе к точке входа сетевых проводов в квартиру, потому возникла вакансия. А десктоп или ноут для этого использовать накладно в плане потребления ресурсов. Я не требователен, музыка у меня играет просто для создания приятного фона, а не для эстетического наслаждения, потому каких-то высоких требований к аудиотракту у меня не было, лишь бы не шипел сильно.

image

ТЗ изначально выглядело так:
1) ethernet, в крайнем случае — wifi
2) поддержка самбы и всяких интернет-радио
3) поддержка любых форматов (минимально — mp3 и flac, можно ape)
4) аудио-разъем 3,5мм
5) удаленное управление с компьютера (составление плейлистов и т.п.), плюс желателен ПДУ (вполне хватит управления громкостью и переключения треков), вместо ПДУ устроит клиент для андроида
6) готовое устройство, а не конструктор

Порывшись в гуглах и форумах, выяснилось, что если не конструктор, то что-то типа Denon DNP-F109 или Philips Streamium и т.п.
image

Красиво, конечно, но для меня это был перебор по соотношению цена/возможности. Да и в продаже что-то их не наблюдалось.
Пришлось вычеркивать шестой пункт.
Логичным программным выбором стал MPD — плеер-демон без интерфейса, но с развитыми возможностями удаленного управления — есть клиенты под все ОС, можно и ПДУ подключить через Lirc.

Осталось решить, как это будет выглядеть аппаратно. Сперва остановился было на Raspberry Pi, но не найдя её в ближайшем продуктовом, заказал её у китайцев, а пока решил попробовать вариант «роутер+openwrt+USB-звук». В процессе обсуждения вариантов со знакомыми всплыл TP-Link «TL-MR3020» — достаточно дешевый, чтобы купить его просто ради эксперимента. На хабре даже нашлась статья о том, как прикручивать звук.

Поставил openwrt, подключил звуковушку, настроил самбу, завел mpd… Но результаты не порадовали. Формально все работало, но, по ощущениям, мощности роутера еле хватало на то, чтобы все это тянуть, звук слегка похрипывал, при загрузке любила отваливаться флэшка с корневой файловой системой (внутренней памяти на звук+самбу+mpd не хватает), да и выглядело это всё непрезентабельно.
image

Пришлось таки идти за малиной. Китайцы в срок не прислали, извинялись, говорили, что их почта посылку завернула, предлагали переслать через Сингапур.Но я решил не ждать еще месяц, а купил в Москве, пусть и на 30 баксов дороже, чем в Китае.

На установке линукса останавливаться не буду, просто скачал да записал на флэшку образ raspbian. Линукс как линукс, стандартный дебиан, никаких хитростей, карточки на 8 гигов и производительности машинки вполне хватает на то, чтобы себя особо не ограничивать. Тем более, что графика мне не нужна. Понадобилось разве что автозагрузку модуля звуковушки прописать (snd_bcm2835).

А вот на mpd и допиливании звука остановлюсь чуть подробнее.
Ставится все как обычно, apt-get install mpd, как сервис он сразу умеет запускаться, конфиг живет в /etc.

/etc/mpd.conf

#Путь к папке с музыкой
music_directory "/mnt/mp3/music"
 
# путь к хранилищу плейлистов
playlist_directory "/mnt/mp3/playlists"
 
#привязка к определенному IP-адресу (можно поставить "any", но я люблю указывать конкретные настройки.
bind_to_address "192.168.0.50"
 
#порт
port "6600"
 
#следить за изменениями в каталоге с музыкой
auto_update "yes"

audio_output {
type "alsa"
name "AudioCardName"
device "hw:0,0"
#регулировка громкости средствами mpd. Если не указывать, то громкость регулируется через alsamixer, по экспоненте - до 50% практически молчит, а потом довольно резко растет. А так ближе к линейному распределение.
mixer_type "software"
}

Пароль на подключение я не указывал, в домашней сети все свои. Максимум чем навредят — это громкость повыше сделают. :)

Сервер готов. Теперь надо выбирать клиентов.

Android
Тут вариантов практически не было.
MPDroid или его форк Mupeace. Все остальное хуже. Чем серьезно отличаются эти два, пока не понял, но на Mupeace набрел раньше, потому пользуюсь им. Есть телефонный и планшетный интерфейсы, нормальная поддержка русского (если теги в юникоде), медиа-библиотека и файловая структура (не везде у меня теги нормально прописаны). Умеет ставить музыку на паузу, если кто-то звонит. Не хватает разве что управления воспроизведением в зоне уведомлений, но частично компенсируется виджетом.
image

Windows
Тут идеального варианта нет, но в итоге остановился на QMPDClient. Не слишком красив, но вполне работоспособен.
image

Хотя GMPC тоже неплох и вообще кажется более законченным. Хотя я все же останусь с QMPDClient.
image

Windows Phone
Тут хуже. Вариантов всего два и у обоих свои недостатки.

sevenMPC. Бесплатная, умеет отображать список воспроизведения, регулировать громкость и переключать треки. И всё, пожалуй. Даже не отображает, что сейчас воспроизводится. Ну еще можно посмотреть на файловую структуру коллекции, только делать с ней ничего нельзя, даже в плейлист добавлять.
image

MPDi. Платная, стоит целый доллар. С плейлистом чуть получше, есть несколько профилей подключения к серверам. Но нет кнопок переключения треков, а с коллекцией работает так же, как и sevenMPC — только отображает. Хотя еще поиск имеется, но как работает — не проверил, я не покупал, а демо-версию пробовал.
image

Про клиенты другие ОС ничего не скажу. С линуксом линуксоиды и так знают, что там у них есть :), девайсов от Apple у меня нет, до Windows Mobile руки не дошли, хотя надо бы — может быть старенький HTC пропишется как постоянный пульт управления для плеера. Веб-интерфейсы же меня не интересуют — самостоятельные клиенты удобнее.

Подводные камни

Камень первый:
Поставил клиента, запустил музыку — заработало. Но при постановке воспроизведения на паузу происходил громкий щелчок. Как выяснилось, я не первый, кто с этим сталкивается. В основном рекомендуют купить нормальную USB-звуковушку. Но это не единственное решение.
Помогло обновление дистрибутива (apt-get dist-upgrade), обновление прошивки (rpi-update) и добавление в /etc/asound.conf строчек

pcm.!default {
        type hw
        card 0
}
ctl.!default {
        type hw
        card 0
}

После перезагрузки щелчки прошли. Осталось только легкое жужжание в конце треков, но когда музыка играет фоном, то я на него внимания не обращаю.

Камень второй:
Теги. Хотя я вроде как давно пользуюсь id3v2, но для совместимости оставлял id3v1 в 1251. А для mpd, как выяснилось, v1 в приоритете. Так что пришлось вырезать v1. Ну и для порядку еще полностью перейти на v2.4. На помощь пришел foobar2000.

Preferences -> Display -> Advanced -> Tagging -> MP3, Поставил запись тегов в формате id3v2.4
image

Выделил все mp3 в коллекции и нажал Tagging -> MP3 tag types
image

Убрал галочки с ape и id3v1 и принудительно повелел писать id3v2.4
image

Сервер пожужжал пару часиков жестким диском, после этого я запустил рескан коллекции в mpd и теги пришли в норму.

Итог и перспективы
Получил практически то, что хотел в ТЗ, недорого и относительно без напильника. Сервер может спокойно переезжать.
Старый домашний сервер справа (уже ушел на покой), нынешний — слева.
image

Сколько ватт потребляет конструкция, сейчас не скажу — питание идет от USB-порта wifi-роутера, на общей нагрузке розетки (десктоп, два монитора, принтер, сканер, роутер) практически не сказалось, в пределах погрешности измерений всё. Как брало 200 ватт с копейками, так и берёт.

На перспективу хочется
1) Сделать вещание музыки в инет по http (сейчас у меня просто открыта на доступ папка — это не всегда удобно, особенно с чужой машины).
2) Когда роутер уедет, запитать Raspberry от блока усилителя (правда не знаю, есть ли там 5В, надо будет посмотреть).
3) Заменить ethernet на wifi. Тут особых проблем не должно быть, есть компактные USB-wifi адаптеры.
4) Придумать что-то на счет использования обычного ПДУ. У меня их вообще два — старенький скорпионовский, что втыкается в PS/2, им я рулю десктопом. И майкрософтовский, от Windows Media Center. Проще, конечно, подключить второй, но в идеале буду думать на счет использования первого, чтобы пульты не плодить.

Автор: aik

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js