17 Comandos para manejar el audio en Linux

Introducción

En la actualidad el sonido en Linux es manejado por dos servicios ALSA y PulseAudio. El primero de ellos es el que tiene una relación más cercana con el hardware, mientras que el segundo es el que se comunica con las aplicaciones y es con quien el usuario tiene más interacción. En cuanto al hardware, es importante recordar que la mayoría de las placas de audio contienen un dispositivo llamado codec, el cual se encarga de convertir las señales digitales en analógicas y viceversa.

1. Listar las placas de audio

 lspci
00:00.0 Host bridge: Intel Corporation Xeon E3-1200 v6/7th Gen Core Processor Host Bridge/DRAM Registers (rev 02)
00:02.0 VGA compatible controller: Intel Corporation HD Graphics 620 (rev 02)
00:04.0 Signal processing controller: Intel Corporation Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor Thermal Subsystem (rev 02)
00:14.0 USB controller: Intel Corporation Sunrise Point-LP USB 3.0 xHCI Controller (rev 21)
00:14.2 Signal processing controller: Intel Corporation Sunrise Point-LP Thermal subsystem (rev 21)
00:15.0 Signal processing controller: Intel Corporation Sunrise Point-LP Serial IO I2C Controller #0 (rev 21)
00:15.1 Signal processing controller: Intel Corporation Sunrise Point-LP Serial IO I2C Controller #1 (rev 21)
00:16.0 Communication controller: Intel Corporation Sunrise Point-LP CSME HECI #1 (rev 21)
00:17.0 SATA controller: Intel Corporation Sunrise Point-LP SATA Controller [AHCI mode] (rev 21)
00:1c.0 PCI bridge: Intel Corporation Sunrise Point-LP PCI Express Root Port #1 (rev f1)
00:1c.5 PCI bridge: Intel Corporation Sunrise Point-LP PCI Express Root Port #6 (rev f1)
00:1f.0 ISA bridge: Intel Corporation Sunrise Point-LP LPC Controller (rev 21)
00:1f.2 Memory controller: Intel Corporation Sunrise Point-LP PMC (rev 21)
00:1f.3 Audio device: Intel Corporation Sunrise Point-LP HD Audio (rev 21)
00:1f.4 SMBus: Intel Corporation Sunrise Point-LP SMBus (rev 21)
01:00.0 3D controller: NVIDIA Corporation GM107M [GeForce GTX 950M] (rev a2)
02:00.0 Network controller: Intel Corporation Wireless 8260 (rev 3a)

Aquí vemos que la placa de audio es Intel Corporation Sunrise Point-LP HD Audio (rev 21).

Luego, podremos obtener más información de la misma:

 lspci -nn -d 8086:9d71 -mm -k -v
Slot:   00:1f.3
Class:  Audio device [0403]
Vendor: Intel Corporation [8086]
Device: Sunrise Point-LP HD Audio [9d71]
SVendor:        ASUSTeK Computer Inc. [1043]
SDevice:        Device [1790]
Rev:    21
Driver: snd_hda_intel
Module: snd_hda_intel
Module: snd_soc_skl

El driver snd_hda_intel indica que la placa usa la especificación Intel High Definition Audio. Tener en cuenta que se pueden ver los dispositivos de sonido usb con lsusb y usb-devices.

