Direct Mixing y Full Duplex con drivers de sonido ALSA

Hace unos dias descubrí por casualidad un articulo de badopi que explicaba como reproducir sonidos simultaneamente (e.g. escuchar los avisos de Gaim mientras escuchas tu mp3 favorito con XMMS) con los drivers de sonido ALSA. Es decir, sin utilizar soluciones intermedias como podia ser el demonio ESD (eSound) que se utiliza en Gnome y cuya calidad suele dejar mucho que desear.

Para comenzar simplemente recomendar que utiliceis los drivers ALSA para vuestras targetas de sonido ya que como muchos sabreis estos ya vendran incorporados en los nuevos kernels 2.6.x, y si encima podemos conseguir escuchar varios sonidos simultaneamente a nivel de drivers pues mucho mejor.

Por lo visto el termino Full Duplex no engloba segun ALSA la habilidad de reproduccion de sonidos simultaneos, sino simplemente la capacidad de poder reproducir sonidos y grabar a la vez. En cambio, la reproduccion de sonidos es denominada Direct Mixing.

Por defecto el Full Duplex viene activado, pero no se por que motivo el Direct Mixing no. Para activarlo/configurarlo es tan sencillo como crear un archivo llamado “.asoundrc” en nuestro directorio de usuario (e.g. /home/usuario/.asoundrc) con el siguiente contenido:

# ~/.asoundrc
# Everything shall be dmixed, so redefine "default":
pcm.!default {
    type plug
    slave.pcm "ossmix"
}
                                                                                                      
# OSS via aoss should d(mix)stroyed:
pcm.dsp0 {
    type plug
    slave.pcm "ossmix"
}
                                                                                                      
# our ICE1712 dmix:
pcm.ossmix {
    type dmix
    ipc_key 1024
    slave {
        pcm "hw:0,0"
        period_time 0
        period_size 1024
        buffer_size 4096        # buffer size < 6653, but pow(x, 2)
        rate 44100              # we want to play CDs only
    }
                                                                                                      
    bindings {
        0 0
                1 1
        }
}

Si quereis saber que hace concretamente estas lineas podeis consultar este artículo de ALSA.

Solo con esto estais permitiendo que todas las aplicaciones que soporten ALSA (ya que la utilización de este es diferente a los drivers OSS tradicionales) puedan reproducir sonido simultaneamente. Sin ir mas lejos xmms tiene un plugin para poder utilizar ALSA.

Personalmente, usuario de gnome, lo que hago es aprovechar que ESD (eSound) tiene soporte de ALSA y activarlo. Entonces puedo reproducir simultaneamente todas aquellas aplicaciones que tienen soporte o de ESD o de ALSA, por ejemplo, con gaim puedo hacer que use ESD y el xmms que use ALSA y conseguir el efecto deseado.

Como nota final solo indicar que para usuarios de Gentoo, la instalación de drivers ALSA se puede realizar facilmente siguiendo este tutorial. Y para poder tener todas las aplicaciones que implementen el soporte ALSA activo, se debe cambiar la variable USE (/etc/make.conf) para que contenga "alsa" y "esd" en caso que tb queramos soporte para eSound. Recomendaria el uso de "ufed" para realizar cambios en la variable USE (emerge ufed).

Esto es todo, espero que todos podais reproducir varios sonidos a partir de ahora facilmente y sin problemas 🙂
Autor: marble

This entry was posted in Linux. Bookmark the permalink.

