Показать сообщение отдельно
Старый 14.02.2013, 12:17   #40
tsynik
Старший Пользователь
 
Регистрация: 17.03.2011
Город: Moscow
Регион: 77, 97, 99, 177
Машина: Alfa Romeo
Сообщений: 322
tsynik has a spectacular aura abouttsynik has a spectacular aura abouttsynik has a spectacular aura about
По умолчанию

Цитата:
Сообщение от 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, в обход андроида.

Последний раз редактировалось tsynik; 14.02.2013 в 13:07.
tsynik вне форума   Ответить с цитированием