html текст
All interests
  • All interests
  • Design
  • Food
  • Gadgets
  • Humor
  • News
  • Photo
  • Travel
  • Video
Click to see the next recommended page
Like it
Don't like
Add to Favorites

Создаём сетевую звуковую карту с преферансом и поэтессами

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

В наличии:
— Один усилитель с колонками
— Один стационарный компьютер
— Один ноутбук
— Желание слушать интернет радио независимо от двух предыдущих пунктов и перетыканию проводов

В результате родился план собрать «audio card over ethernet». Исследовав вопрос совместимости оборудования, выбор пал на роутер TP-link MR3020 и USB аудио-карточку Creative SB Play.

Что из этого получилось:



О том, как это получить, добро пожаловать под кат.

Начну сразу с цены. Роутер можно найти за 700 рублей, звуковую карту за 800 рублей, USB hub за 200 рублей. В сумме 1700 рублей или $55. И почему еще никто это на поток не поставил?

Все недостатки прошивки OpenWRT (USB и сборка пакетов) касались лишь предыдущей версии 10.03. Последняя стабильная 12.09 практически идеальна.

Переносим раздел /overlay на USB flash

Свободного места на роутере около 800 kb. Чтобы это нас не стесняло, подключим к роутеру USB flash. Раздел на flash карте предварительно форматируем в ext4. Инструкция уже есть, вкратце:
opkg update
opkg install block-mount block-hotplug block-extroot kmod-usb-core kmod-usb2 kmod-usb-ohci kmod-usb-storage kmod-fs-ext4
mkdir /mnt/sda1
mount /dev/sda1 /mnt/sda1
tar -C /overlay -cvf — . | tar -C /mnt/sda1 -xf —


В /etc/config/fstab прописываем
config mount
option target /overlay
option device /dev/sda1
option fstype ext4
option options rw,sync
option enabled 1
option enabled_fsck 0

Перезагружаем роутер и проверяем:
mount | grep sda
/dev/sda1 on /overlay type ext4 (rw,sync,relatime,user_xattr,barrier=1,data=ordered)


Подключаем USB аудиокарточку

Устанавливаем необходимые модули
opkg install kmod-usb-audio kmod-sound-core


К USB hub'у подключаем звуковую карту флэшку, проверяем:
dmesg | grep -i audio
[ 41.080000] usbcore: registered new interface driver snd-usb-audio


Настраиваем pulseaudio

opkg install pulseaudio-daemon

Правим /etc/pulse/system.pa:
load-module module-native-protocol-unix auth-anonymous=1 # для ПО, запускаемого с самого роутера
load-module module-alsa-sink device=hw:0,0 tsched=0 # tsched=0 — грязный хак для устранения тресков и хрипов
load-module module-simple-protocol-tcp port=4712 rate=44100 format=s16le channels=2 # для проигрывания звука с windows
load-module module-rtp-recv # для проигрывания звука с linux устройств по wifi
load-module module-native-protocol-tcp auth-anonymous=1 # для воспроизведения звука с linux устройств по ethernet


Pulseaudio запускается от пользователя pulse, поэтому правим init скрипт для предоставления прав на запись для audio устройств /etc/init.d/pulseaudio:
--- pulseaudio_old 2013-06-19 12:30:18.425539419 +0400
+++ pulseaudio 2013-06-19 12:30:04.077704388 +0400
@@ -19,6 +19,9 @@
                 chmod 0750 /var/lib/pulse
                 chown pulse:pulse /var/lib/pulse
         }
+        [ -d /dev/snd ] && {
+                chown -R pulse:pulse /dev/snd
+        }
         service_start /usr/bin/pulseaudio --daemonize --system --disallow-exit --disallow-module-loading --disable-shm --exit-idle-time=-1
 }


Добавляем pulseaudio в автозагрузку и запускаем:
/etc/init.d/pulseaudio enable
/etc/init.d/pulseaudio start

Добавляем на источнике звука свежеиспеченный audio сервер:
pacmd load-module module-tunnel-sink server=%serverIP%
pacmd set-default-sink 1 # номер может отличаться в зависимости от вывода pacmd list-sink

Пробуем воспроизвести звук.
Учим MPD работать с pulseaudio

Внимание, хардкор! Cкомпилировать MPD можно проще, но я пошел другим путем. Скачиваем исходники OpenWRT:
svn co svn://svn.openwrt.org/openwrt/tags/attitude_adjustment_12.09/

Собираем SDK (в make menuconfig не забываем указать свой роутер и платформу):
cd attitude_adjustment_12.09
make tools/install
make toolchain/install

Получаем feed'ы с приложениями и «устанавливаем» их в свою песочницу:
./scripts/feeds update
./scripts/feeds install pulseaudio
./scripts/feeds install mpd

