Вдохновленные майками один раз И два , решил построить нечто подобное.
В наличии: — Один усилитель с динамиками — Один настольный компьютер — Один ноутбук — Желание слушать интернет-радио независимо от двух предыдущих пунктов и тыкания в провода В результате родился план собрать «аудиокарту по Ethernet».
Изучив вопрос совместимости оборудования, я остановил свой выбор на роутере TP-link MR3020 и USB-аудиокарте Creative SB Play.
Что из этого получилось:
О том, как это получить, смотрите в кат.
Начну сразу с цены.
Роутер можно найти за 700 рублей, звуковую карту за 800 рублей, USB-хаб за 200 рублей.
Итого 1700 рублей или 55$.
И почему никто до сих пор не запустил это в производство? Все недостатки прошивки OpenWRT (USB и пакетная сборка) затронули только предыдущую версию 10.03. Последняя стабильная версия 12.09 почти идеальна.
Перемещение раздела /overlay на USB-накопитель
На роутере около 800кб свободного места.Чтобы нас это не беспокоило, подключим к роутеру флешку.
Сначала форматируем раздел на флешке в ext4. Инструкции уже есть Есть , суммируя:
обновление опкг opkg install блок-монтирование блок-горячее подключение блок-извлечение kmod-usb-core kmod-usb2 kmod-usb-ohci kmod-usb-storage kmod-fs-ext4 mkdir /mnt/sda1 монтировать /dev/sda1 /mnt/sda1 tar -C /overlay -cvf - .В /etc/config/fstab пишем| tar -C /mnt/sda1 -xf —
конфигурация монтирования параметр цель/оверлей дополнительное устройство /dev/sda1 опция fstype ext4 опции опции rw,синхронизация опция включена 1 опция Enabled_fsck 0Перезагрузите роутер и проверьте:
крепление | Греп СДА /dev/sda1 на типе /overlay ext4 (rw,sync,relatime,user_xattr,barrier=1,data=ordered)
Подключение USB-аудиокарты
Установка необходимых модулейopkg установить kmod-usb-audio kmod-sound-coreПодключаем флешку звуковой карты к USB хабу и проверяем:
dmesg | grep -я аудио [41.080000] usbcore: зарегистрирован новый драйвер интерфейса snd-usb-audio
Настройка пульсаудио
opkg установить пульсаудио-демонОтредактируйте /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=4712rate=44100 format=s16lechannels=2 # для воспроизведения звука из окон load-module modul-rtp-recv # для воспроизведения звука с устройств Linux через Wi-Fi load-module Module-native-protocol-tcp auth-anonymous=1 # для воспроизведения звука с устройств Linux через EthernetPulsaudio запускается как пользовательский импульс, поэтому мы редактируем скрипт инициализации, чтобы предоставить права на запись для аудиоустройств /etc/init.d/pulseaudio:
Добавьте 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 }
/etc/init.d/pulseaudio включить /etc/init.d/pulseaudio началоДобавьте свежеиспеченный аудиосервер к источнику звука:
pacmd модуль загрузки модуля-туннеля-приемника server=%serverIP% pacmd set-default-sink 1 # номер может меняться в зависимости от выходного списка pacmd list-sinkПопробуем воспроизвести звук.
Обучение MPD работе с PulseAudio
Внимание, хардкор! Составить MPD может быть проще, но я пошел другим путем.Загрузите исходники OpenWRT:
СВНКО svn://svn.openwrt.org/openwrt/tags/attitude_adjustment_12.09/Собираем SDK (не забываем указать ваш роутер и платформу в make менюconfig):
компакт-диск Relationship_adjustment_12.09 сделать инструменты/установить сделать набор инструментов/установитьПолучаем фиды с приложениями и «устанавливаем» их в свою песочницу:
.Пакет Pulseaudio dev не устанавливает все библиотеки, поэтому редактируем package/feeds/packages/pulseaudio/Makefile:/scripts/обновление каналов .
/scripts/feeds установить пульсаудио .
/scripts/feeds установить mpd
--- 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. Последний этап:
сделать пакет/mpd/компилировать сделать пакет/mpd/установитьЕсли все прошло без ошибок, то мы должны получить готовую посылку.
bin/ar71xx/packages/mpd-full_0.16.5-2_ar71xx.ipk .
Если компилятор на что-то жалуется, то запустите сделать пакет/mpd/компилировать V=99 и посмотреть, что именно пошло не так.
Скопируйте пакет в маршрутизатор scp bin/ar71xx/packages/mpd-full_0.16.5-2_ar71xx.ipk tplink_ip:/tmp и установите пакет mpd:
обновление опкг opkg установить завиток rm /tmp/opkg-lists/attitude_adjustment opkg install /tmp/mpd-full_0.16.5-2_ar71xx.ipkНастройте MPD /etc/mpd.conf:
вход { плагин "завиток" } аудио выход { набери "импульс" имя «Мое устройство» }Включаем его в автозагрузку и запускаем:
/etc/init.d/mpd включить /etc/init.d/mpd началоДавайте проверим это на Linux:
МПЦ добавить pub4.di.fm :80/di_latinhouse MPC игратьИли в Windows, установив QMPDClient (ИМХО лучший мультиплатформенный клиент mpd).
проблема с AAC
Стандартная библиотека libfaad2 играет aac при 100% загрузке процессора, т.к.на роутерах процессоры плохо справляются с вычислениями с плавающей запятой.
Для таких случаев разработчики библиотеки предусмотрели опцию FIXED_POINT, но разработчики OpenWRT не успели ею воспользоваться до релиза.
Relationship_adjustment_12.09 .
В последней версии Makefile для faad2 добавлена возможность компиляции с FIXED_POINT. Просто загрузите последнюю версию Makefile:
wget dev.openwrt.org/export/34527/packages/libs/faad2/MakefileВыберите в сделать конфигурацию меню Дополнительные параметры конфигурации -> Целевые параметры -> Использовать программную плавающую запятую по умолчанию и перекомпилировать пакет:
сделать пакет/faad2/компилировать сделать пакет /faad2installПолучаем пакет bin/ar71xx/packages/libfaad2_2.7-2_ar71xx.ipk, устанавливаем его так же, как и mpd (только в данном случае командой opkg update).
Наслаждаемся теплым ламповым звучанием AAC.
Подключение Windows в качестве источника звука
Я нашел единственное работоспособное решение для трансляции звука в PulseAudio из Windows. Здесь .Но, к сожалению, для этого вам нужно будет купить программное обеспечение.
Виртуальный аудиокабель .
Это запускается по моему имени летучей мыши:
linco.exe -B 16 -C 2 -R 44100 | nc.exe tplink_IP 4712Да, есть задержки звука, особенно по Wi-Fi, но при просмотре видео это легко исправляется настройками плеера.
Вместо bat-файлов можно попробовать запустить linco через srvany. У кого получится, просьба отписаться в комментариях.
Моддинг
Те, кто хорошо владеет паяльником и руками (если вы это читаете, значит, вы наверняка хорошо владеете руками?), смогут собрать все в один корпус.Решил разобрать китайский USB хаб, отпаять от него лишние USB разъемы и металлические корпуса оставшихся двух USB разъемов.
Таким образом получилось повернуть сами разъемы на 90 градусов.
На самом роутере я отпаял от платы контакты USB-разъёма, провёл провода от самой платы к USB-хабу, а от самого USB-хаба провёл провода к внешнему USB-разъёму.
В корпусе фрезера я просверлил два отверстия для гнезд и мне удалось все уместить достаточно компактно.
К сожалению, плотно закрыть крышку роутера уже невозможно, но для этих нужд умные люди придумали синюю изоленту.
На что это похоже:
Рабочее место в 2 часа ночи:
Незаменимая вещь в хозяйстве.
Планируем сделать еще один такой для кухни, а также подключить OLED-дисплей через I2C и ИК-приемник через UART. P.S. Комментарии и сообщения об ошибках принимаю в личку.
П.
П.
С.
Для тех, кто не хочет компилировать, вот скомпилированные пакеты mpd и libfaad2. rghost.ru/46934574 rghost.ru/46934558 УПД: 06.10.2013 — rghost.net/49184760 Pulsaudio 4.0 для OpenWRT Теги: #pulseaudio #OpenWRT #linux #mpd #tp-link #MR3020 #TL-MR3020 #open source
-
Макрадар
19 Oct, 24 -
Как Убить Технаря В Тимлиде
19 Oct, 24 -
Есть Ли Польза От Кастомных Ядер?
19 Oct, 24 -
Chrome Даже Кэширует Http-Запросы Delete
19 Oct, 24 -
Про Toshiba (Продолжение)
19 Oct, 24 -
Xbox 360 Взломан
19 Oct, 24 -
Быстрая Загрузка
19 Oct, 24