8 ноября 2013 в 11:06

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

Захотелось мне собрать сетевой аудиоплеер. Не «медиа», а исключительно под музыку. Раньше этим занимался домашний сервер (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
карма
76,0
рейтинг 0,1
Самое читаемое Администрирование

Комментарии (17)

  • 0
    Собрал что то подобное, сервер mpd — ubuntu 12.04, и 3 клиента(3 зоны звучания), на всех клиентах наблюдается странное периодическое раз в минуту- две, пропадание звука (двухкратное), очень неприятно, но не знаю даже примерно в какую сторону копать в поисках решения.
  • 0
    Кстати, является интересно тема использования вместо RPI андроид смартфона, возможно ли это?
    • +1
      Можно — есть порт mpd под андроид. Но решение получается более «колхозное», чем с raspberry. Ибо на ней обычный линукс, а с андроидом придется хорошо пошаманить, чтобы его научить расшареные папки монтировать, к примеру. Ethernet'а нет. С ПДУ вопрос неясный…

      • 0
        1) зачем на смарте монтировать шары? Стрим идет с единого сервера вся музыка на нем, ничего не нужно монтировать.
        2) Интернет заменяется wi-fi стандарта N, его скорости вполне хватает для аудио потока.
        3) вместо пду использую планшеты и смарты на которых установлен MPDroid с плагином.
        • 0
          1) Про вы ничего не говорили.
          2) У меня ethernet был в большем приоритете, чем вайфай
          3) А как вы будете управлять одним смартфоном с другого?
  • 0
    Будет ли рассинхрон если запустить один трек на разных устройствах?
    • 0
      да будет, (источник практика) где то читал что можно делать синхронизацию но судя по отзывам работает коряво и с лагами.
  • 0
    Открою большой секрет: R-Pi model B ест 5В, 500-750 мА. Если не подключены клавиатура/мышь — в пределах 500-600 мА.
    • 0
      Ну это в теории. А на практике было бы интересно глянуть. Хотя лучше потом, когда буду разбираться с питанием от усилителя.
  • НЛО прилетело и опубликовало эту надпись здесь
    • 0
      Интересно, неплохо сделаны интернет-трансляции.
      Но, к сожалению, нету отображения файловой системы — а теги у меня пока далеко не ко всему прописаны.
      • НЛО прилетело и опубликовало эту надпись здесь
        • +2
          Не в настройках, как выяснилось. Надо щелкнуть правой кнопкой на левой панели и там включить отображение. Неочевидно.
          Но теперь, на первый взгляд, есть всё, что нужно. Попробую попользоваться.
  • 0
    Спасибо за подсказку с переводом тегов. А убрать v1 чем можно?
    Я так понимаю — в mpd нет функции «заливки» своих (локальных) mp3 кроме как подсовывая на файловый ресурс?
    А есть вариант клиента на «батничках» — хотя бы старт/стоп?
    • 0
      А убрать v1 чем можно?

      Ну так в посте инструкция, как при помощи foobar2000 это сделать. Даже с картинками. От слов «камень второй».

      Я так понимаю — в mpd нет функции «заливки» своих (локальных) mp3

      В смысле хотите, чтобы mpd на сервере играл файлы с вашего локального диска? Какое-то бессмысленное желание, на мой взгляд. А просто закинуть файлы на сервер можно хоть по ftp.

      А есть вариант клиента на «батничках» — хотя бы старт/стоп?

      Есть консольный клиент mpc. Команды выглядят примерно так:

      aik@mp3:~$ /usr/bin/mpc -h 192.168.0.50 -p 6000 pause
      Chris Rea - Curse Of The Traveller
      [paused]  #91/283   2:53/6:25 (44%)
      volume: 51%   repeat: off   random: off   single: off   consume: off
      
      aik@mp3:~$ /usr/bin/mpc -h 192.168.0.50 -p 6000 play
      Chris Rea - Curse Of The Traveller
      [playing] #91/283   2:53/6:25 (44%)
      volume: 51%   repeat: off   random: off   single: off   consume: off
      

      Поставил на паузу, затем снова запустил воспроизведение.
      • 0
        Эмм, а для платформы windows есть утилитка командной строки? Или может скрипт на каком-либо скриптовом языке?
        • 0
          Не знаю, не искал. Возможно, тот же mpc пересобрал кто-нибудь
          Можно попробовать утилиту plink из комплекта putty — она умеет запускать команды на ssh-сервере. И запускать с её помощью тот же mpc.

Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.