This is an old revision of the document!
Table of Contents
PulseAudio e ALSA
Il sistema predefinito per la gestione dell'audio in Debian GNU/Linux si avvale di ALSA e di PulseAdio. Vedere le pagine del Debian Wiki: ALSA e PulseAudio.
ALSA fornisce i driver e una libreria (API) a basso livello, PulseAudio invece implementa una architettura client-server per collegare tra loro sources (processi, hardware di cattura audio, ecc.) e sinks (schede audio, processi locali o remoti, ecc.).
ALSA
ALSA fornisce alcuni moduli kernel per pilotare l'hardware (schede audio), inoltre fornisce di una libreria (pacchetto Debian libasound2) che consente ai programmi di accedere a particolari funzioni, quali canali audio multipli, Dolby AC3, ecc. Vengono forniti anche alcuni tool (nel pacchetto Debian alsa-utils) generalmente utilizzabili da riga di comando, quali aplay, alsamixer, ecc.
Per verificare se il sistema ALSA funziona correttamente:
- Verificare se sono stati caricati i moduli kernel snd_*, in particolar modo snd_pcm. Se si deve utilizzare un programma che richiede l'obsoleto sistema OSS (Open Sound System), si dovrà caricare il modulo di compatibilità snd-*-oss, ma in tal caso non è possibile utilizzare il sistema ALSA nativo.
- Verificare che ALSA abbia identificato l'hardware di playback disponibile:
aplay -l **** List of PLAYBACK Hardware Devices **** card 0: PCH [HDA Intel PCH], device 0: ALC255 Analog [ALC255 Analog] Subdevices: 0/1 Subdevice #0: subdevice #0
- Verificare quali dispositivi PCM (Pulse-code modulation, cioè dispositivi di suono digitale, sia di input che di output) sono disponibili:
aplay -L null Discard all samples (playback) or generate zero samples (capture) jack JACK Audio Connection Kit pulse PulseAudio Sound Server default:CARD=PCH HDA Intel PCH, ALC255 Analog Default Audio Device sysdefault:CARD=PCH HDA Intel PCH, ALC255 Analog Default Audio Device front:CARD=PCH,DEV=0 HDA Intel PCH, ALC255 Analog Front speakers ...
- Eseguire alsamixer e impostare i livelli per i device di playback, accertarsi che i canali non siano muti (tasto M).
- Provare sia da utente root che da utente normale ad inviare un audio digitale direttamente al dispositivo hardware predefinito. Provare eventualmente anche gli altri device elencati da aplay -L:
aplay --device=default /usr/share/sounds/alsa/Noise.wav
PulseAudio
Per verificare che il sistema PulseAudio funzioni è necessario anzitutto avere l'elenco dei device riconosciuti:
pacmd list-sinks 3 sink(s) available. * index: 1 name: <alsa_output.default> driver: <module-alsa-sink.c> ...
quindi si prova ad inviare dell'audio ad uno di essi:
paplay --device=alsa_output.default -p /usr/share/sounds/alsa/Front_Center.wav
Verificare che il demone /usr/bin/pulseaudio sia in esecuzione. Nei normali ambienti grafici viene avviato a nome dell'utente che ha effettuato il login.
L'utente può autonomamente fermare e riavviare il demone, ad esempio per rileggere la configurazione oppure per annullare tutte le modifiche temporanee fatte dalla console pacmd:
pulseaudio --kill pulseaudio --start
Eseguire il mixer grafico pavucontrol. Nella sezione Output Devices, Hardware Output Devices deve risultare la scheda audio pilotata da ALSA, ad esempio Built-in Audio Analog Stereo.
Se risulta No output devices available ovviamente l'audio non può funzionare. Dalla console testuale pacmd è possibile indagare lo stato attuale del sistema PulseAudio. Ecco alcuni comandi utili:
help list-cards list-sinks list-modules
In condizioni normali deve risultare almeno una scheda audio e un sink (cioè un dispositivo che può ricevere audio digitale) entrambi pilotati dal driver module-alsa-card.c, Se esiste solo il sink auto_null (driver module-null-sink.c) vuol dire che la scheda audio ALSA non è stata presa in considerazione e quindi non è utilizzabile.
In generale, se non funziona tutto in automatico, è il sintomo di qualche problema; tuttavia si può provare a caricare qualche modulo PulseAudio manualmente. Ecco alcuni comandi da provare sempre nella console pacmd:
load-module module-alsa-sink list-sinks
Ad esempio il bug #901148 di Debian 10 impedisce il funzionamento dell'audio se è attivo il demone Timidity, infatti risulta disponibile solo il sink null. Caricando manualmente il modulo module-alsa-sink compare un sink con driver module-alsa-sink.c e nome alsa_output.default; grazie a questo l'audio funziona nuovamente. In pavucontrol, Output Devices è infatti apparso un device hardware Built-in Audio.
load-module module-detect list-sinks
Caricando il modulo module-detect viene rilevato un nuovo sink, sempre associato al driver module-alsa-sink.c, ma con il nome alsa_output.0.hdmi-stereo. Si tratta dell'uscita audio su porta HDMI presente sulla scheda madre. In pavucontrol, Output Devices, compare anche il device hardware Built-in Audio Digital Stereo (HDMI). L'elenco prodotto da list-modules si è allungato di un elemento.
Se si caricano nuovamente gli stessi moduli, si ottiene una duplicazione inutile dei sink disponibili.
load-module module-alsa-card list-cards
Verificare se qualche processo ha in uso i device audio, eseguite come utente root:
fuser -v /dev/snd/* lsof /dev/snd/*
Nel caso del bug #901148 pare che il demone timidity prende possesso della scheda audio prima che lo faccia pulse PulseAudio, infatti alcuni dei device risultavano utilizzati dal processo timidity.