Comunicazioni audio sicure ed in alta fedeltà tramite comuni tools Linux
by admin on Dec.18, 2009, under Hacking, Linux, Sicurezza, Tools, VoIP
Aplay e Arecord sono rispettivamente un player e un recorder per il sistema audio ALSA (open source), e largamente disponibili su qualsiasi piattaforma linux.
Come esecutori e registratori audio sono decisamente messi in minoranza dai vari stupendi tool grafici.
Ebbene, cosa ci possiamo fare di interessante?
Beh, ad esempio, iniziando da arecord, possiamo registrare dell’ audio utilizzando una sorgente, dopo averla selezionata tramite alsamixer.
L’utilizzo è molto semplice:
arecord -help ci elenca tutte le opzioni disponibili:
# arecord -help
Usage: arecord [OPTION]… [FILE]…
-h, --help help
--version print current version
-l, --list-devices list all soundcards and digital audio devices
-L, --list-pcms list device names
-D, --device=NAME select PCM by name
-q, --quiet quiet mode
-t, --file-type TYPE file type (voc, wav, raw or au)
-c, --channels=# channels
-f, --format=FORMAT sample format (case insensitive)
-r, --rate=# sample rate
[...]
The availabled format shortcuts are:
-f cd (16 bit little endian, 44100, stereo)
-f cdr (16 bit big endian, 44100, stereo)
-f dat (16 bit little endian, 48000, stereo)
arecord lanciato senza nessuna opzione apre il device audio di input e scrive sullo standard output i dati da esso prelevati, ovvero lo stream audio, nel formato di default.
utente-locale@macchina-locale:~$ arecord
Recording WAVE 'stdin' : Unsigned 8 bit, Rate 8000 Hz, Mono
[segue una sfilza di caratteri illeggibili]
Se vogliamo che lo stream audio vada su file piuttosto che su standard output, basta scrivere
utente-locale@macchina-locale:~$ arecord -d 10 miofile.wav
arecord produrrà il file “miofile.wav”, della durata di 10 secondi (-d 10).
aplay, il programma complementare di arecord, serve a riprodurre file audio e, in pieno spirito Unix, se lanciato senza parametri, legge i dati audio dal suo standard input.
# aplay -help
Usage: aplay [OPTION]… [FILE]…
-h, --help help
--version print current version
-l, --list-devices list all soundcards and digital audio devices
-L, --list-pcms list device names
-D, --device=NAME select PCM by name
-q, --quiet quiet mode
[..]
The availabled format shortcuts are:
-f cd (16 bit little endian, 44100, stereo)
-f cdr (16 bit big endian, 44100, stereo)
-f dat (16 bit little endian, 48000, stereo)
Fin qui abbiamo semplicemente descritto due tool a linea di comando in grado di riprodurre e registrare file audio.
Basta una cuffia con microfono per cominciare a sperimentare.
Il nostro primo test sarà quello di ascoltare con aplay lo stream audio catturato localmente da arecord.
utente-locale@macchina-locale:~$ arecord | aplay
Recording WAVE 'stdin' : Unsigned 8 bit, Rate 8000 Hz, Mono
Playing WAVE 'stdin' : Unsigned 8 bit, Rate 8000 Hz, Mono
Se il mixer è configurato bene, dovremmo poter ascoltare in cuffia quanto catturato dal microfono, con un piccolo ritardo.
Se la qualità audo non dovesse apparirci soddisfacente, potremmo provare ad aumentare la frequenza di campionamento e portare la dimensione dei campioni da 8 a 16 bit.
utente-locale@macchina-locale:~$ arecord -fS16_LE -r44100 -traw -c1 | aplay -fS16_LE -r44100 -traw -c1
Recording raw data 'stdin' : Signed 16 bit Little Endian, Rate 44100 Hz, Mono
Playing raw data 'stdin' : Signed 16 bit Little Endian, Rate 44100 Hz, Mono
In questo modo sono stati selezionati un canale (-c1), una frequenza di campionamento di 44100 Hertz (-r44100) e la dimensione del singolo campione a 16 bit, nel formato Little Endian (-fS16_LE).
Con il comando arecord | aplay è stata creata una pipe che mette in collegamento lo standard output del primo programma con lo standard input del secondo.
Per cui il secondo programma (aplay) legge i dati dal primo (arecord), ovvero il segnale audio che esce dal microfono viene prelevato tramite arecord e reimmesso nelle cuffie ( o negli altoparlanti) tramite aplay.
Volendo è poi possibile eseguire arecord su un computer e aplay su un altro, ovvero ascoltare quanto catturato da arecord su un altro computer, utilizzando come mezzo trasmissivo la rete.
Attuare tutto ciò è piuttosto semplice, basta usare ssh.
Tramite ssh è possibile infatti lanciare comandi su una macchina remota.
Quindi semplicemente lanciando:
utente-locale@macchina-locale:~$ ssh [utente remoto@]
sulla macchina locale potremo “ascoltere” quanto campionato sulla macchina remota.
Come visto in precedenza per il test in locale, la qualità dell’audio catturato potrebbe venire ulteriormente migliorata:
utente-locale@macchina-locale:~$ ssh [utente remoto@]
Se la banda a disposizione fosse scarsa, si potrebbe comunque fare in modo che in rete viaggi uno stream audio compresso:
utente-locale@macchina-locale:~$ ssh [utente remoto@]
Con quest’ultimo comando, sulla macchina remota l’audio viene campionato e poi compresso in formato ogg tramite sox, il risultato viene quindi emesso sullo standard output, (che quindi viaggia in rete, dato il comando è stato lanciato tramite ssh sulla macchina remota), verso la macchina locale dove viene effettuata l’operazione inversa, cioè la decodifica da formato ogg a formato raw, adatto per essere riprodotto da aplay.
E’ abbastanza evidente che utilizzando questa tecnica simmetricamente, si può facilmente stabilire una comunicazione audio di alta qualità e ad alto livello di sicurezza tra due computer remoti, una sorta di artigianale ma efficiente VoIP.