13 Responses to Direct Mixing y Full Duplex con drivers de sonido ALSA

  1. jBilbo says:

    Puedes poner el fichero asoundrc en /etc/asoundrc para que esta configuración afecte a todo el sistema… tal y como se dice aquí. (Me encanta juntar 2 páginas que hablan de los mismo xDD
    )

  2. mengor says:

    Creo l’arxiu, li dic al xmms que faci servir ossmix i em diu el següent:

    xmms: pcm.c:2480: snd_pcm_hw_params_can_pause: La declaración `params && params->info != ~0U' no se cumple.
    Abortado

    I re, que se’n va a fer punyetes! O_o ELs drivers alsa els vaig compilar jo… podria ser que m’hagues deixat alguna cosa al fer el ./configure! M’ho miraré.

    També podria ser que la meva sound blaster 16 no ho soportés… (te uns quants anys).


    Edgar Salgado (mengor)
    GnuPG: 1EFA19EE

  3. marble says:

    Com indiques a l’XMMS?? Existeis un plugin alsa-xmms que només l’has de seleccionar (evidentment ha d’estar instal·lat) com a sortida d’audio i res més. Igual si vols utilizar ESD.

  4. mengor says:

    Amm! Jo em pensava que ho havia d’indicar, que en comptes de fer servir “default” fes servir “ossmix”, però ja he vist que a l’arxiu de configuració, “default” apunta a “ossmix”…

    Doncs amb default si que em funciona el so del xmms, però no he provat programes simultanis amb alsa. 🙂


    Edgar Salgado (mengor)
    GnuPG: 1EFA19EE

  5. mengor says:

    Per cert, com es configura l’esd perque funcioni amb alsa? És l’unic que falta… 🙂


    Edgar Salgado (mengor)
    GnuPG: 1EFA19EE

  6. marble says:

    marble@luna ~ $ cat /etc/esd/esd.conf
    [esd]
    auto_spawn=1
    spawn_options=-d ossmix -terminate -nobeeps -as 2
    spawn_wait_ms=100

    Només vaig afegir el “-d ossmix”. ESD ha de tindre suport ALSA tb, eh? Per comprobar-ho:

    marble@luna ~ $ ldd /usr/bin/esd|grep asound
    libasound.so.2 => /usr/lib/libasound.so.2 (0x4005c000)

    Si et surt aquesta linea, perfecte 🙂

  7. utopic says:

    Ja fa temps que m’estic barallant amb el so per poder mesclar-los, i aquest article m’ha aportat una mica de llum, tot i així no em funciona ni cap enrera [traducció de “ni pa’tras”]. Tinc l’alsa compilat amb tots els moduls que he trobat i tal i pascual i funciona, pero no em mescla res de res, només un programa pot accedir a la tarja, he mirat i remirat tota la doc que he trobat, la oficial d’alsa no és gens clara per cert. Algú intueix per que no mescla? tinc una SB 64 PCI [Ensoniq ES1371] i uso el mòdul snd_ens1371, amb el oss-mixer i tota la pesca [n’hi han uns quants].
    Sobre la configuració d’esd, en debian esta a /etc/esound/esd.conf, però no en fa cas [tinc la opció nobeep i continua sonant quant l’engego, amb “esd -nobeep” des del terminal no sona el beep inicial].
    També m’emprenya que cada cop que engego l’ordenador, la mescaldora esta tota a volumns mínims i cada cop els he de pujar manualment…
    Fent alsaconf [una utilitat de debian], diu que no troba cap tarja PnP.

    Alguna idea?

    — Utopic

    In a world without walls,
    who needs gates and windows?

    http://www.gnu.org

  8. marble says:

    El meu germà te la mateixa tarja que tu i li he configurat igual que a tots els meus PCs, es a dir, com dic a l’article i comentaris. Si el teu esd ignora la configuració de l’/etc millor prova a executar-ho tu mateix amb els paràmetres que hi han a l’arxiu de configuració (que he indicat en un altre comentari meu).

  9. mengor says:

    Has de tenir instalat alsa-base i executes ” # dpkg-reconfigure alsa-base” i llavors selecciones la teva tarjeta de so 🙂

    Ara cada cop que reinicies se’t guarda i carrega la configuració del mesclador.

    Per cert, jo l’alsaconf no el tinc instalat, no se que és, però no el trobo pas a faltar 😉

    Jo com que he conseguit la mescla amb el esd, doncs no em liaré més amb l’alsa perque el esd no està linkat (ldd /usr/bin/esd|grep asound no em dona cap resposta :(). Ja en tinc prou amb això. Ademés no estic segur que la Sound Blaster 16 que tinc sigui capaç de fer-ho… jeje


    Edgar Salgado (mengor)
    GnuPG: 1EFA19EE

  10. jBilbo says:

    Ho tens tot per ESD… la qualitat no es massa bona tinc entès, ho notes al mesclar sons, que sona pitjor?

  11. jBilbo says:

    Ara mateix acabo de trovar un altre gran article d’aquest mateix tema a badopi.

    http://www.badopi.org/node/view/325

    A més, em fa gràcia perque sortim referenciats en la paraula sectaris, amb l’article de’n davidcg xDD

  12. mengor says:

    Si que ho noto, però bueno, tampoc passa res, ja que fins ara només escoltava una cosa a la vegada i els sons que sonen malament son les notificacions (gaim, gnome…).

    Quan tingui una targeta que ho soporti ho activo 🙂


    Edgar Salgado (mengor)
    GnuPG: 1EFA19EE

  13. Anonymous says:

    ¿Como haces para utilizar el gaim?, por ejemplo.
    Yo tengo en /etc/libao.conf y ~/.libao puesto default_driver=alsa y puesto el sonido en automático como dicen en la FAQ de Gaim y no me coge alsa :-/, ¿como activas el soporte de ALSA que ESD ofrece?

    PD:perdona mi ignoracia, pero es que me he decidido a empezar con Debian y sólo llevo dos días como aquel que dice.También estuve mirando la opción de realizar guion con skeleton para el demonio ESD pero creo que la tuya es mejor.

Leave a Reply