User Tools

Site Tools


doc:appunti:linux:sa:alsa_rec

Recording from ALSA/Pulseaudio Microphone

Per configurare l'output con ALSA/Pulseadio vedere la pagina PulseAudio e ALSA.

Verificare quali periferiche di registrazione (capture) ha riconosciuto ALSA:

arecord -l
**** List of CAPTURE Hardware Devices ****
card 0: Intel [HDA Intel], device 0: ALC269VB Analog [ALC269VB Analog]
  Subdevices: 0/1
  Subdevice #0: subdevice #0

È possibile anche eseguire alsamixer quindi premere F6 per selezionare la scheda audio e quindi F5 per vedere le periferiche di tipo Capture.

Il comando pacmd list-sources è più dettagliato, in questo esempio ha identificato due sorgenti relative alla stessa scheda audio HDA Intel, la prima è di tipo monitor e la seconda di tipo sound. La seconda ha due porte di tipo microfono:

pacmd list-sources
2 source(s) available.
  * index: 0
        name: <alsa_output.pci-0000_00_1b.0.analog-stereo.monitor>
        driver: <module-alsa-card.c>
        ...
        card: 0 <alsa_card.pci-0000_00_1b.0>
        module: 6
        properties:
                device.description = "Monitor of Audio interno Stereo analogico"
                device.class = "monitor"
                alsa.card = "0"
                alsa.card_name = "HDA Intel"
                ...
    index: 1
        name: <alsa_input.pci-0000_00_1b.0.analog-stereo>
        driver: <module-alsa-card.c>
        ...
        card: 0 <alsa_card.pci-0000_00_1b.0>
        properties:
                device.class = "sound"
                alsa.class = "generic"
                alsa.subclass = "generic-mix"
                alsa.name = "ALC269VB Analog"
                alsa.id = "ALC269VB Analog"
                alsa.subdevice = "0"
                alsa.subdevice_name = "subdevice #0"
                alsa.device = "0"
                alsa.card = "0"
                alsa.card_name = "HDA Intel"
                device.description = "Audio interno Stereo analogico"
                alsa.mixer_name = "Realtek ALC269VB"
                ...
        ports:
                analog-input-internal-mic: Microfono interno (priority 8900, latency offset 0 usec, available: no)
                        properties:
                                device.icon_name = "audio-input-microphone"
                analog-input-mic: Microfono (priority 8700, latency offset 0 usec, available: yes)
                        properties:
                                device.icon_name = "audio-input-microphone"
        active port: <analog-input-internal-mic>

Come si vede la active port è quella dell'analog-input-internal-mic. Per selezionare l'altra porta si impartisce il comando:

pacmd set-source-port 1 analog-input-mic

Registrare con arecord

Il programma arecord fornito dal pacchetto Debian alsa-utils è un registratore audio da riga di comando esperessamente creato per il sistema audio ALSA. Ovviamente se si ha installato il sistema PulseAudio è preferibile utilizzare un programma che utilizzi quest'ultimo in modo da trarre vantaggio dall'uso concorrente e centralizzato delle risorse audio, ecc.

Per registrare con il comando arecord si deve prima identificare il device con:

arecord --list-devices
**** List of CAPTURE Hardware Devices ****
card 0: Intel [HDA Intel], device 0: ALC269VB Analog [ALC269VB Analog]
  Subdevices: 0/1
  Subdevice #0: subdevice #0

In questo caso vogliamo usare la card 0, device 0:

arecord --device="hw:0,0" --duration=15 foobar.wav

Registrare con parecord

Il programma parecord fornito dal pacchetto Debian pulseaudio-utils è un registratore audio da riga di comando che si interfaccia con il sistema PulseAudio. Utilizzare PulseAudio come layer intermedio fra gli applicativi utente e il layer a basso livello ALSA ha diversi vantaggi, tra cui la condivisione del canale audio fra i vari applicativi, ecc.

Anzitutto è necessario individuare la periferica che vogliamo utilizzare, su un PC con scheda audio integrata e adattatore audio USB saranno ovviamente presenti due source PulseAudio, identificabili con il comando pacmd list-sources:

