Я еще где то читал что сама ос андройда все гонит в 48 кгерц. Посмотрите плиз..
Вид для печати
Фубар гонит поток напрямую на девайс, в обход служб операционки.
Натапал толком, простите за очепятки
В итоге, сегодня удалось включить 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}
]
}
}
Никто не подскажет, где модули:
snd-hwdep.ko
snd-rawmidi.ko
snd-usbmidi-lib.ko
snd-usb-audio.ko
Под А13 взять? От А10 не подходят :(
---------- Сообщение добавлено 05.11.2013 в 18:02 ----------
Саш, а для А13 сможешь такое сделать, а то я прям измучАлси ужо от своей бестолковости :)
Они может и подходят (хотя на 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 в конфигурации устройства для сборщика.
Эм... насколько я помню, смонтировать можно только раздел:)
---------- Сообщение добавлено 07.11.2013 в 17:56 ----------
-o - указатель начала списка опций команды