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.
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 :
| Comando | Descrizione |
|---|---|
| sndfile-cmp | Comparazione di 2 o file audio |
| sndfile-concat | Concatena 2 o piu’ file audio |
| sndfile-convert | Converte un file audio da un formato ad un altro |
| sndfile-deinterleave | Separa un file audio in piu’ file audio |
| sndfile-info | Restituisce le informazioni di un file audio |
| sndfile-interleave | Accorta 2 o file file audio in un’unico risultato |
| sndfile-metadata-get | Restituisce i metadati di un file audio |
| sndfile-metadata-set | Valorizza i metadati di un file di audio |
| sndfile-play | Riproduce un file audio |
| sndfile-salvage | Se 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 :
| estensione | formato |
|---|---|
| wav | WAV (Microsoft *merda*) |
| aif | AIFF (Apple/SGI) |
| au | AU (Sun/NeXT) |
| snd | AU (Sun/NeXT) |
| raw | RAW (header-less) |
| gsm | RAW (header-less) |
| vox | RAW (header-less) |
| paf | PAF (Ensoniq PARIS, big-endian) |
| fap | PAF (Ensoniq PARIS, little-endian) |
| svx | IFF (Amiga IFF/SVX8/SV16) |
| nist | SPHERE (NIST SPeech HEader Resources) |
| sph | SPHERE (NIST SPeech HEader Resources) |
| voc | VOC (Creative Labs) |
| ircam | SF (Berkeley/IRCAM/CARL) |
| sf | SF (Berkeley/IRCAM/CARL) |
| w64 | W64 (SoundFoundry WAVE 64) |
| mat | MAT4 (GNU Octave 2.0 / Matlab 4.2) |
| mat4 | MAT4 (GNU Octave 2.0 / Matlab 4.2) |
| mat5 | MAT4 (GNU Octave 2.1 / Matlab 5.0) |
| pvf | PVF (Portable Voice Format) |
| xi | XI (FastTracker 2) |
| htk | HTK (HMM Tool Kit) |
| sds | SDS (Midi Sample Dump Standard) |
| avr | AVR (Audio Visual Research) |
| wavex | WAVEX (MS WAVE with WAVEFORMATEX) |
| sd2 | SD2 (Sound Designer II) |
| flac | FLAC (FLAC Lossless Andio Codec) |
| caf | CAF (Apple Core Audio File) |
| wve | WVE (Psion Series 3) |
| prc | WVE (Psion Series 3) |
| ogg | OGG (OGG Container format) |
| oga | OGG (OGG Container format) |
| mpc | MPC (Akai MPC 2k) |
| rf64 | RF64 (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
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
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.