Problemas al crear dispositivo compuesto con ALSA

#1 por Src el 31/12/2015
Buenas, tengo instalado en mi equipo AV Linux 6.0.4 [basado en Debian wheezy] desde hace meses, todo ha funcionado de maravilla hasta que me he topado con un problema relativo al archivo .asoundrc, el cual segun la guia de alsa http://www.alsa-project.org/main/index.php/Asoundrc, es donde se colocan las preferencias de usuario en relación al hardware de sonido que ALSA reconoce.

Pues bien, el problema reside en que al realizar los ajustes, en mi caso, intentar crear un dispositivo software compuesto que una los dos canales estereo de mi veterana placa [ M-audio quattro ] los cambios no aparecen reflejados en la lista de dispositivos. He intentado desde lo mas simple a lo mas complejo y ningun cambio que realizo en mi .asoundrc tiene reflejo alguno en la lista de dispositivos PCM.

Alguien que pueda arrojar luz a este asunto?
Subir
#2 por JP-Myst el 01/01/2016
Tienes más de una tarjeta de sonido? Puede ocurrir que en ALSA asigne diferentes números, a cada tarjeta de sonido, al iniciar el sistema. Si fuera el caso, prueba en asignar un número a cada una de forma específica.
cat /proc/asound/modules (para ver el orden)
Subir
#3 por Src el 02/01/2016
Gracias por tu respuesta, te comento
Tengo 2 tarjetas,la integrada intel y la interface externa. Aunque el sistema carga dos veces el mismo módulo snd_hda_intel, uno para la integrada y otro para la salida hdmi de la misma.
El archivo .asoundrc hace referencia al orden que ya le di por defecto en el alsa-base.conf. Siendo esta la interfaz externa la tarjeta por defecto, aqui el resultado de cat /proc/asound/modules:

0 snd_usb_audio
1 snd_hda_intel
2 snd_hda_intel
3 snd_aloop

La tarjeta donde quiero crear el dispositivo compuesto es la que carga el modulo usb_audio. Y me aparece en alsa como hw:0 subdividiendose en los dos canales estéreo hw:0.0 y hw:0.1. Por descarte lo unico que me queda es que la sintaxis del .asoundrc sea incorrecta.
aqui el .asoundrc:

pcm.Quattro {
type multi;
slaves.a.pcm "hw:0,0";
slaves.a.channels 2;
slaves.b.pcm "hw:0,1";
slaves.b.channels 2;
bindings.0.slave a;
bindings.0.channel 0;
bindings.1.slave a;
bindings.1.channel 1;
bindings.2.slave b;
bindings.2.channel 0;
bindings.3.slave b;
bindings.3.channel 1;
}

ctl.Quattro {
type hw;
card 0;
}

pcm.q4 {
type plug;
slave.pcm "Quattro";
ttable.0.0 1;
ttable.1.1 1;
ttable.2.2 1;
ttable.3.3 1;
}
ctl.q4 {
type hw;
card 0;
}

pcm.q4b {
type route;
slave.pcm "Quattro";
ttable.0.0 1;
ttable.1.1 1;
ttable.2.2 1;
ttable.3.3 1;

}

ctl.q4b {
type hw;
card 0;
}




Un saludo
Subir
#4 por JP-Myst el 02/01/2016
Subir
#5 por vagar el 02/01/2016
¿Qué quieres hacer exactamente? A lo mejor te resulta más fácil a partir de jackd y alsa_in/alsa_out.

http://manpages.ubuntu.com/manpages/natty/man1/alsa_in.1.html

Ars longa, vita brevis.
Mi colección de enlaces web en diigo.

Subir
#6 por Src el 03/01/2016
Muchas gracias por vuestra ayuda, el problema se ha resuelto, os comento.

El objetivo era el de crear un dispositivo software para poder usar de forma simultanea los dos canales estéreo de la tarjeta.

Al usar el metodo alsa_in y alsa_out consegui ruido extraños y glitch por parte de la salida. La solución la encontré en el vínculo que puso JP-myst de LinuxMusician. El problema no era con el asoundrc, que era correcto, si no en que era necesario crear un archivo en /etc/modprobe.d con la id de la tarjeta. Una vez creado esto y mediante jackd por linea de comandos es posible crear un servidor jack con las cuatro entradas del dispositivo software y una salida estereo con el canal hardware, consiguiendo asi 4 in / 2 outs 48000 khz 24 bits, nada mal para una interface con mas de 10 años. En este hilo toda la info: https://linuxmusicians.com/viewtopic.php?f=6&t=13776

Muchas gracias JP-Myst e Igarrido por vuestro interes.


Por si le sirve a alguien:

El código necesario en /etc/modprobe.d/quattro.conf

options snd-usb-audio vid=0x0763 pid=0x2001 device_setup=0x09 index=1 enable=1

El asoundrc, siendo la interface nombrada como hw:1

# The Quattro seems to only have two pcms, not 3.
# quattro1 is pcm0

pcm.quattro1 {
type hw
card 1
device 0
}

ctl.quattro1 {
type hw
card 1
}

# quattro2 is pcm1

pcm.quattro2 {
type hw
card 1
device 1
}

ctl.quattro2 {
type hw
card 1
}
#----

#
# compose 4 channels from two channel x two devices, hw:1,0 and hw:1,1
#

pcm.quattro {
type multi;

slaves.a.pcm "hw:1,0";
slaves.a.channels 2;
slaves.b.pcm "hw:1,1";
slaves.b.channels 2;

bindings.0.slave a;
bindings.0.channel 0;
bindings.1.slave a;
bindings.1.channel 1;
bindings.2.slave b;
bindings.2.channel 0;
bindings.3.slave b;
bindings.3.channel 1;
}

ctl.quattro {
type hw;
card 1;
}


#
# remap 4 channels as interleaved using plug.
#

pcm.q4 {
type plug;
slave.pcm "quattro";
ttable.0.0 1;
ttable.1.1 1;
ttable.2.2 1;
ttable.3.3 1;
}



ctl.q4 {
type hw;
card 1;
}

#
# Use route plugin
#



pcm.q41 {
type route;
slave.pcm "quattro";
ttable.0.0 1;
ttable.1.1 1;
ttable.2.2 1;
ttable.3.3 1;

}

ctl.q41 {
type hw;
card 1;
}


El comando de jackd para iniciar el servidor

jackd -d alsa -C quattro -P hw:1,0 -r 48000 -n 3
Subir
1
#7 por vagar el 05/01/2016
Src escribió:

Al usar el metodo alsa_in y alsa_out consegui ruido extraños y glitch por parte de la salida.


En principio ambos métodos deberían ser equivalentes en cuanto a resultados, a mí por lo menos me va bien. Yo tengo a jackd constantemente gestionando la interfaz interna con el adaptador de pulseaudio para aplicaciones de escritorio, y cuando necesito la interfaz USB para trabajo de estudio la añado al servidor con alsa_in/out.

En cualquier caso enhorabuena por el éxito y gracias por compartir la solución. =D>

Ars longa, vita brevis.
Mi colección de enlaces web en diigo.

Subir

Hilos similares

Respuesta rápida

Regístrate o para poder postear en este hilo