Цитата:
Сообщение от Rage2
tsynik, какой командой накинуть волюме?
Вложение 29846
Еще такой момент. После ребута звука нет нигде.. ни на карте, ни на планшете.
Но если планшет немного поспит, то звук появляется на его спикере.
Далее подключение карты ничего не меняет.
|
ALSA это круто ) далее можно экспериментировать из коммандной строки. в system/bin что выложен выше - 3 бинарника: alsa_amixer alsa_aplay и alsa_ctl. alsa_amixer управляет микшером. посмотри ключи для указания микшером которого устройства рулить. alsa_aplay она же alsa_arecord читает и пишет звук из коммандной строки - можно кинуть WAV на карту и проиграть напрямую на устройстве, проверить работу драйвера (alsa_aplay -Dhw:1,0 (или 2,0, или 0,0) /dev/urandom).
http://alsa.opensrc.org/Aplay
http://alsa.opensrc.org/Amixer
alsa_aplay -l и -L выведет список досупных карт и устройств записи / воспроизведения. дальше надо курить asound.conf на предмет правильного конфига. Одна незакрытая скобка в нем ломает _весь_ конфиг, поэтому эксперименты надо вести осторжно.
Подключение в прошивке Kacapa происходит примерно так:
WiredAccessoryObserver(261): android.intent.action.USB_DGTL_HEADSET_PLUG: state: 1 name: usb_audio_playback
...
02-13 20:44:16.527 I/ALSAModule(90): Initialized ALSA PLAYBACK device AndroidPlayback_Usbaudio_normal
02-13 20:44:16.527 D/AudioHardwareALSA(90): AudioHardwareALSA::setVoiceVolume volume = 0.800000
02-13 20:44:16.527 D/AudioHardwareALSA(90): ALSAMixer::setVolume left = 0.800000 , right = 0.800000
то есть есть некая служба, следящая за оборудованием в devices/virtual/switch/usb_audio_playback и переключающая поток со спикера на карту при её наличии.
WiredAccessoryObserver(261): Headset UEVENT: {SUBSYSTEM=switch, SWITCH_STATE=-1, DEVPATH=/devices/virtual/switch/usb_audio_playback, SEQNUM=1264, ACTION=change, SWITCH_NAME=usb_audio_playback}
WiredAccessoryObserver(261): usb_audio_playback: unrecorgnise state
можно для начала просто в asound.conf переопределить спикер (AndroidPlayback_Speaker[_normal]) с hw 0 0 на hw 1 0, при таком раскладе звук идущий на спикер алса отправит на usb при его наличии и обломается при его отсутствии, более пока не трогать ничего включая default. там же в asound.conf можно задавать значения для микшера и ставить уровни громкости для каждого из блоков. Номер карты может быть к примеру вторым, если на планшете также есть HDMI (он тогда скорее всего как раз hw 1). Это все смотрится через alsa_aplay
Код:
pcm.AndroidPlayback_Speaker_normal {
type plug
slave.pcm {
type hw
card 1
device 0
}
}
далее, микшер для начала покрутить руками через alsa_ctl alsa_amixer, найти нужные контролы (не забывая указать, с микшером какой карты работаешь, ибо у каждого hw устройства микшер свой). После понимания что и насколько включать, можно добавлять из в asound.conf через hooks (но для этого надо также переместить указатель на ctl USB карты)
Код:
pcm.AndroidPlayback_Speaker_normal {
type plug
slave.pcm {
type hooks
slave.pcm{
type hw
card 1
device 0
}
hooks.0 {
type ctl_elems
hook_args [
{
name 'PCM Playback Switch' < название контрола, например уровень громкости левого канала
optional true
value 1 < зачение для этого контрола
name 'Volume L'
value 0.8
name 'Volume R'
value 0.8
etc
}
]
}
}
}
p.s. Вот, кстати,
пример хотплага USB на скриптах. То есть по идее можно отслеживать наличие устройства USB через тот же udev и переопределять настройки asound.conf, в обход андроида.