pacmd list-sources
3 source(s) available.
    index: 0
        name: <alsa_output.pci-0000_00_1b.0.analog-stereo.monitor>
        ...
    index: 1
        name: <alsa_input.pci-0000_00_1b.0.analog-stereo>
        ...
        ports:
                analog-input-mic: Microphone (priority 8700, latency offset 0 usec, available: unknown)
        active port: <analog-input-mic>
  * index: 5
        name: <alsa_input.usb-C-Media_Electronics_Inc._USB_Advanced_Audio_Device-00.analog-stereo>
        ...
        ports:
                analog-input-mic: Microphone (priority 8700, latency offset 0 usec, available: unknown)
        active port: <analog-input-mic>

Anzitutto abbiamo il monitor fornito dalla scheda PCI audio integrata, che tuttavia non ha ports disponibili. Quindi con index 1 abbiamo la stessa scheda audio PCI con la sua port per il microfono. Infine con index 5 c'è la scheda USB con la sua port per il microfono. Con l'asterisco viene indicata la sorgente predefinita.

Da riga di comando è possibile impostare la sorgente predefinita tramite il suo numero o il nome:

pacmd set-default-source \
    'alsa_input.usb-C-Media_Electronics_Inc._USB_Advanced_Audio_Device-00.analog-stereo'

Prima di avviare la registrazione è opportuno impostare il volume, sempre da riga di comando:

pacmd set-source-volume 5 32768

Anche in questo caso invece dell'indice numerico (5 nell'esempio) è possibile utilizzare il name indicato da pacmd list-sources. Il valore numerico che segue è compreso nell'intervallo 0 - FIXME e si interpreta come da tabella che segue:

Valore Percentuale dB
0 0k 0% -infinito
16384 16k 25% -36.12
32768 32k 50% -18.06
65536 64k 100% 0.00
81920 80k 125% 5.81
98304 96k 150% 10.57

ATTENZIONE: Il livello di volume impostato e mostrato da PulseAudio viene opportunamente convertito nelle impostazioni di basso livello del sistema ALSA. Ad esempio una scheda audio potrebbe avere due controlli ALSA separati per il livello del microfono ed il suo guadagno (amplificazione o gain), ma PulseAudio mostra un solo valore (e quindi un solo cursore nel mixer) per regolare il livello. Quindi in generale conviene evitare di usare i tool ALSA come alsamixer o amixer per impostare i livelli, ma utilizzare i corrispondenti comandi pacmd di PulseAudio

Ogni source ha il suo Base Volume che cambia da scheda audio a scheda audio. Nel nostro esempio il microfono della scheda audio PCI integrata ha un valore pari a 5206 (8%, -66.00 dB), mentre la scheda USB ha un valore pari a 20724 (32%, -30.00 dB). Per conoscere tale valore si usa il comando pactl list sources:

Source #1
        State: RUNNING
        Name: alsa_input.pci-0000_00_1b.0.analog-stereo
        ...
        Base Volume: 5206 /   8% / -66.00 dB

Il mixer pavucontrol mostra un segno con etichetta Base in corrispondenza di tale livello nel cursore del mixer, fra i segni dello 0% (Silence) e del 100% (0 db):

Base Volume per microfono nel mixer Pulse Audio

In generale il volume va impostato per tentativi in un intervallo compreso fra il Base Volume e il 100%, per ottenere un suono abbastanza alto ma senza clipping. Sempre in generale non ha molto senso impostare un volume superiore al 100%, ma è preferibile amplificare in post-produzione con gli opportuni software.

Per sicurezza conviene anche togliere il mute al microfono, nel caso in cui fosse attivo:

pacmd set-source-mute 5 0

Finally the command to record a sound file from the microphone:

parecord --verbose --device=5 --channels=1 --fix-rate foobar.wav

You have to press Ctrl-C to terminate the recording. The --fix-rate will use the native sampling rate of the source.

Profili PulseAudio

FIXME: Come configurare il Profilo? In pavucontrol c'è il tab Configurazione ⇒ Audio interno ⇒ Profilo e si può scegliere:

Duplex stereo analogico Funzionano le Uscite (cuffie), ma non gli Ingressi (microfono).
Uscita «Stereo analogico» Funzionano solo le Uscite (cuffie).
Ingresso «Stereo analogico» Funzionano solo gli Ingressi (microfono).
Spento Tutto muto.
doc/appunti/linux/sa/alsa_rec.txt · Last modified: 2020/12/26 10:34 by niccolo