Если Вы впервые на нашем Форуме:
- Обратите внимание на список полезных тем в первом сообщении.
- Термины и наиболее популярные модели в сообщениях подсвечиваются быстрыми подсказками и ссылками на соответствующие статьи в МагВикипедии и Каталоге.
- Для изучения Форума не обязательно регистрироваться - практически весь профильный контент, включая файлы, картинки и видео, открыты для гостей.
С наилучшими пожеланиями,
Администрация Форума автозвука Магнитола
Репутация: 2315149 Фубар гонит поток напрямую на девайс, в обход служб операционки.
Натапал толком, простите за очепятки
В итоге, сегодня удалось включить S/PDIF на подключенном к Allwinner A10 ARM Cortex-A8 планшету ASUS Xonar U3, заново скомпилировав snd-usb-audio.ko и snd-usbmidi-lib.ko из исходников ядра наиболее близкой ветки 3.0.8+
, добавив необходимый патч в sound/usb/mixer_quirks.c
, а заодно и патчи для сборки этой версии ядра в среде gcc-4.8 (по умолчанию в вышедшей Ubuntu x64 13.10).Код:case USB_ID(0x0b05, 0x1739): case USB_ID(0x0b05, 0x1743): + case USB_ID(0x0b05, 0x17a0): /* ASUS Xonar U3 */ err = snd_xonar_u1_controls_create(mixer); break;
За основу взят выкладывавшийся пакет кастомизации от Onda. Для включения цифрового SPDIF порта на Asus Xonar U3, как и в случае с Audigy NX 2, пока приходится использовать команды из приложения AlsaMixer:
14. Проверить звук на аналоговом выходе звуковой карты с помощью наушников или внешних динамиков.
15. Установить приложение AlsaMixer
https://play.google.com/store/apps/d...alex.alsamixer
16. Из консоли от рута определить наличие в настройках и numid для 'Digital Playback Switch', указав явно номер звуковой карты (у меня карта получила номер #2) в команде
alsa_amixer -c 2 controls
numid=1,iface=MIXER,name='PCM Playback Switch'
numid=2,iface=MIXER,name='PCM Playback Volume'
numid=9,iface=MIXER,name='PCM Capture Source'
numid=6,iface=MIXER,name='Line Capture Switch'
numid=7,iface=MIXER,name='Line Capture Volume'
numid=4,iface=MIXER,name='Mic Capture Switch'
numid=5,iface=MIXER,name='Mic Capture Volume'
numid=8,iface=MIXER,name='IEC958 In Capture Switch'
numid=10,iface=MIXER,name='Digital Playback Switch'
numid=3,iface=MIXER,name='Loudness'
Таким образом выясняем, что numid=10
17. Включаем порт S/PDIF командой
alsa_amixer -c 2 cset numid=10 on
, порт должен загореться красным светом.
Добавил пока для себя в скрипте инициализации автоматическое включение цифрового выхода при перезагрузке
/etc/install-recovery.sh
Код:#!/system/bin/sh insmod /system/vendor/modules/snd-hwdep.ko insmod /system/vendor/modules/snd-rawmidi.ko insmod /system/vendor/modules/snd-usbmidi-lib.ko insmod /system/vendor/modules/snd-usb-audio.ko if [ -c /dev/snd/pcmC2D0p ]; then # valid values for media.audio.out.mode: codec, usb setprop media.audio.out.mode usb /system/bin/log -t usb-audio "### Route all audio to USB." /system/xbin/alsa_amixer -c 2 sset 'Digital',0 on else /system/bin/log -t usb-audio "### /dev/snd/pcmC2D0p does not exist. Use default" fi
---------- Сообщение добавлено 22.10.2013 в 11:15 ----------
Существенный недостаток этого метода:
при отключенном питании планшет засыпает через несколько минут отсутствия активности в целях экономии батареи. Соответственно, "засыпают" и устройства, подключенные по USB, т.к. они потребляют 5V питания.
При возвращении из сна система восстанавливает свое состояние, последовательно переподключая устройства. Но так как моя сборка не знает команды
, чтобы прочитать конфигурацию микшера из файла /etc/asound.state,Код:alsa_ctl restore
а в Андроиде, ко всему прочему, отсутствует механизм запуска сервисов по выходу из сна из /etc/pm/sleep.d/ (как в полных Linux), то необходимо найти альтернативный способ повторить команду
после пробуждения,Код:/system/xbin/alsa_amixer -c 2 sset 'Digital',0 on
либо сделать средствами конфигурации,
/system/usr/share/alsa/alsa.conf или ~/.asoundrc,
включенным Digital при инициализации карты.
В противном случае, придется полностью (через пункт в меню настроек для разработчиков), либо частично (посредством приложений серии WakeLock) предотвратить переход в спящий режим, что не особо понравится батарее.
---------- Сообщение добавлено 22.10.2013 в 11:30 ----------
Также еще важный момент, при одновременном подключении по оптике и HDMI по умолчанию приоритет за последним, а на оптике звука нет.
Adjust the below file to use your card/device number.root@android:/ # alsa_aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: sun4icodec [sun4i-CODEC], device 0: M1 PCM [sun4i PCM]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 1: sun4isndhdmi [sun4i-sndhdmi], device 0: SUN4I-HDMIAUDIO sndhdmi-0 []
Subdevices: 1/1
Subdevice #0: subdevice #0
card 2: Device [USB Advanced Audio Device], device 0: USB Audio [USB Audio]
Subdevices: 1/1
Subdevice #0: subdevice #0
root@android:/ # alsa_aplay -L
null
Discard all samples (playback) or generate zero samples (capture)
default:CARD=sun4icodec
sun4i-CODEC, sun4i PCM
Default Audio Device
default:CARD=sun4isndhdmi
sun4i-sndhdmi,
Default Audio Device
default:CARD=Device
USB Advanced Audio Device, USB Audio
Default Audio Device
)
File{$HOME}/.asoundrc
Код:pcm.!spdif { type hw card 2 device 0 } pcm.!default { type plug slave { pcm "spdif" } } # Share a single card with multiple applications #pcm.!default { # type plug # slave.pcm "dmix:CARD=0,DEVICE=1,RATE=48000" #}
---------- Сообщение добавлено 22.10.2013 в 14:46 ----------
Скрипт для активации цифрового выхода можно было бы брутально дописать в конец скрипта-активатора 3G-модемов,
и хотя это успешно работает - некрасиво и не решает проблемы включения S/PDIF по выходу из спящего режима
root@android:/system/lib # cat /etc/usb_modeswitch.sh
При этом попытка добавитьКод:#!/system/bin/busybox ash sleep 2 #/system/bin/setprop "mode_switch_running" "1" if [ -f $1 ]; then /system/bin/usb_modeswitch -W -I -c $1 else echo "$1 does not exist." fi #/system/bin/setprop "mode_switch_running" "0" if [ -c /dev/snd/pcmC2D0p ]; then # valid values for media.audio.out.mode: codec, usb setprop media.audio.out.mode usb /system/bin/log -t usb-audio "### Route all audio to USB." /system/xbin/alsa_amixer -c 2 sset 'Digital',0 on fi
root@android:/ # cat /etc/asound.conf
пока не возымела успеха, хотя в /system/lib/libasound.so есть ссылка на основной конфигурационный файл /system/usr/share/alsa/alsa.conf, в котором прописана загрузка дополнений к конфигурации из /etc/asound.confКод:ctl.Android_DigitalOut { type hw card 2 } pcm.Android_DigitalOut { type hooks slave.pcm { type hw card 2 device 0 } hooks.0 { type ctl_elems hook_args [ {name 'Digital Playback Switch' value on} ] } }
Они может и подходят (хотя на 100% не могу утверждать), но к JB 4.1.1 сейчас планирую попробовать либо пересобрать, либо вытащить из предыдущей прошивки Minix rk3066. От 4.0.3 потому что точно не подходят на похожем ядре и оборудовании.
Rover, на всякий случай погляди, что тебе пишет в dmesg при попытке вставить эти .ko командой insmod.
---------- Сообщение добавлено 06.11.2013 в 18:53 ----------
И версию ядра надо обязательно знать. Что говорит uname -r (или посмотреть в Настройки - О планшете (о телефоне))
Само ядро менять, как показала практика, практического смысла не имеет из-за пропиетарных модулей и библиотек (тачскрин и т.п.).
---------- Сообщение добавлено 06.11.2013 в 18:55 ----------
И, соответственно, что за устройство. Лучше скриншот этого экрана сделать.
---------- Сообщение добавлено 07.11.2013 в 09:54 ----------
Исходники портированной alsa-lib , модуль помещается в external при сборке AOSP, и включается инструкцией BOARD_USES_ALSA_AUDIO в конфигурации устройства для сборщика.
Репутация: 2315149 Эм... насколько я помню, смонтировать можно только раздел
---------- Сообщение добавлено 07.11.2013 в 17:56 ----------
-o - указатель начала списка опций команды
Социальные закладки