Table of Contents

Alsa: Múltiples aplicaciones sonando simultáneamente en GNU/Linux / Reparar sonido tras actualizar

Dependiendo del software de sonido, la versión y distribución de GNU/Linux puede que dos aplicaciones que intenten acceder al mismo dispositivo de sonido de forma simultanea no funcione. La solución que se propone aquí no tiene porque funcionar en todos los casos, ya que depende de muchos otros factores, como por ejemplo tener pulseaudio funcionando o no.

Listar dispositivos de audio en GNU/Linux

Lo primero que se debe hacer es identificar la tarjeta que queremos utilizar.

aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: HDMI [HDA Intel HDMI], device 3: HDMI 0 [HDMI 0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: HDMI [HDA Intel HDMI], device 7: HDMI 1 [HDMI 1]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: HDMI [HDA Intel HDMI], device 8: HDMI 2 [HDMI 2]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: PCH [HDA Intel PCH], device 0: ALC892 Analog [ALC892 Analog]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

Seleccionar el dispositivo predeterminado y permitir sonido simultaneo

Editar el fichero /etc/asound.conf y agregar una de las siguientes lineas dependiendo lo que se quiera hacer.

Opción 1: Solo una aplicación puede utilizar la tarjeta, el flujo de sonido va directo a la tarjeta de audio.

pcm.default "hw:PCH"

Opción 2: Utiliza todos los plugins predeterminados, entre otros, el que permite mezclar sonidos de diferentes aplicaciones a la vez.

pcm.default "sysdefault:PCH"

La segunda opción sería la que interesa para poner de tarjeta predeterminada card 1: PCH [HDA Intel PCH] y que permita a múltiples aplicaciones sacar sonido al mismo tiempo.

Tarjeta de audio predeterminada en alsamixer

Editamos el fichero alsa.conf y editamos la siguiente linea.

defaults.ctl.card 1

Quitar el mute

Es posible que tras actualizar el sistema y reiniciarlo, se pierda el sonido. Esto puede deberse a que la tarjeta predeterminada es otra diferente a la configurada (mirar apartado anterior) o que simplemente está el mute activado, para desactivar / activar el silencio se pueden ejecutar estos comandos.

amixer set Master mute   
amixer set Master unmute
 
# Activa / desactiva
amixer set Master toggle

Es el equivalente en Alsamixer a pulsar sobre el volumen “Master” la letra M.

NOTA: Aunque suele denominarse Master, esto no siempre es así y depende del dispositivo en uso, se puede ejecutar sencillamente amixer para conocer el nombre correspondiente, en este caso “Speaker” y “Mic”.

amixer 
Simple mixer control 'Speaker',0
  Capabilities: pvolume pvolume-joined pswitch pswitch-joined
  Playback channels: Mono
  Limits: Playback 0 - 48
  Mono: Playback 48 [100%] [12.00dB] [on]
 
Simple mixer control 'Mic',0
  Capabilities: pvolume pvolume-joined cvolume cvolume-joined pswitch pswitch-joined cswitch cswitch-joined
  Playback channels: Mono
  Capture channels: Mono
  Limits: Playback 0 - 29 Capture 0 - 4
  Mono: Playback 1 [3%] [-40.00dB] [off] Capture 2 [50%] [0.00dB] [on]

Tarjetas Intel: pcm_dmix.c:1108 / Couldn't open audio device: No such file or directory

Errores.

ffplay.

ALSA: Couldn't open audio device: No such file or directory

mplayer.

[AO_ALSA] alsa-lib: pcm_dmix.c:1108:(snd_pcm_dmix_open) unable to open slave

speaker-test.

ALSA lib pcm_dmix.c:1108:(snd_pcm_dmix_open) unable to open slave

Solución.

Test.

rmmod snd_hda_intel
modprobe snd_hda_intel index=1
# Probar el sonido, por ejemplo "speaker-test -c2"

Cargar el módulo desde el arranque: /etc/modprobe.d/default.conf

options snd_hda_intel index=1

Comprobar si el audio está funcionando

Opción 1.

speaker-test -c2

Opción 2: Se debe buscar el dispositivo de sonido, por ejemplo /dev/audio y enviarle un par de bytes para ver si se emite sonido.

cat file > /dev/audio1

Enlaces de interés: https://wiki.archlinux.org/index.php/Advanced_Linux_Sound_Architecture_(Espa%C3%B1ol)