OpenBSD | Audio

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, quindi per poter supportare anche altri formati ed avere una suite estesa di comandi per la loro gestione, ho preferito installare due pacchetti extra: ffmpeg e libsndfile

L’installazione di questi due software è Opzionale, per riprodurre e registrare file audio wav, ma consigliato o necessario per estendere le funzioni di gestione. L’installazione l’ho eseguita coi comando

arcadia$ doas pkg_add ffmpeg
arcadia$ doas pkg_add libsndfile

Per avviare una registrazione con il comando aucat, basta eseguire il seguente comando

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


Interrompere la registrazione con ^C

Per eseguire la restrazione con ffmpeg

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

Interrompere la registrazione anche stavolta con ^C

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 per memorizzarci la registrazione audio. Entrambi i comandi considerano l’estensione utilizzata per determinare il formato.

Di seguito i file audio prodotti

Riprodurre un file audio

Per riprodurre il file audio appena prodotto possiamo, come precedentemente detto, utilizzare il comando sempre il comando aucat, ma esiste già preistallato sndfile-play. Inoltre, nel mio caso specifico ho anche l’ffplay del pacchetto ffmpeg. Proverò a riprodurre il medesimo file con tutti gli strumenti che ho a disposizione

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

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)

Utlity SNDFile

Con sndiod ed sndctl, abbiamo come parte integrante di OpenBSD anche una serie di utility a suporto, tra queste sndfile-play. L’elenco però è molto piu’ amplio ed include :

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

__DA_COMPLETARE__

Suonare un file audio

Del comandi aucat ed sndfile-play inclusi nella distribuzione base di OpenBSD 7.8, ne abbiamo parlato durante questo la perlustrazione di questo appunto, quindi non occorre ripetersi : – ). Abbiamo utilizzato inoltre anche il player ffplay incluso nel pacchetto extra –da installare a parte– ffmpeg.

Interleave e Deinterleave di file audio

__DA_COMPLETARE__

Salvage di un file audio

__DA_COMPLETARE__

Riferimenti Utili.

Top Ten Song OpenBSD | Succede –non sempre– che ad una versione di OpenBSD venga prodotto una canzone dai musicisti che utilizzano questo meraviglio sistema operativo. Tutti i pezzi prodotti fino a questo momento son disponibili sul sito ufficiale di progetto, in una sezione apposita. A questo URL trovate le canzoni che la comunità apprezza di più.

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 | homepage di progetto.

libsndfile | libreria C per leggere e scrivere file audio, sotto licenza GNU GPL.