User Tools

Site Tools


doc:appunti:linux:sa:pulseaudio

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) di 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.

Ecco alcuni consigli per verificare se il sistema ALSA funziona correttamente.

Verificare che siano 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. In una situazione normale e aggiornata il sistema OSS è deprecato, al punto tale che può essere consigliato mettere in blacklist il modulo kernel relativo.

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.

Configurazione programmi

In generale i programmi GNU/Linux possono utilizzare vari sottosistemi audio, ad esempio l'obsoleto OSS, oppure direttamente il sistema ALSA. L'utilizzo di PulseAudio (quando installato e supportato dal programma) è ovviamente preferibile perché consente l'accesso concorrente e non bloccante al device audio.

Mplayer

Per una configurazione system-wide su un sistema Debian è sufficiiente aggiungere una riga in /etc/mplayer/mplayer.conf.local (che viene incluso dal file principale mplayer.conf):

# Use Pulseaudio for output, instead of ALSA directly.
ao=pulse

Audacious

Dal menu File ⇒ Settings… ⇒ Audio ⇒ Output plugin ⇒ PulseAudio Output.

Avidemux

Dal menu Edit ⇒ Preferences ⇒ Audio ⇒ AudioDevice ⇒ PulseAudioS.

Ardour

Ardour versione 5.12.0 (Debian 10) supporta i sottosistemi audio ALSA e JACK. Utilizzando ALSA il sistema audio viene impegnato in modo esclusivo da Ardour. FIXME Cosa significa e come si fa eventualmente ad usare JACK?

Audacity

È possibile scegliere indipendentemente il device per l'input (icona microfono) e per l'output (icona altoparlante) dal menu a discesa Recording Device e Playback Device rispettivamente. FIXME A cosa server il menu a discesa Audio Host che presenta la sola voce ALSA?

Web References

doc/appunti/linux/sa/pulseaudio.txt · Last modified: 2020/12/25 11:36 by niccolo