PDA

Ver la versión completa : Audio 4.0 en Debian Squeeze



RaidMan
13-02-2011, 17:39
Despues de buscar y rebuscarle las vueltas a la tarjeta de sonido de mi portatil he decidido que me voy a tragar el orgullo de moderador :D y pediros ayuda:


Acabo de instalar Debian Squeeze en un portatil con una tarjeta de audio tal que asi:


raid@RaidMan-AlienWare:~$ lspci |grep Audio
00:1b.0 Audio device: Intel Corporation 5 Series/3400 Series Chipset High Definition Audio (rev 05)

raid@RaidMan-AlienWare:~$ cat /proc/asound/modules
0 snd_hda_intel

raid@RaidMan-AlienWare:~$ lsmod | grep snd
snd_hda_codec_idt 42481 1
snd_hda_intel 20019 1
snd_hda_codec 54244 2 snd_hda_codec_idt,snd_hda_intel
snd_hwdep 5380 1 snd_hda_codec
snd_pcm 60503 2 snd_hda_intel,snd_hda_codec
snd_seq 42881 0
snd_timer 15582 2 snd_pcm,snd_seq
snd_seq_device 4493 1 snd_seq
snd 46446 10 snd_hda_codec_idt,snd_hda_intel,snd_hda_codec,snd_ hwdep,snd_pcm,snd_seq,snd_timer,snd_seq_device
soundcore 4598 1 snd
snd_page_alloc 6249 2 snd_hda_intel,snd_pcm



La tarjeta de Sonido tiene dos salidas MiniJack y una de entrada para un microfono.

Mi problema es el siguiente: Al conectar dos pares de altavoces a las salidas MiniJack conmuta las entradas, es decir, suena o una u otra. Nunca las dos a la vez. Al desconectar ambas activa los altavoces del portatil.

Lo que quiero es conseguir que el audio salga por los 4 canales (MiniJack), en lugar de solo por dos.


He probado mil y una maneras que no me han dado resultado, desde editar el archivo de configuracion de ALSA hasta actualizarlo a la version 1.0.23 (que me dejo sin audio por completo). Ahora mismo el SO esta de base. No tiene absolutamente nada asi que trabajais sobre un SO limpio.


Acepto cualquier sugerencia para hacer funcionar la tarjeta como quiero.


Mas datos:


Debian Squeeze
Gnome 2.30.2
PulseAudio NO INSTALADO



Un saludo y muchas gracias

PD: Cualquier dato que querais pedidlo

RaidMan
16-02-2011, 17:15
Bueno, por fin he conseguido hacer que suene como me gusta. Ahora os explico.

Despues de formatear y reformatear, de cargarme el sistema de audio y un monton de jaleos mas, he dado con la solucion:


Usando esta util herramienta: http://www.alsa-project.org/main/index.php/HDA_Analyzer

Basta con que bajeis el Py:

wget -O run.py http://www.alsa-project.org/hda-analyzer.py
Ponedlo en funcionamiento: (como superusuario o root)

python run.py


Y realizando unos sencillos cambios he conseguido no solo que suenen dos pares de altavoces, sino tambien hacer que suenen los 4 externos y los 2 internos del portatil.

Vereis que en el GUI aparecen una serie de salidas y entradas que podeis editar. En mi caso he tenido que ir a la 1º, 2º y 4º. (La 1º y 2º son los Externos y la 4º los internos.)
Denominadas den el GUI:
NODE[0x0a], NODE[0x0b] y NODE[0x0d]