2. Listar el codec de audio

 aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: PCH [HDA Intel PCH], device 0: ALC295 Analog [ALC295 Analog]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 3: HDMI 0 [HDMI 0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 7: HDMI 1 [HDMI 1]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 8: HDMI 2 [HDMI 2]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 9: HDMI 3 [HDMI 3]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 10: HDMI 4 [HDMI 4]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: Headset [Logitech USB Headset], device 0: USB Audio [USB Audio]
  Subdevices: 0/1
  Subdevice #0: subdevice #0

Aquí se ve que el codec de la placa es ALC295 Analog.

3. Listar dispositivos de salida

 pactl list sinks short
0       alsa_output.pci-0000_00_1f.3.analog-stereo      module-alsa-card.c      s16le 2ch 48000Hz       SUSPENDED
1       combined        module-combine-sink.c   s16le 2ch 44100Hz       SUSPENDED
3       PulseEffects_apps       module-null-sink.c      s16le 2ch 44100Hz       RUNNING
4       PulseEffects_mic        module-null-sink.c      s16le 2ch 44100Hz       SUSPENDED
5       alsa_output.usb-Logitech_Logitech_USB_Headset-00.analog-stereo  module-alsa-card.c      s16le 2ch 44100Hz   RUNNING

Algunos dispositivos son virtuales y corresponden a aplicaciones tales como PulseEffects_mic y PulseEffects_mic. El dispositivo combined es para enviar la salida a más de una dispositivo.

4. Listar los flujos de reproducción

 pactl list sink-inputs short
199     5       88      protocol-native.c       float32le 2ch 44100Hz
3106    3       11      protocol-native.c       float32le 2ch 44100Hz
3124    3       11      protocol-native.c       float32le 2ch 44100Hz

Veremos a continuación como podemos sacar más información de estos flujos.

5. Ver los programas que están usando el sistema de sonido

 pactl list clients short
0       module-systemd-login.c  (null)
6       module-x11-xsmp.c       (null)
8       protocol-native.c       plasmashell
11      protocol-native.c       firefox
17      protocol-native.c       rocketchat-desktop
20      protocol-native.c       thunderbird
21      protocol-native.c       firefox
22      protocol-native.c       VNote
26      protocol-native.c       plasmashell
81      protocol-native.c       org_kde_powerdevil
87      protocol-native.c       pulseeffects
88      protocol-native.c       pulseeffects
89      protocol-native.c       pulseeffects
102     protocol-native.c       plasmashell
109     protocol-native.c       skypeforlinux
110     protocol-native.c       skypeforlinux
138     protocol-native.c       pactl

6. Ajustar el volumen

De acuerdo al listado anterior, puedo ajustar firefox:

pactl set-sink-input-volume 199 50%

O modificar el de puseefects

pactl set-sink-input-volume 3124 40%

O sino, cambiando el volumen de todo el dispositivo:

pactl set-sink-volume 5 50%

7. Cambiar el dispositivo de salida

Aquí estaríamos moviendo el flujo de reproducción de los auriculares al de la placa de sonido interna:

pactl move-sink-input 3124 alsa_output.pci-0000_00_1f.3.analog-stereo

8. Agregar un dispositivo manualmente

El dispositivo de alsa lo podemos sacar por el comando aplay, y luego:

pacmd load-module module-alsa-sink device=hw:1,0

9. Listar las extensiones del sistema de audio

Esta lista muestra el número del módulo, el nombre y los argumentos:

 pactl list  modules short
0       module-device-restore
1       module-stream-restore
2       module-card-restore
3       module-augment-properties
4       module-switch-on-port-available
5       module-udev-detect
7       module-alsa-card        device_id="0" name="pci-0000_00_1f.3" card_name="alsa_card.pci-0000_00_1f.3" namereg_fail=false tsched=yes fixed_latency_range=no ignore_dB=no deferred_volume=yes use_ucm=yes card_properties="module-udev-detect.discovered=1"
8       module-bluetooth-policy
9       module-bluetooth-discover
10      module-bluez5-discover
11      module-esound-protocol-unix
12      module-native-protocol-unix
13      module-gconf
14      module-native-protocol-tcp      auth-anonymous=1
15      module-esound-protocol-tcp      auth-anonymous=1
16      module-combine
17      module-combine-sink
18      module-switch-on-connect
19      module-default-device-restore
20      module-rescue-streams
21      module-always-sink
22      module-intended-roles
23      module-suspend-on-idle
24      module-systemd-login
25      module-position-event-sounds
26      module-role-cork
27      module-filter-heuristics
28      module-filter-apply
30      module-cli-protocol-unix
33      module-null-sink        sink_name=PulseEffects_apps sink_properties=device.description="PulseEffects(apps)"device.class="sound" channels=2 rate=44100
35      module-null-sink        sink_name=PulseEffects_mic sink_properties=device.description="PulseEffects(mic)"device.class="sound" channels=2 rate=44100
37      module-alsa-card        device_id="1" name="usb-Logitech_Logitech_USB_Headset-00" card_name="alsa_card.usb-Logitech_Logitech_USB_Headset-00" namereg_fail=false tsched=yes fixed_latency_range=no ignore_dB=no deferred_volume=yes use_ucm=yes card_properties="module-udev-detect.discovered=1"

Las extensiones le ofrecen funcionalidades adicionales a a pulseaudio.

10. Listar dispositivos de entrada

 pactl list sources short
0       alsa_output.pci-0000_00_1f.3.analog-stereo.monitor      module-alsa-card.c      s16le 2ch 48000Hz  SUSPENDED
1       alsa_input.pci-0000_00_1f.3.analog-stereo       module-alsa-card.c      s16le 2ch 48000Hz       SUSPENDED
2       combined.monitor        module-combine-sink.c   s16le 2ch 44100Hz       SUSPENDED
5       PulseEffects_apps.monitor       module-null-sink.c      s16le 2ch 44100Hz       RUNNING
6       PulseEffects_mic.monitor        module-null-sink.c      s16le 2ch 44100Hz       SUSPENDED
7       alsa_output.usb-Logitech_Logitech_USB_Headset-00.analog-stereo.monitor  module-alsa-card.c      s16le 2ch 44100Hz   IDLE
8       alsa_input.usb-Logitech_Logitech_USB_Headset-00.analog-mono     module-alsa-card.c      s16le 1ch 44100Hz   SUSPENDED

11. Listar flujos de entrada

 pactl list source-outputs short
2       5       89      protocol-native.c       float32le 2ch 44100Hz

12. Examinar la configuración

Este comando es útil si tenemos algún problema y preguntamos en un foro. Proporcionar nuestra configuración nos va a permitir obtener más fácilmente una respuesta.

pacmd dump
### Configuration dump generated at Sun Aug 11 10:55:57 2019

load-module module-device-restore
load-module module-stream-restore restore_device=false
load-module module-card-restore
load-module module-augment-properties
load-module module-switch-on-port-available
load-module module-udev-detect
load-module module-alsa-card device_id="0" name="pci-0000_00_1f.3" card_name="alsa_card.pci-0000_00_1f.3" namereg_fail=false tsched=yes fixed_latency_range=no ignore_dB=no deferred_volume=yes use_ucm=yes card_properties="module-udev-detect.discovered=1"
load-module module-bluetooth-policy
load-module module-bluetooth-discover
load-module module-bluez5-discover
load-module module-esound-protocol-unix
load-module module-native-protocol-unix
load-module module-gconf
load-module module-native-protocol-tcp auth-anonymous=1
load-module module-esound-protocol-tcp auth-anonymous=1
load-module module-combine 
load-module module-combine-sink 
load-module module-switch-on-connect 
load-module module-default-device-restore
load-module module-rescue-streams
load-module module-always-sink
load-module module-intended-roles
load-module module-suspend-on-idle
load-module module-systemd-login
load-module module-position-event-sounds
load-module module-role-cork
load-module module-filter-heuristics
load-module module-filter-apply
load-module module-cli-protocol-unix

set-sink-volume alsa_output.pci-0000_00_1f.3.analog-stereo 0xb018
set-sink-mute alsa_output.pci-0000_00_1f.3.analog-stereo no
suspend-sink alsa_output.pci-0000_00_1f.3.analog-stereo no
set-sink-volume combined 0x10000
set-sink-mute combined no
suspend-sink combined yes

set-source-volume alsa_output.pci-0000_00_1f.3.analog-stereo.monitor 0x10000
set-source-mute alsa_output.pci-0000_00_1f.3.analog-stereo.monitor no
suspend-source alsa_output.pci-0000_00_1f.3.analog-stereo.monitor no
set-source-volume alsa_input.pci-0000_00_1f.3.analog-stereo 0x3039
set-source-mute alsa_input.pci-0000_00_1f.3.analog-stereo no
suspend-source alsa_input.pci-0000_00_1f.3.analog-stereo yes
set-source-volume combined.monitor 0x10000
set-source-mute combined.monitor no
suspend-source combined.monitor yes

set-card-profile alsa_card.pci-0000_00_1f.3 output:analog-stereo+input:analog-stereo

set-default-sink alsa_output.pci-0000_00_1f.3.analog-stereo
set-default-source alsa_input.pci-0000_00_1f.3.analog-stereo

### EOF

13. pamixer

Este programa se puede descargar desde su sitio en GitHub.. Se instala compila e instala sencillamente con los pasos make y make install.

Tiene varios comandos útiles, sirve para activar o desactivar el estado mudo de un dispostivo:

./pamixer -t

14. pulsemixer

Esta herramienta se puede instalar como dice en su sitio de GitHub

Luego al ejecutarlo el comando pulsemixer:

pulsemixer

Las teclas de función permite fácilmente alternar entre los dispositivos de salida, entrada, y las placas de audio.

15. Reiniciar pulseaudio como usuario

systemctl restart --user pulseaudio

16. Configurar un dispositivo de salida predeterminado

pactl set-default-sink alsa_card.usb-Logitech_Logitech_USB_Headset-00

17. Configurar un dispositivo de entrada predetermianda

pactl set-default-source alsa_input.usb-Logitech_Logitech_USB_Headset-00.analog-mono

Conclusión

Desde luego que existen herramientas gráficas para realizar casi todas estas operaciones. No obstante, al usarlas desde la línea de comandos nos permite entender un poco más como funciona el sistema de sonido en Linux, que ciertamente no carece de cierta complejidad. Digno es de mencionar que muchas de las configuraciones se pueden guardar y hacer permanentes en el el archivo ~/.config/pulse/default.pa.

Fuente y más información

Comentarios

Comments powered by Disqus