OpenBSD | Audio (1/3) Una prima panoramica

di | Aprile 20, 2026

Abilitare la registrazione audio.

Prima di tutto affrontiamo la questione della sicurezza. OpenBSD, noto per le sue robuste misure di sicurezza, ha la registrazione del microfono disabilitata di default. Questo blocco è appositamente voluto per proteggere la tua privacy, se hai bisogno di effettuare una registrazione audio, potrai rimuoverlo, temporaneamente o in maniera permanente. Per farlo hai bisogno di avere i permessi di amministratore della macchina e del comando sysctl (1), che permette di modificare i parametri di funzionamento del kernel. Nel caso specifico dovrai impostare a True (1) il parametro kern.audio.record.

arcadia$ doas sysctl kern.audio.record=1
kern.audio.record=0 -> 1

Sappi comunque che, al reboot della macchina, OpenBSD ritorna nuovamente alle impostazioni di default, per cui se hai intenzione di rendere permanente la configurazione dovrai inserirla –con un qualsiasi editor di testo– *anche* nel file di configurazione di sysctl (/etc/sysctl.conf)

arcadia$ cat /etc/sysctl.conf | grep kern.audio.record
kern.audio.record=1

Per verificare se sei abilitato o meno alla registrazione audio, puoi sempre eseguire il comando sysctl specificando il parametro da verificare.

arcadia$ doas sysctl kern.audio.record
kern.audio.record=1

La scheda audio

E’ buona cosa verificare se OpenBSD ha identificato la tua scheda audio, e se è riuscito ad associare all’hardware uno dei drive disponibili per supportarlo. Quindi esegui il comando dmesg(1) per ricercare “audio” nei messaggi generati dal kernel nella fase di bootstrap.

Sto utilizzando un Lenovo ThinkPad, e nel mio caso appare questo :

arcadia$ dmesg | grep audio
audio0 at azalia0

arcadia$ dmesg | azalia0
azalia0 at pci0 dev 31 function 3 "Intel 100 Series HD Audio" rev 0x21: msi
azalia0: codecs: Realtek ALC298, Intel/0x2809, using Realtek ALC298

Audio/MIDI Server sndiod

sndiod è un server audio integrato e scritto per OpenBSD, di cui esiste un port per altri sistemi operativi UNIX e Unix-like, ad esempio: FreeBSD e NedBSD (come port) e GNU/Linux. Per alcune distribuzioni GNU/Linux come Debian GNU/Linux, ArchLinux, Gentoo e Ubuntu è presente nel repository ufficiali.

La funzione di un server audio è quella di fare da tramite tra un’applicazione (ad esempio aucat, ffmpeg o firefox) e l’hardware audio. Se più applicazioni possono generare suoni anche contemporaneamente è grazie ai server audio. Ogni applicazione deve essere predisposta ad interfacciarsi ad uno specifico server audio.

arcadia$ ps aux | grep sndiod
_sndiop  86217  0.0  0.0   9068   1028 ?? IpU  7:06PM   0:00.03 sndiod: helper (sndiod)
_sndio   53302  0.0  0.0   9588   2156 ?? I<pc 7:06PM   0:16.76 /snd/bin/sndiod -s default -m play,mon -s mon

Regolare il Volume

sndiod è corredato di un comando utente per visualizzare e modificare i sui parametri di funzionamento, quetso è sndioctl. Per avere una lista dei parametri basterà eseguire il comando senza specificare nulla altro.

arcadia$ sndioctl
input.level=0.494
input.mute=0
output.level=0.494
output.mute=0
server.device=0(azalia0)
app/aucat.level=1.000
app/sndfilepla.level=1.000

I livelli dei volumi possono variare nel range che va da 0 a 1. Il volume generale di output è attualmente impostato ad una via di mezzo tra 0 ed 1, al valore 0.494. Per alzarlo al massimo dovrò impostare output.level ad 1, oppure un pelino sotto per avere un suono piu pulito

arcadia$ sndioctl output.level=0.980
output.level=0.980

Ripetendo nuovamente la verifica precedente, otterrò il nuovo valore, ed un volume di riproduzione audio quasi al massimo.

