El bocabyte vascodilatador

Blog creado por un estudiante de informática relacionado con linux y las nuevas tecnologías

Sonido full-duplex en linux configurando aoss y .asoundrc

Posted by Pedro en octubre 23, 2007

Una de las cosas que pueden hechar para atras a un usuario que llega a linux desde windows es que no te funcione el sonido con varias aplicaciones a la vez. Ya que es algo que no tienen por donde coger ni saben como solucionarlo.

Aqui una breve guia de lo que yo he hecho para que me funcione el Teamspeak y el Tactical Ops (un First Person Shooter)

Lo primero de todo es decir que yo uso gentoo por lo que esta guia va dirigida a esta distribución.

El primer paso es ver que tarjeta tenemos.

pedro@ambasAguas ~ $ lspci | grep -i audio
00:1b.0 Audio device: Intel Corporation 82801G (ICH7 Family) High Definition Audio Controller (rev 02)

En mi caso tengo una intel-hda.

Configuro el kernel para tener soporte para esa tarjeta:

Device Drivers --->Sound --->
<*> Sound card support
Advanced Linux Sound Architecture --->
<*> Advanced Linux Sound Architecture
<*> Sequencer support
<*> OSS Mixer API
<*> OSS PCM (digital audio) API
[*] OSS PCM (digital audio) API - Include plugin system
[*] OSS Sequencer API
[*] Support old ALSA API
PCI devices --->
<M> Intel HD Audio

Edito el /etc/make.conf y añado lo siguiente

Añado alsa oss a las use : USE=”alsa oss …”

Añado los plugins para alsa que necesite: ALSA_PCM_PLUGINS=”adpcm alaw asym copy dmix dshare dsnoop empty extplug file hooks iec958 ioplug ladspa lfloat linear meter mulaw multi null plug rate route share shm softvol”
En mi caso casi todos.

Después instalo los siguientes paquetes: alsa-utils alsa-oss alsa-plugins

ambasAguas pedro # emerge alsa-utils alsa-oss alsa-plugins

Ahora toca el turno de editar diferentes ficheros de configuración:

  • ~/.asoundrc

pedro@ambasAguas ~ $ cat ~/.asoundrc
pcm.card0 {
type hw
card 0
mmap_emulation true
}

pcm.!playback {
type dmix # dmix plugin for mixing the output
ipc_key 1234 # an uniqe number
slave {
pcm "card0"
period_time 0
period_size 1024
buffer_size 8192
rate 44100
}
bindings {
0 0
1 1
}
}

pcm.!capture {
type dsnoop # dsnoop plugin for input
ipc_key 5678 # another uniqe number
slave {
pcm "card0"
period_time 0
period_size 1024
rate 44100
}
}

#
# combined playback/capture device
#
pcm.!duplex {
type asym
playback.pcm "playback"
capture.pcm "capture"
}

#
# making the playback/capture device default
#
pcm.!default {
type plug
slave.pcm "duplex"
}

#
# for oss compatibility (maybe)
#
pcm.!dsp {
type plug
slave.pcm "duplex"
}

ctl.!mixer0 {
type hw
card 0
}

  • /etc/modules.d/alsa

pedro@ambasAguas ~ $ cat /etc/modules.d/alsa
alias char-major-116 snd

## OSS/Free portion
alias char-major-14 soundcore
alias sound-slot-0 snd-hda-intel

## OSS/Free portion - snd-card-0 (Intel HD Audio)
alias sound-service-0-0 snd-mixer-oss
alias sound-service-0-1 snd-seq-oss
alias sound-service-0-3 snd-pcm-oss
alias sound-service-0-8 snd-seq-oss
alias sound-service-0-12 snd-pcm-oss

alias /dev/mixer snd-mixer-oss
alias /dev/dsp snd-pcm-oss
alias /dev/midi snd-seq-oss

##
## Set this to the correct number of cards.
options snd cards_limit=1
options snd-hda-intel index=0

Y con esto ya estarían los ficheros ahora solo hay que llamar a los ejecutables con :

aoss ejecutable

En el caso del Teamspeak :

pedro@ambasAguas ~ $ sudo vim /opt/bin/TeamSpeak

y cambio :

exec /opt/teamspeak2-client/TeamSpeak.bin "$@"

por :

exec aoss /opt/teamspeak2-client/TeamSpeak.bin "$@"

Anuncios

6 comentarios to “Sonido full-duplex en linux configurando aoss y .asoundrc”

  1. Carlos Hernandez said

    Hola, me parece un excelente articulo. Aprovechando tu guia me gustaria preguntarte algo. Probablemente este contestado dentro del articulo, pero aun soy nuevo en esto, y estoy algo confundido.

    Tengo 2 aplicaciones, una compatible con alsa y la otra con oss. la cosa es que quiero que la salida de la aplicacion que es compatible con alsa pueda ser capturada por aquella que es compatible con oss solamente. Me explico mejor. La aplicaciones 1, envia el audio al dispositivo “default”, la segunda aplicacion me pide leer desde un dispositivo en /dev/dsp* o algo por el estilo.

    Me han dicho que una solucion es usar precisamente aoss en la segunda aplicacion:

    xxx $ aoss mp4live

    y que con un bien configurado “.asoundrc” puedo rutear el audio que llega al dispositivo “default” para que el audio pueda ser leido por mi segunda aplicacion en “/dev/dsp”.

    Veo en tu articulo “for oss compatibility (may be)”, es algo similar a esto?… en otras palabras, como debo configurar “.asoundrc” para que rutee el audio al dispositivo que necesito?

    muchas gracias…

  2. bocabyte said

    Exacto. Si usas este .asoundrc y lanzaas tu aplicación con aoss te funcionarán las 2.

    Un saludo.

  3. Carlos Hernandez said

    mmm… haber… no se si me expresé bien. Pero mi idea no es que las dos aplicaciones funcionen. Es decir, la primera aplicacion que genera audio lo envia al dispositivo “default”, osea, normalmente suena por mis parlantes. Yo no deseo que suene por los parlantes, sino que sea ruteando el audio a la segunda aplicacion utilizando /dev/dsp y “.asoundrc”. Ahora nose si el archivo que describes podría hacer esto, ya que si te fijas, en el fondo no quiero que suena nada por los parlantes, solo enviar el audio de una aplicacion a otra.

    Gracias

  4. bocabyte said

    Ahi me pillas eso no se como hacerlo 😀
    Sorry.

  5. Maximiliano said

    Hola, la configuración de .asounrc me sirvió, uso Debian, podrías especificar el sistema utilizado, hay carpetas que no existen en mi distribución, ahora puedo hablar pero el audacious me lanza un error, pcm duplex error o algo así…

    Ehmmm me anda el microfono muy bien, la configuración del TS2 tampoco me sirvió, al hacer la configuración tuya, puedo ejecutar TS2 sin más y me funciona utilizando el dispositivo /dev/dsp y ejecuta sin problemas gracias a tu script, vale recordar poner la distribución utilizada.

  6. Maximiliano said

    Hay un problema,
    ALSA lib pcm.c:2202:(snd_pcm_open_noupdate) Unknown PCM “duplex”

    Todo lo que ocupa ALSA no funciona debido a ese error, me puedes explicar un poco como funciona lo que haz creado?

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

 
A %d blogueros les gusta esto: