| El
plugin Dmix del Alsa (para reproducir multiples sonidos al mismo tiempo)
Introducci�n
Los que posean placas onboard o placas de
gama media, sabr�n que el alsa con su configuraci�n predeterminada no
permite reproducir al mismo tiempo distintos sonidos. Un ejemplo seria
tratar de utilizar el xmms para reproducir un mp3 y podes tener activos
los sonidos de un cliente de mensajer�a instant�nea (licq, kopete, etc).
O utilizar el xmms al mismo tiempo que se reproduce una pelicula con
el mplayer, y poder escuchar el audio que ambos estan reproduciendo.
El plugin del que hablamos se llama "dmix" y permite, en lineas b�sicas,
extender la funcionalidad del o los dispositivos PCM que tengamos. Si
tenemos que definir al plugin del dmix, podriamos hacerlo diciendo que
dicho plugin provee la mezcla en tiempo real de varios canales o fuentes.
Limitaciones
Por ahora, la unica limitacion de este plugin (actuando por si solo)
es que los juegos emulados con el wineX o los juegos nativos de linux
que utilizan la libreria libc con la funcion fopen() o similares para
comunicarse con el driver de sonido del kernel (OSS Sound Driver) no
pueden utilizarse al mismo tiempo con el xmms, el mplayer o las distintas
aplicaciones que utilicen sonidos. Para solventar este problema de los
programas que utilizan el OSS del kernel, existe el "aoss" pero desgraciadamente
no todos los programas funcionan correctamente con esta aplicacion;
sobre todo los juegos (emulados o no).
Existe otra posibilidad de realizar este proceso de adaptacion entre
las llamadas a la libreria libc con las funciones fopen(). En esto esta
trabajando Takashi Iwai, colaborador del proyecto Alsa. Lo que pretende
es poder juntar las capacidades de este plugin y otro denominado dsnoop,
de modo que puedan ser utilizados mediante el script aoss.
Archivos necesarios (o versiones mas recientes)
alsa-driver
alsa-lib
alsa-oss
alsa-utils
archivo
de ejemplo del .asoundrc
xmms (opcional para reproducir mp3)
plugin del alsa para xmms
MPlayer (opcional para reproducir
videos)
Dmix, el plugin
Para utilizar el plugin dmix, obviamente, necesitamos poseer el alsa
compilado e instalado. Es recomendable tener la ultima version, dado
que generalmente, siempre se estan reformando este plugin dentro del
ALSA.
Como ejemplo, utilizaremos como ejemplo la version 1.0.3 del alsa (como
root):
tar xvjf alsa-driver-1.0.3.tar.bz2
tar xvjf alsa-lib-1.0.3b.tar.bz2
tar xvjf alsa-oss-1.0.3a.tar.bz2
tar xvjf alsa-utils-1.0.3.tar.bz2
cd alsa-driver-1.0.3; ./configure;
make; make install
cd alsa-lib-1.0.3b; ./configure;
make; make install
cd alsa-oss-1.0.3a; ./configure;
make; make install
cd alsa-utils-1.0.3; ./configure;
make; make install
Ahora seteamos el volumen del master,
que por default viene en "mute":
alsamixer
Y reiniciamos el demonio del ALSA:
/etc/init.d/alsasound restart
Luego de instalar el alsa driver, las librerias, la compatibilidad con
el OSS y las utilidades, nos dedicamos a adaptar el ejemplo del archivo
".asoundrc" para que funcione el plugin dmix con nuestra placa de sonido.
La configuraci�n siguiente pertenece al chipset nforce 2. Lo unico que
deben hacer es reemplazar "nforce" en todos los lados que aparece por
el que corresponda con su placa, algunos ejemplos:
Sound Blaster 16 = sb16
Intel8x0 (Realtek ALC650 rev 2) = intel8x0
Nforce 2 (Realtek ALC650 rev 3) = nforce
Generalmente se puede obtener el nombre correspondiente con: cat
/proc/asound/card0/id
Archivo de configuraci�n de ejemplo:
#################################################
########## .asoundrc for nforce
2 (intel8x0)#############
#################################################
pcm.nforce-hw {
type hw
card 0
}
pcm.dsp0 {
type plug
slave.pcm "nforce"
}
# generalmente /dev/dsp es un enlace
simbolico a /dev/dep0, con lo cual
# es indistinto poner pcm.dsp o
pcm.dsp0, como en el caso de arriba
#pcm.dsp {
# type plug
# slave.pcm "nforce"
#}
pcm.!default {
type plug
slave.pcm "nforce"
}
pcm.nforce {
type dmix
ipc_key 1234
slave {
pcm "hw:0,0"
period_time 0
period_size 1024
buffer_size 32768
}
}
ctl.nforce-hw {
type hw
card 0
}
#################################################
Componentes del archivo .asoundrc
En lineas generales, esto es lo importante a saber de ese archivo de
configuracion:
- Definici�n del control pcm a traves de la placa "nforce". Si bien
esta placa utiliza el modulo intel8x0, tambien podemos, en el caso
de tener la nforce2, poner nforce. Notemos el tipo (type) que es hardware.
pcm.nforce-hw {
type hw
card 0
}
- Definici�n del dispositivo que se utilizar�a como esclavo. Luego
se redirecciona el pcm esclavo (segundo dispositivo a reproducir)
al encabezado "nforce". El tipo es plug indica que se conectara con
el dispositivo nforce, declarado mas adelante.
pcm.dsp0 {
type plug
slave.pcm "nforce"
}
- Esto sirve para definir que recurso utilizar� el programa que utilice
el dispositivo predeterminado de sonido, ta como el xmms, cuya configuracion
explicaremos luego en este articulo. El tipo es plug indica que se
conectara con el dispositivo nforce, declarado mas adelante.
pcm.!default {
type plug
slave.pcm "nforce"
}
- Dispositivo que abarca a los demas plug's. Aca definiremos toda
la configuracion de nuestra placa de sonido.
- El tipo ahora es "dmix", pues este plugin se encargar� de tomar
las salidas de los programas que intenten reproducir sonidos y de
mezclarlas hacia una unica via, nuestra salida de la placa de sonido.
- El ipc_key es un numero unico que asignamos, que es para uso interno.
- Luego declaramos una subfuncion "slave" que tiene como par�metros
el pcm del dispositivo 0,0 (dispositivo primario de sonido). La otra
opcion recalcable es el "buffer_size", que define el tama�o del buffer
a utilizar (para mas info leer al pie de pagina la informacion sobre
este par�metro).
- Existen muchas otras opciones, como "rate" que define el sampleo
de los archivos a reproducir. Puede ser de mucha utilidad si poseemos
una placa de sonido que no es capaz de tener sampleos mayores a 44.1Khz
(por ejemplo una Sound Blaster Awe 64 ISA). El problema que se presentaba
a veces con (por ejemplo) el mplayer, es que cuando se trataba de
reproducir un video cuyo sonido este sampleado en 48Khz, el mplayer
se cerraba (y en eventuales ocaciones puede producir un "cuelgue"
del driver alsa, no afectando al sistema, pero obligando a reiniciar
la maquina para poder reproducir un sonido nuevamente). Entonces para
evitar este problema si tenemos una placa que sabemos que no soporta
el sampleo en 48Khz, definimos el sample rate en 44100 asi: rate "44100"
debajo de buffer_size, o en otro lugar, siempre y cuando se encuentre
dentro de la subfuncion slave.
pcm.nforce {
type dmix
ipc_key 1234
slave {
pcm "hw:0,0"
period_time 0
period_size 1024
buffer_size 32768
}
}
- Define una estructura que se complementa con la de pcm.nforce-hw.
Es del tipo hardware y hace referencia a la primera placa de sonido
en nuestro sistema, para el caso de querer hacer configuraciones de
varias placas. Si poseemos una sola placa de sonido, siempre ir� "card
0".
ctl.nforce-hw {
type hw
card 0
}
Configuraci�n del
xmms
Primero instalamos
el xmms (si es que no lo tenemos) y el plugin del ALSA para el xmms.
Un ejemplo seria:
rpm -Uvh xmms-1.2.10-1.i386.rpm
rpm -Uvh xmms-devel-1.2.10-1.i386.rpm
rpm -Uvh xmms-alsa-1.2.10-1.i386.rpm
Ahora configuraremos el xmms de modo tal que utilice el dispositivo
denominado "default"; y con esto permitir� a los dem�s programas reproducir
mediante el dispositivo esclavo. De este modo podemos hacer cohexistir
el xmms con el mplayer u otros programas que puedan utilizar el alsa.
Tomaremos como ejemplo, la configuraci�n para la placa de sonido Nforce
2, con chip Realtek ALC650 rev. 3 (generalmente las mothers con el chip
nforce 2 traen como dispositivo de audio al ALC650). Pero
el sistema es el mismo para todas las placas de sonido, pu�s como ver�n
solo deben seleccionar el dispositivo de sonido "default", que
no depende de la placa, sino que es una config predeterminada, que todos
pueden seleccionar.
Con el boton derecho del mouse vamos al menu Opciones ==> Preferencias
(del xmms).
Luego ahi nos encontraremos con la pantalla de plugins de Entrada/Salida
de audio:
Aqui debemos seleccionar como Plugin
de Salida al ALSA. Si no poseemos dicho plugin, debemos bajarlo de la
pagina oficial del xmms ( plugin
del ALSA del xmms )
Seguramente no estar� al principio por default, y lo deberemos seleccionar
de la lista disponible:
Luego de eso, vamos a "Configurar" para poder setear correctamente el
plugin del ALSA:
Y corroboramos que en "Dispositivo
de audio" este seleccionado el "default". Con esto permitiremos que
el xmms reproduzca mediante el dispositivo predeterminado, y que los
demas programas lo hagan mediante el dispositivo esclavo, declarado
en la configuraci�n que hemos explicado anteriormente, en el archivo
".asoundrc".
Configuracion del Licq (en
general cualquier cliente de mensajeria instant�nea) Ahora
configuraremos el Licq para que, si es que lo deseamos, reproduzca los
sonidos pertenecientes a los distintos eventos disponibles (mensaje
de alerta, envio de mensajes, etc). En general cualquier cliente de
mensajer�a instant�nea permite seleccionar el comando para reproducir
los sonidos (amsn, kopete), o directamente reproduce los sonidos utilizando
el dispositivo esclavo declarado en la configuraci�n del .asoundrc.
Solo es cuestion de probar.
Configuremos el Licq:
Vamos a Menu ==> Opciones ==> Eventos
Y corroboramos que este activado "Activar
tratamiento de eventos" y que en "comando" este puesto aplay,
en ves del que viene siempre "play".
El comando play es reemplazado por aplay, debido a que el comando play
utiliza la salida predeterminada, que es utilizada por el xmms; de modo
que ocurre el mismo problema que el xmms y los juegos emulados o cualquiera
que utilice la libreria libc con la funcion fopen():
Proximamente,
pondr� un art�culo sobre el dmix/dsnoop que posiblemente solucione el
problema de los juegos emulados, y el xmms; para que no exista limitaciones
en cuanto a la reproduccion simult�nea de sonidos.
RODRIGO
SAN ROMAN
[email protected]
|