arcadia$ sndioctl
input.level=0.494
input.mute=0
output.level=0.980
output.mute=0
server.device=0(azalia0)
app/aucat.level=1.000
app/sndfilepla.level=1.000

Registrazione di un audio

Per registrare un audio sarà necessario collegare un microfono al computer. Il mio computer ha un’unico connettore I/O adatto sia per microfono che per le cuffie. E’ possibile collegare anche un microfono usb, ma personalmente non ho ancora provato, da quel che dicono sembra funzionare perfettamente.

Per avviare la riproduzione o la registrazione di un audio non è necessario installare alcun software perchè OpenBSD include l’ottimo aucat che permette di svolgere entrambe le funzionalità, pur supportando solamente il formato wav, se si necessita di dover utilizzare anche altri formati ed avere una suite estesa di comandi per la loro gestione, è necessario installare almeno ffmpeg e opzionalmente libsndfile

L’installazione di questi due software è quindi Opzionale, ma consigliato. L’installazione l’ho eseguita col comando pkg_add(1)

arcadia$ doas pkg_add ffmpeg
quirks-7.147 signed on 2025-10-10T23:15:26Z
ffmpeg-6.1.3p0v1: ok
New and changed readme(s):
        /usr/local/share/doc/pkg-readmes/ffmpeg

arcadia$ doas pkg_add libsndfile
libsndfile-1.2.2p0: ok

Per avviare la registrazione audio con il comando aucat (^C per interromperla)

arcadia$ aucat  -f snd/0 \
                -o output/mic-aucat.wav

Per avviare la registrazione audio con il comando ffmpeg (^C per interromperla)

arcadia$ ffmpeg -f sndio    \
                -i snd/0    \
                output/mic-ffmpeg.wav

Il formato del comando, sia con l’uno che con l’altro è quasi identico, va specificato il dispositivo (snd/0) ed il nome del file di output. Entrambi i comandi considerano l’estensione utilizzata sull’output per determinare il formato del file da produrre.

Il risultato è pressocchè identico, idem per il formato del comando.

Riproduzione della registrazione fatta col comando aucat. (WAV)
Riproduzione della registrazione fatta col comando ffmpeg. (WAV)

Riprodurre un file audio

Per riprodurre il file audio appena prodotti possiamo, come precedentemente detto, utilizzare il comando aucat, sndfile-play (di libsndfile) o ffplay (di ffmpeg).

arcadia$ aucat        -i output/mic-aucat.wav
arcadia$ sndfile-play    output/mic-aucat.wav
arcadia$ ffplay          output/mic-aucat.wav

Utility libsndfile

Il pacchetto libsndfile, include una e vera suite di strumenti utili per la gestione dei formati audio, di seguito la lista dei vari comandi disponibili :

ComandoDescrizione
sndfile-cmpComparazione di 2 o file audio
sndfile-concatConcatena 2 o piu’ file audio
sndfile-convertConverte un file audio da un formato ad un altro
sndfile-deinterleaveSepara un file audio in piu’ file audio
sndfile-infoRestituisce le informazioni di un file audio
sndfile-interleaveAccorta 2 o file file audio in un’unico risultato
sndfile-metadata-getRestituisce i metadati di un file audio
sndfile-metadata-setValorizza i metadati di un file di audio
sndfile-playRiproduce un file audio
sndfile-salvageSe un file audio WAV è superiore ai 4G corregge l’header

Vediamoli, velocemente tutti.

Comparazione di file audio

Visto che abbiamo 2 registrazioni di prova, una eseguita con aucat e l’altra con ffmpeg, proviamo a compararle, per provare il comando sndfile-comp. Probabilmente il programma di ferma alla prima differenza che trova, ed informa che i 2 file son differenti.

arcadia$ sndfile-cmp output/mic-aucat.wav output/mic-ffmpeg.wav
sndfile-cmp: PCM data of files bin/output/mic-aucat.wav and bin/output/mic-ffmpeg.wav differ (at frame offset 0)

Conversione di formati audio