Dev пакет pulseaudio устанавливает не все библиотеки, поэтому правим package/feeds/packages/pulseaudio/Makefile:
--- Makefile_old        2013-06-19 12:12:00.458287669 +0400
+++ Makefile  2013-06-19 12:07:43.225298052 +0400
@@ -139,7 +139,8 @@
        $(INSTALL_DIR) \
                $(1)/usr/lib/pkgconfig \
                $(1)/usr/include/pulse \
-               $(1)/usr/lib
+               $(1)/usr/lib \
+               $(1)/usr/lib/pulseaudio
        $(CP) \
                $(PKG_INSTALL_DIR)/usr/include/pulse/* \
                $(1)/usr/include/pulse
@@ -149,6 +150,9 @@
        $(CP) \
                $(PKG_INSTALL_DIR)/usr/lib/*.so* \
                $(1)/usr/lib/
+       $(CP) \
+               $(PKG_INSTALL_DIR)/usr/lib/pulseaudio/*.so* \
+               $(1)/usr/lib/pulseaudio/
 endef
 
 define Package/pulseaudio-daemon/install

Правим Makefile для mpd (package/feeds/packages/mpd/Makefile):
--- Makefile_old        2013-06-18 17:47:56.277865458 +0400
+++ Makefile   2013-06-18 17:37:35.037187159 +0400
@@ -49,7 +49,7 @@
   DEPENDS+= \
        +AUDIO_SUPPORT:alsa-lib \
        +libaudiofile +BUILD_PATENTED:libfaad2 +libffmpeg +libid3tag \
-       +libmms +libogg +libshout +libsndfile +libvorbis
+       +libmms +libogg +libshout +libsndfile +libvorbis +pulseaudio-daemon
   PROVIDES:=mpd
   VARIANT:=full
 endef
@@ -137,7 +137,7 @@
        $(if $(CONFIG_BUILD_PATENTED),MAD_LIBS="$(TARGET_LDFLAGS) -lmad") \
 
 TARGET_CFLAGS += -std=gnu99
-TARGET_LDFLAGS += -Wl,-rpath-link=$(STAGING_DIR)/usr/lib
+TARGET_LDFLAGS += -Wl,-rpath-link=$(STAGING_DIR)/usr/lib,-rpath-link=$(STAGING_DIR)/usr/lib/pulseaudio
 
 # use gcc instead of g++ to avoid unnecessary linking against libstdc++
 TARGET_CXX:=$(TARGET_CC)
@@ -160,6 +160,7 @@
        --enable-sndfile \
        --enable-vorbis \
        --enable-vorbis-encoder \
+       --enable-pulse \
        --with-faad="$(STAGING_DIR)/usr" \
        --with-tremor=no \


Запускаем make menuconfig, выбираем Sound/pulseaudio-daemon, Libraries/libffmpeg-mini, а затем Sound/mpd-full

Финальный этап:
make package/mpd/compile
make package/mpd/install


Если всё прошло без ошибок, то мы должны получить готовый пакет bin/ar71xx/packages/mpd-full_0.16.5-2_ar71xx.ipk. Если компилятор на что-то ругается, то запускаем make package/mpd/compile V=99 и смотрим что именно пошло не так.

Копируем пакет на роутер scp bin/ar71xx/packages/mpd-full_0.16.5-2_ar71xx.ipk tplink_ip:/tmp и устанавливаем пакет mpd:
opkg update
opkg install curl
rm /tmp/opkg-lists/attitude_adjustment
opkg install /tmp/mpd-full_0.16.5-2_ar71xx.ipk

Конфирурируем MPD /etc/mpd.conf:
input {
plugin «curl»
}
audio_output {
type «pulse»
name «My Device»
}

Включаем в автозагрузку и запускаем:
/etc/init.d/mpd enable
/etc/init.d/mpd start

Проверяем у себя на linux:
mpc add pub4.di.fm:80/di_latinhouse
mpc play


Или в Windows, установив QMPDClient (имхо лучший мультиплатформенный mpd клиент).

Проблема AAC

Стандартная библиотека libfaad2 проигрывает aac со 100% нагрузкой на процессор, т.к. на роутерах процессоры плохо справляются с вычислением с плавающей точкой. Для таких случаев разработчики библиотеки предусмотрели опцию FIXED_POINT, но разработчики OpenWRT не успели ею воспользоваться перед релизом attitude_adjustment_12.09. В последней версии Makefile для faad2 добавили возможность компиляции с FIXED_POINT. Просто скачиваем последний Makefile:
wget dev.openwrt.org/export/34527/packages/libs/faad2/Makefile

Выбираем в make menuconfig Advanced configuration options -> Target options -> Use software floating point by default и перекомпилируем пакет:
make package/faad2/compile
make package/faad2install

Получаем пакет bin/ar71xx/packages/libfaad2_2.7-2_ar71xx.ipk, устанавливаем его таким же образом, что и mpd (только в данном случае командой opkg upgrade).
Наслаждаемся теплым ламповым звучанием aac.
Подключаем в качестве источника звука Windows

Единственное работоспособное решение транслировать звук на pulseaudio из Windows я нашел здесь. Но к сожалению для этого потребуется купить ПО Virtual Audio Cable.
Запускается это у меня bat'ником:
linco.exe -B 16 -C 2 -R 44100 | nc.exe tplink_IP 4712

Да, есть задержки звука, особенно по WiFi, но при просмотре видео это легко лечится настройками плеера.

Вместо bat файлов можно попробовать запускать linco через srvany. У кого получится — просьба отписаться в комментариях.

Моддинг

Те, кто дружит с паяльником и руками (если уж читаете это, то с руками то наверняка дружите?), могут поместить всё в один корпус. Я решил разобрать китайский USB-hub, отпаять от него лишние USB разъемы, и металлические корпуса оставшихся двух USB разъемов. Таким образом получилось развернуть сами разъемы на 90 градусов.

На самом роутере я отпаял контакты USB разъема от платы, от самой платы протянул провода к USB хабу, а уже от самого USB хаба провел провода на внешний USB разъем. В корпусе роутера я просверлил два отверстия под Jack'и и мне удалось уместить всё достаточно компактно. К сожалению крышку роутера плотно закрыть уже не удается, но для этих нужд умные люди придумали синюю изоленту.

Как это выглядит:



Рабочее место в 2 часа ночи:



Штука в хозяйстве незаменимая. В планах сделать еще одну такую на кухню, а также подключить OLED дисплей через I2C, и IR-receiver через UART.

P.S. Замечания и сообщения об ошибках принимаю в личке.

P.P.S. Кто не хочет компилировать, вот собранные пакеты mpd и libfaad2
rghost.ru/46934574
rghost.ru/46934558
Читать дальше
Twitter
Одноклассники
Мой Мир

материал с habrahabr.ru

2

      Add

      You can create thematic collections and keep, for instance, all recipes in one place so you will never lose them.

      No images found
      Previous Next 0 / 0
      500
      • Advertisement
      • Animals
      • Architecture
      • Art
      • Auto
      • Aviation
      • Books
      • Cartoons
      • Celebrities
      • Children
      • Culture
      • Design
      • Economics
      • Education
      • Entertainment
      • Fashion
      • Fitness
      • Food
      • Gadgets
      • Games
      • Health
      • History
      • Hobby
      • Humor
      • Interior
      • Moto
      • Movies
      • Music
      • Nature
      • News
      • Photo
      • Pictures
      • Politics
      • Psychology
      • Science
      • Society
      • Sport
      • Technology
      • Travel
      • Video
      • Weapons
      • Web
      • Work
        Submit
        Valid formats are JPG, PNG, GIF.
        Not more than 5 Мb, please.
        30
        surfingbird.ru/site/
        RSS format guidelines
        500
        • Advertisement
        • Animals
        • Architecture
        • Art
        • Auto
        • Aviation
        • Books
        • Cartoons
        • Celebrities
        • Children
        • Culture
        • Design
        • Economics
        • Education
        • Entertainment
        • Fashion
        • Fitness
        • Food
        • Gadgets
        • Games
        • Health
        • History
        • Hobby
        • Humor
        • Interior
        • Moto
        • Movies
        • Music
        • Nature
        • News
        • Photo
        • Pictures
        • Politics
        • Psychology
        • Science
        • Society
        • Sport
        • Technology
        • Travel
        • Video
        • Weapons
        • Web
        • Work

          Submit

          Thank you! Wait for moderation.

          Тебе это не нравится?

          You can block the domain, tag, user or channel, and we'll stop recommend it to you. You can always unblock them in your settings.

          • habrahabr.ru
          • домен habrahabr.ru

          Get a link

          Спасибо, твоя жалоба принята.

          Log on to Surfingbird

          Recover
          Sign up

          or

          Welcome to Surfingbird.com!

          You'll find thousands of interesting pages, photos, and videos inside.
          Join!

          • Personal
            recommendations

          • Stash
            interesting and useful stuff

          • Anywhere,
            anytime

          Do we already know you? Login or restore the password.

          Close

          Add to collection

             

            Facebook

            Ваш профиль на рассмотрении, обновите страницу через несколько секунд

            Facebook

            К сожалению, вы не попадаете под условия акции