En la 1º y 2º (NODE[0x0a-b] he marcado en 'Connection List' la opcion
Audio Output [0x13]
Y en 'Widget Control' he marcado la opcion
OUT para ambas salidas.



En el 4º (NODE[0x0d] <-- altavoces internos) he marcado en 'Connection List' la opcion
Audio Output [0x22]
Y en 'Widget Control' he marcado la opcion
OUT

Tambien es recomendable que marqueis en uno de los dos externos la casilla del Widget Control que dice HP, ya que asi podreis controlar el volumen de uno de ellos con los controles de HeadPhones y el otro con el Front.


Ahora habra que averiguar como guardar estos cambios... pero eso ya para otro dia :D ahora voy a ponerme a escuchar musica en 6.0 (algun dia me hare con un subwoofer y los vecinos me echaran)



Un saludo y espero que os sirva!

RaidMan
23-02-2011, 18:41
Vale, definitivamente soy la ostia buscando y enredando :D

Para realizar los cambios desde la consola y despues poder guardarlos bajaremos el siguiente programa:

HDA-VERB (http://kernel.org/pub/linux/kernel/people/tiwai/misc/hda-verb/hda-verb-0.3.tar.gz)

Guardadlo donde querais, que vamos a compilarlo y crear un script que lo llame con ciertos parametros.


Una vez bajado procedemos a descomprimir y compilar:


tar xfz hda-verb-0.3.tar.gz
cd hda-verb*
make

Y lo copiamos al siguiente directorio:


cp hda-verb /usr/bin


Ya esta compilado y listo para utilizarse. Es mas, si desde la consola lo llamais podreis ver los parametros que cambiar:


raid@RaidMan-AlienWare:~/hda-verb-0.3$ hda-verb

usage: hda-verb hwdep-device nid verb param
known verbs:
GET_STREAM_FORMAT, GET_AMP_GAIN_MUTE, GET_PROC_COEF, GET_COEF_INDEX
PARAMETERS, GET_CONNECT_SEL, GET_CONNECT_LIST, GET_PROC_STATE
GET_SDI_SELECT, GET_POWER_STATE, GET_CONV, GET_PIN_WIDGET_CONTROL
GET_UNSOLICITED_RESPONSE, GET_PIN_SENSE, GET_BEEP_CONTROL
GET_EAPD_BTLENABLE, GET_DIGI_CONVERT_1, GET_DIGI_CONVERT_2
GET_VOLUME_KNOB_CONTROL, GET_GPIO_DATA, GET_GPIO_MASK
GET_GPIO_DIRECTION, GET_GPIO_WAKE_MASK, GET_GPIO_UNSOLICITED_RSP_MASK
GET_GPIO_STICKY_MASK, GET_CONFIG_DEFAULT, GET_SUBSYSTEM_ID
SET_STREAM_FORMAT, SET_AMP_GAIN_MUTE, [...]

etc...


Y que parametros vamos a modificar??? Pues ese que dice
SET_PIN_WIDGET_CONTROL

Como podeis ver cuando usabamos el HDA-Analyzer veiamos que cambiabamos una propiedad de este control (en concreto marcabamos la casilla OUT)

Para conseguir el HexaDecimal que nos hace falta para poner el valor OUT en los parametros del HDA-VERB usamos el HDA-Analyzer.


root@RaidMan-AlienWare:/home/raid# python run.py
Using temporary directory: /tmp/hda-analyzer
You may remove this directory when finished or if you like to
download the most recent copy of hda-analyzer tool.
Downloading file hda_analyzer.py
Downloading file hda_guilib.py
Downloading file hda_codec.py
Downloading file hda_proc.py
Downloading file hda_graph.py
Downloading file hda_mixer.py
Downloaded all files, executing hda_analyzer.py
[...]

Una vez abierto vamos a seleccionar nuestras salidas, (en mi caso eran los NODE[0x0a,b,d]) y vamos a marcar OUT en Widget Control.

Ahora en las pestañas de arriba seleccionamos
Text Dump

Y nos solatara algo tal que asi:

Node 0x0a [Pin Complex] wcaps 0x400581: Stereo
Pincap 0x0001001c: OUT HP EAPD Detect
EAPD 0x2: EAPD
Pin Default 0x0421401f: [Jack] HP Out at Ext Right
Conn = 1/8, Color = Green
DefAssociation = 0x1, Sequence = 0xf
Pin-ctls: 0xc0: OUT HP
Unsolicited: tag=0x01, enabled=1
Power: setting=D0, actual=D0
Connection: 4
0x13 0x14* 0x1c 0x22

Se nota cual es la que nos interesa, no?? :D

El valor que ha tomado es
0xc0

Asi que ya tenemos el valor que le daremos al parametro SET_PIN_WIDGET_CONTROL.

Ahora creamos nuestro script:



/usr/bin/hda-verb /dev/snd/hwC0D0 0x0a SET_PIN_WIDGET_CONTROL 0xc0
/usr/bin/hda-verb /dev/snd/hwC0D0 0x0b SET_PIN_WIDGET_CONTROL 0xc0
/usr/bin/hda-verb /dev/snd/hwC0D0 0x0d SET_PIN_WIDGET_CONTROL 0x40

Ahora viene el problema. Para que arranque al inicio y al estar modificando un archivo del sistema debe arrancar con ciertos privilegios, asi que podemos copiarlo al final de alguno de los archivos que se encuentran en:
/etc/init.d
Es un apaño de mierda, pero no queda otra.

Yo he editado el archivo rc.local:

root@RaidMan-AlienWare:/home/raid/# gedit /etc/init.d/rc.local

Y lo he pegado al principio del todo. De esta manera ejecutara el HDA-VERB y cambiara esos parametros de la configuracion del sonido.


Ahora solo queda reiniciar y ver que pasa...

En el caso de que se os fastidie el sonido o algo sencillamente eliminad esas lineas del archivo que editasteis y probad con otros valores en Hexadecimal y sobretodo aseguraos de estar viendo el valor HEX para el NODE correcto ;)



Un saludo

PD: Ni que decir tiene que muchas de estas modificaciones hay que hacerlas como ROOT.