Il comando sndfile-convert stabilisce il formato target dall’estensione specificata nel file di output (-o). Supporta i seguenti formati :

estensioneformato
wavWAV (Microsoft *merda*)
aifAIFF (Apple/SGI)
auAU (Sun/NeXT)
sndAU (Sun/NeXT)
rawRAW (header-less)
gsmRAW (header-less)
voxRAW (header-less)
pafPAF (Ensoniq PARIS, big-endian)
fapPAF (Ensoniq PARIS, little-endian)
svxIFF (Amiga IFF/SVX8/SV16)
nistSPHERE (NIST SPeech HEader Resources)
sphSPHERE (NIST SPeech HEader Resources)
vocVOC (Creative Labs)
ircamSF (Berkeley/IRCAM/CARL)
sfSF (Berkeley/IRCAM/CARL)
w64W64 (SoundFoundry WAVE 64)
matMAT4 (GNU Octave 2.0 / Matlab 4.2)
mat4MAT4 (GNU Octave 2.0 / Matlab 4.2)
mat5MAT4 (GNU Octave 2.1 / Matlab 5.0)
pvfPVF (Portable Voice Format)
xiXI (FastTracker 2)
htkHTK (HMM Tool Kit)
sdsSDS (Midi Sample Dump Standard)
avrAVR (Audio Visual Research)
wavexWAVEX (MS WAVE with WAVEFORMATEX)
sd2SD2 (Sound Designer II)
flacFLAC (FLAC Lossless Andio Codec)
cafCAF (Apple Core Audio File)
wveWVE (Psion Series 3)
prcWVE (Psion Series 3)
oggOGG (OGG Container format)
ogaOGG (OGG Container format)
mpcMPC (Akai MPC 2k)
rf64RF64 (RIFF 64)

Proviamo a convertire le precedenti 2 registrazioni dal formato WAV (non compresso) al formato OGG (formato compresso)

arcadia$ sndfile-convert output/mic-aucat.wav output/mic-aucat.ogg
arcadia$ sndfile-convert output/mic-ffmpeg.wav output/mic-ffmpeg.ogg

Entrambi le conversioni vengono eseguite, ed i file nel formato OGG prodotti, come si può notare hanno una dimensione ridotta, essendo come detto compressi perdendo informazioni. Non posso scendere nel dettaglio perchè non conosco la specifica di questo formato, anche se molto amato nella comunità del software libero. Poi, non chiedetemi perchè il livello di riduzione è differente tra le due conversioni : – |

arcadia$ ls -ltr output/mic-aucat.*
-rw-r--r--  1 jack0e jack0e 1353668 Apr 19 23:42 output/mic-aucat.wav
-rw-r--r--  1 jack0e jack0e   66532 Apr 19 23:43 output/mic-aucat.ogg

arcadia$ ls -ltr output/mic-ffmpeg.*
-rw-r--r--  1 jack0e jack0e 1125198 Apr 19 23:42 output/mic-ffmpeg.wav
-rw-r--r--  1 jack0e jack0e   80953 Apr 19 23:43 output/mic-ffmpeg.ogg
Riproduzione della registrazione fatta con aucat (WAV) convertita in OGG (compresso) con il comando sndfile-convert.
Riproduzione della registrazione fatta con ffmpeg (WAV) convertita in OGG (compresso) con il comando sndfile-convert.

Personalmente non noto differenze nell’ascolto tra l’originale WAV ed il corrispondente audio compresso (OGG). Sicuramente in altri contesti e con orecchi attenti qualcuno noterà delle differenze. Diciamo che li dove si tratta di registrazioni ambientali per memorizzare appunti e non musica classica tra esperti, conviene usare il formato ogg, a quello wav, più che altro per salvaguardare spazio prezioso del disco, infatti con OGG avremo una riduzione significativa nettamente al di sopra del 90%.

Concatenazione di file audio

Con il comando sndfile-concat possiamo concatenare 2 o più file audio, la sequenza nel file di output è stabilita dall’ordine impostato nel comando stesso. Proviamo ad esempio a concatenare le due registrazioni fatte in precedenza nel formato OGG.

arcadia$ sndfile-concat output/mic-aucat.ogg output/mic-ffmpeg.ogg mic-aucat+ffmpeg.ogg

Il file concatenato dei 2 ogg (mic-aucat.ogg e mic-ffmpeg) viene eseguito, ed il file di output –concatenazione dei due– prodotto (mic-aucat+ffmpeg.ogg). La dimensione di quest’ultimo occhio e croce è proprio la somma delle singole dimensioni dei file da concatenare.

arcadia$ la -ltr output/*.ogg
-rw-r--r-- 1 jack0e jack0e  66532 Apr 19 23:43 output/mic-aucat.ogg
-rw-r--r-- 1 jack0e jack0e  80953 Apr 19 23:43 output/mic-ffmpeg.ogg
-rw-r--r-- 1 jack0e jack0e 143293 Apr 19 00:25 output/mic-aucat+ffmpeg.ogg

Come contro prova, ho eseguito nuovamente il comando, fornendo i file sorgente in ordine inverso, ed ha funzionato come previsto. Allego entrambe le concatenazioni

Concatenazione di mic-aucat.ogg e mic-ffmpeg.ogg (aucat+ffmpeg)
Concatenazione di mic-ffmpeg.ogg e mic-aucat.ogg (ffmpeg+aucat) — ordine inverso —

Leggere le info di un file audio

Il comando sndfile-info, estrae e ci restituisce tutte le informazioni recuperabili su uno specifico file audio. Potrebbe essere una buona occasione per visionare le caratteristiche di un certo formato per ulteriori approfondimenti futuri, oppure per capire la differenza tra un formato come il WAV e l’OGG –compresso–. Ho pensato quindi provare ad estrapolare le info di una medesima registrazione (ad esempio mic-aucat) sia nel formato originale WAV e sia in quello convertito OGG.

WAV Info

arcadia$ sndfile-info output/mic-aucat.wav
=================================================
File : output/mic-aucat.wav
Lenght : 1353668
RIFF : 1353656
WAVE
fmt  : 40
  Format       : 0xFFFE => WAVE_FORMAT_EXTENSIBLE
  Channels     : 2
  Sample Rate  : 48000
  Block Aligh  : 6
  Bit Width    : 24
  Bytes/sec    : 288000
  Valid Bits   : 24
  Channel Mask : 0x0 (should not be zero)
  Subformat
    esf_field1 : 0x1
    esf_field2 : 0x0
    esf_field3 : 0x10
    esf_field4 : 0x80 0x0 0x0 0xAA 0x0 0x38 0x9B 0x71
    format : pcm
data : 1353600
End
**** All non-PCM format files should have a 'fact' chunk.

-----------------------------------------
Sample Rate : 48000
Frames      : 225600
Channels    : 2
Format      : 0x00130003
Sections    : 1
Seekable    : TRUE
Duration    : 00:00:04.700
Signal Max  : 8.38861e+06 (0.00 dB)

OGG Info

arcadia$ sndfile-info output/mic-aucat.ogg
=================================================
File : output/mic-aucat.wav
Lenght : 66532
Ogg stream data : Vorbis
Stream serialno : 2034277668
Vorbis library version : Xiph.Org libVorbis 1.3.7
Bitstream is 2 channel, 48000 Hz
Encoded by : Xiph.Org libVorbis I 20200704 (Reducing Environment)
PCM offset  : 0
PCM end     : 225600
End

-----------------------------------------
Sample Rate : 48000
Frames      : 225600
Channels    : 2
Format      : 0x00200060
Sections    : 1
Seekable    : TRUE
Duration    : 00:00:04.700
Signal Max  : 1.02394 (0.21 dB)

Mi fermo qui, altrimenti si rischio di andare oltre lo scopo che aveva questo appunto, e cioè una panoramica generale sul sistema di gestione dell’audio in OpenBSD (7.8). Si approfondirà in altro contesto, e se ne avremo l’esigenza. : – )

Leggere e Scrivere i Metadati di un file audio

I formati audio, possono prevedere al proprio interno un’area in cui son previsti dei metadati, che le applicazione (o l’utente stesso) può utilizzare per memorizzare alcune informazioni, come l’autore, il titolo, una descrizione, licenza etc., utili ad esempio per eseguire ricerche o selezioni. La libsndfile prevede a tal proposito 2 comandi : sndfile-metadata-get ed sndfile-set, il primo per leggerli ed il secondo per impostarli. Proviamo ad usarli con i nostri audio: wav ed ogg. Il risultato è identico, sia analizzando il file wav prodotto da aucat, sia quello -sempre wav- prodotto da ffmpeg. Idem per le confersioni ogg, generate da sndfile-conv. La lista dei metadati è identica e nessun metadato è impostato.

arcadia$ sdnfile-metadata-get output/rec-aucat.wav
Description           :
Originator            :
Originator ref        :
UMID                  :
Origination date      :
Origination time      :
Loudness value        :   0.00
Loudness range        :   0.00
Max. true peak level  :   0.00
Max. momentary level  :   0.00
Max. short term level :   0.00
Coding history        :
Name                  :
Copyright             : 
Artist                :
Comment               :
Create date           :
Album                 :
License               :

Provo ad impostare qualche metadato sul wav

arcadia$ sndfile-metadata-set --str-copyright "(C)opyleft 2026 - info @ granito . org . uk" output/mic-aucat.wav

arcadia$ sndfile-metadata-set --str-license "Creative Common License 2.0" output/mic-aucat.wav

arcadia$ sndfile-metadata-set --str-comment "Registrazione audio di test, con OpenBSD/aucat" output/mic-aucat.wav

Ripetendo il comando di lettura dei metadati, sto notando che che la licenza non risulta impostata. Non so se è un bug del comando sndfile-metadata-get|set, oppure il formato wav non prevede tale metadato. Sono più propenso che sia un piccolo bug di libsndfile, segnalerò ad Erik (Erik de Castro Lopo)

arcadia$ sndfile-metadata-get output/rec-aucat.wav
Description           :
Originator            :
Originator ref        :
UMID                  :
Origination date      :
Origination time      :
Loudness value        :   0.00
Loudness range        :   0.00
Max. true peak level  :   0.00
Max. momentary level  :   0.00
Max. short term level :   0.00
Coding history        :
Name                  :
Copyright             :   (C)opyleft 2026 - info @ granito . org . uk 
Artist                :
Comment               :   Registrazione audio di test, con OpenBSD/aucat
Create date           :
Album                 :
License               :

Ripetendo il medesimo test sul corrispondente formato .ogg, ottengo l’errore dalla sndfile-metadata-set, che per questo formato non esistono tali metadati, anche se la sndfile-metadata-get in maniera equivoca li fornisce.

Suonare un file audio

Del comando sndfile-play ne abbiamo già parlato precedentemente.

Interleave e Deinterleave di file audio

__DA_COMPLETARE__

Salvage di un file audio

Il comando sndfile-salvage è semplicemente un fix per correggere file audio di dimensione superiuore i 4Gb. In particolare corregge l’header del file, che alcuni software di produzione scrivono male, rendendoli non utilizzabili. Non avendoci file audio di dimensione superiore ai 4Gb, preferisco fermarmi qui, al momento.

Riferimenti Utili.

OpenBSD Songs | Succede –non sempre– che ad una versione di OpenBSD venga prodotta una canzone, da musicisti che utilizzano questo meraviglio sistema operativo.

Top Ten Song OpenBSD | Le canzoni più apprezzate per OpenBSD.

https://sndio.org | homepage del progetto, dove trovare sorgenti impacchettati, una descrizione di tale software e la documentazione prodotta quando fu presentato la prima volta alla comunità, ad una delle conferenze annuali, dedicate ai sistemi BSD.

https://en.wikipedia.org/wiki/Sndio | pagina wikipedia (EN) dedicata ad sndio.

ffmpeg | Fronend a linea di comando per la Gestione formati audio – homepage di progetto.

libsndfile | Libreria C + collezione comandi per Gestione formati audio (GNU GPL)