30.5 Concetti generali su audio e sui formati audio digitali
.cdservrc
30.6.6
.disc-coverrc
30.8.1
.libao
30.13.4
.xloadimage
30.4.2.5
.XPaintrc
30.4.3
/etc/sane.d/
30.3.3
animate
30.4.5.3
audio
30.10.4
cdsound-recorder
30.10.6
convert
30.4.5.1
disc-cover
30.8.1
disc-cover.conf
30.8.1
display
30.4.5.6
dsp
30.10.4
gtcd
30.6.2
gtk-recordmydesktop
30.17
import
30.4.5.5
inetd.conf
30.3.3
jpeg2yuv
30.18.2.1
libao.conf
30.13.4
listen
30.14.1.2
midge 30.12.2
midi2mg
30.12.2
mogrify
30.4.5.2
montage
30.4.5.4
mpeg2enc
30.18.2.3
mplayer
30.16
mplex
30.18.2.4
ogg123
30.13.4
oggdec
30.13.4
oggenc
30.13.4
ogginfo
30.13.4
pcmC0D0c
30.10.4
pcmC0D0p
30.10.4
play-sample
30.10.6
png2yuv
30.18.2.1
recordmydesktop
30.17
scanimage
30.3.8
services
30.3.3
shout
30.14.1.1
sound-recorder
30.10.6
tcd
30.6.2
vlc
30.16
vorbiscomment
30.13.4
xgrab
30.4.1.3
Xloadimage
30.4.2.5
xpaint
30.4.3
xwd
30.4.1.1
xwud
30.4.1.2
yuvplay
30.18.2.2
~/.cddb/
30.6.6
Generalmente, con il termine di «file multimediale», si tende a pensare a un file che contenga informazioni audio-visuali, anche se di per sé, il significato del termine non si limita a questi casi. In pratica, i file con cui si ha a che fare sono sempre meno specializzati e la tendenza è quella di avere formati e contenitori generici per ogni tipo di informazione, dove l'utente medio non abbia la necessità di distinguere tra file di testo scritto, fogli elettronici, presentazioni, filmati e altro, in quanto tutto sia integrabile in uno o pochi formati (esteriori) alternativi.
Per tradizione, i nomi dei file seguono la regola per cui l'estensione del nome serve a determinare il tipo del contenuto. Tuttavia, questa pratica è insufficiente e inattendibile, pertanto, i file con cui l'utente medio ha a che fare quotidianamente, contengono informazioni aggiuntive rispetto a quelle apparenti, le quali servono principalmente per automatizzarne la procedura di riconoscimento.
Sono pochi i file che non dispongono di tali informazioni; a questi tipi si fa riferimento generalmente con il termine di «formato grezzo». Tra tutti, il formato «grezzo» più importante è il testo puro, ma capita di utilizzare anche formati grezzi per rappresentare immagini, audio e video. In ogni caso, per accedere a tali dati, occorre conoscerne esattamente le caratteristiche, perché i programmi non possono stimarle (per esempio, nel caso del testo puro, bisogna conoscere la codifica, perché questa informazione non è determinabile, se si tralascia l'ipotesi di un'analisi statistica). |
Quando non si tratta di formati di file grezzi, si utilizza normalmente una sigla di riconoscimento, nota nei sistemi Unix come magic number, collocata in una posizione prestabilita, di solito all'inizio del file. Con questa sigla si determina il tipo di file con cui si ha a che fare. È così che funziona il programma file che comunque nei sistemi GNU non si limita all'analisi del solo magic number:
$
file xxx.*
[Enter]
xxx.jpg: JPEG image data, JFIF standard 1.01 xxx.html: HTML document text xxx.midi: Standard MIDI data (format 1) using 2 tracks at 1/384 |
A titolo di esempio, un file JPG, contiene la sigla «JFIF» tra il settimo e il decimo byte; nello stesso modo, un file PNG contiene la sigla «PNG», tra il secondo e il quarto byte. Nelle figure successive vengono mostrati alcuni esempi; si tenga conto che ogni carattere rappresentato individua esattamente un byte.
......JFIF...................................... C................................... $.' ",#..(7 ... ... |
.PNG........IHDR...^...U........E....bKGD....... .......pHYs.................tIME.....$...QG....t ... ... |
GIF89a^.U..P...........................". ..% . ."."!".&&&/-2)0)/400-/1+212.665:A9?C@B;BAA?FFFJQ ... ... |
%PDF-1.4 ... ... |
PK........5.o5................LogicSim/UT...&E[E ... ... |
Quando un formato di file prevede l'inserimento di informazioni aggiuntive, spesso queste trovano posto all'interno di intestazioni, ovvero nella parte iniziale del file. Per esempio, un file HTML divide il proprio contenuto proprio tra gli elementi HEAD e BODY, dove nel primo trovano posto tante informazioni che non vengono visualizzate in condizioni normali.
Il mettere le informazioni sul contenuto del file nella parte iniziale consente ai programmi che si interessano di accedere a queste di leggere velocemente solo quella porzione, quando le condizioni particolari di accesso al file consentono esclusivamente una lettura sequenziale. |
......JFIF..............Created with The GIMP... C................................... $.' ",#..(7 ),01444.'9=82<.342...C...........2!.!22222222222 ... ... |
Succede spesso che i formati di certi file siano stati progettati poco prudentemente, senza pensare alla necessità di aggiungere certe informazioni particolari. In quei casi, se le informazioni iniziali di questi file consentono comunque di determinare la collocazione dei contenuti previsti originariamente, capita che vengano definite delle estensioni, per le quali si aggiungono delle informazioni in coda al formato preesistente, come se si trattasse di etichette appiccicate.
Questa tecnica, quando viene usata, serve a consentire la lettura e l'interpretazione di questi file anche a programmi che non possono essere a conoscenza di nuove estensioni del formato, pur rimanendo la possibilità che in alcuni casi si manifestino dei problemi di compatibilità.
A volte, i formati dei file non rappresentano il modo in cui le informazioni salienti di questi sono state codificate, ma solo la forma esteriore di contenerli. Ciò succede normalmente con i formati audio-visuali, dove un certo contenitore esterno può avvolgere formati video e audio abbastanza differenti.
A titolo di esempio, il formato Ogg è un contenitore progettato per dati audio-visuali e testuali, secondo varie codifiche. Spesso viene usato per contenere solo sequenze audio in formato Vorbis, ma non si limita necessariamente a questo.
Exif sta per Exchangeable image file format e definisce uno standard per l'introduzione di informazioni addizionali in alcuni formati di immagini digitali. Lo scopo principale è quello di consentire alle macchine fotografiche di annotare automaticamente tutte le informazioni salienti sullo scatto che si esegue.
|
La sigla ID3 individua lo standard per l'inserimento di informazioni addizionali nei file audio MP3. Attraverso l'uso di «etichette» (tag) ID3 è possibile incorporare nei file le informazioni sull'autore, il titolo e altri dati affini.
|
Exiftool(1) è un modulo Perl che consente di scrivere programmi che accedono alle informazioni contenute nei file multimediali. Assieme al modulo si trova anche un programma Perl che ne fa uso: exiftool. A questo programma si fa riferimento in queste sezioni.
L'utilizzo più semplice del programma consiste nel visualizzare tutte le informazioni disponibili su uno o più file, come nell'esempio seguente:
$
exiftool mio_file.mp3
[Enter]
Ecco cosa si potrebbe leggere:
ExifTool Version Number : 6.57 File Name : mio_file.mp3 File Size : 5 MB File Modification Date/Time : 2003:11:05 17:28:09 File Type : MP3 MIME Type : audio/mpeg MPEG Audio Version : 1 Audio Layer : 3 Audio Bitrate : 128000 Sample Rate : 44100 Channel Mode : Stereo MS Stereo : Off Intensity Stereo : Off Copyright Flag : False Original Media : False Emphasis : None Encoded By : www.brot.dg Track : 1 Length : 296 sec Title : La mia ninna nanna Artist : Me medesimo Album : Le mie canzoncine Year : 2003 Comment : wow Genre : Classical Duration : 0:04:57.07 (approx) |
Si osservi che Exiftool è utile anche per file il cui contenuto non è strettamente «audio-visuale», come nell'esempio seguente, dove, attraverso il programma exiftool, viene scandito un file PostScript:
$
exiftool mio_file.ps
[Enter]
ExifTool Version Number : 6.57 File Name : mio_file.ps File Size : 41 kB File Modification Date/Time : 2007:01:26 08:14:40 File Type : PS MIME Type : application/postscript Bounding Box : 0 0 595 842 Creator : OpenOffice.org 2.0 For : daniele Create Date : Thu Nov 30 12:35:51 2006 Title : FOGLIO-PAGA-blank.ods Pages : 1 Image Height : 842 Image Width : 595 Image Size : 595x842 |
Le informazioni a cui Exiftool consente di accedere appartengono a degli standard, i quali specificano a loro volta i campi particolari (ovvero le etichette, o tag) che possono essere contenuti. Con il programma exiftool, per fare riferimento a un certo campo, lo si può indicare nella forma seguente:
[standard:]campo |
Come si vede dal modello, il nome che individua lo standard a cui fa riferimento il campo di proprio interesse, può essere omesso, se il contesto non crea ambiguità. Quando in particolare si vuole fare riferimento a tutti i campi di un certo standard, si usa la parola chiave all:
[standard:]all |
Nella riga di comando di exiftool è possibile richiedere l'intervento su uno o più campi con l'opzione seguente:
-[standard:]campo |
Al contrario, per escludere l'intervento su un certo campo si usa la stessa opzione, ma con un doppio trattino iniziale:
--[standard:]campo |
Segue un elenco di esempi nell'uso di tali opzioni:
-all fa riferimento a tutti i campi, qualunque sia lo standard che interessa il file su cui si interviene;
-copyright fa riferimento al campo copyright, ammesso che sia previsto nello standard di informazioni contenute nel file su cui si interviene;
-exif:all fa riferimento a tutti i campi dello standard EXIF;
-id3:all fa riferimento a tutti i campi dello standard ID3;
-exif:software fa riferimento al campo software dello standard EXIF;
I nomi dei campi, quando si inseriscono in questa opzione della riga di comando, vanno indicati senza spazi. Per esempio, per accedere al campo Thumbnail Length, si usa la parola chiave thumbnaillength.
L'opzione che specifica il tipo di informazione a cui si vuole fare riferimento può essere estesa in modo da ottenere la modifica della stessa, purché il programma exiftool sia effettivamente in grado di farlo (in quanto non tutti i campi a cui può avere accesso sono effettivamente modificabili dal programma).
-[standard:]campo=[valore] |
Per esempio, per mettere o cambiare il valore del campo Software in un'immagine JPG contenente informazioni EXIF, basta l'opzione -exif:software="stringa" (oppure solo -software="stringa" se non è necessario specificare il contesto dello standard di riferimento). La dimostrazione seguente mostra proprio questa situazione:
$
exiftool -exif:software mio_file.jpg
[Enter]
Software : Pinco Pallino software |
$
exiftool -exif:software="Super pinco" mio_file.jpg
[Enter]
1 image files updated |
$
exiftool -software mio_file.jpg
[Enter]
Software : Super pinco |
Bisogna osservare che le informazioni gestite dai vari sistemi di etichettatura possono essere di tipo diverso; pertanto, anche se il programma exiftool le mostra in un certo modo comprensibile a livello umano, può darsi che la modifica non sia altrettanto facile, perché il dato va convertito. Per esempio, non si può pretendere di cambiare il campo Compression delle informazioni EXIF con una stringa qualunque.
Per rimuovere il contenuto di un campo è sufficiente non assegnarvi alcunché, come nell'esempio seguente, dove si vuole omettere l'indicazione del software:
$
exiftool -exif:software= mio_file.jpg
[Enter]
1 image files updated |
|
SANE (Scanner access now easy) è un API (Application program interface), ovvero un'interfaccia uniforme per le applicazioni che vogliono comunicare con uno scanner. Oltre a questa API, SANE include una serie di gestori specifici (driver) per una grande quantità di scanner, costituiti da librerie caricate dinamicamente.
Quando si parla di SANE, dal momento che non si tratta di un programma puro e semplice, ma di un sistema di componenti integrati tra di loro, può essere necessario distinguere tra:
il progetto della API e del protocollo di comunicazione,(4) ovvero dell'interfaccia di comunicazione;
le librerie di gestione dei vari scanner, individuate normalmente come il backend,(5) ovvero la parte terminale di SANE;
i programmi frontali, ovvero frontend, che consentono in pratica all'utente di gestire la scansione.
Qui vengono presi in considerazione principalmente gli scanner USB, mentre per le altre situazioni ci sono solo delle annotazioni superficiali. Per maggiori dettagli conviene leggere la documentazione annotata alla fine del capitolo.
In questa sezione si fa riferimento anche a scanner raggiunti attraverso la rete. Evidentemente, per comprendere questo meccanismo occorre avere delle competenze sulle reti TCP/IP e su come si configurano queste cose in un sistema Unix comune. Si veda eventualmente il capitolo 32 e i successivi.
Lo scanner comune prevede un sistema meccanico per bloccare il gruppo ottico di scansione, quando questo deve essere trasportato. Questo blocco meccanico è costituito normalmente da una levetta, da una slitta, o da qualcosa di simile. Il problema è che spesso ci si dimentica di sbloccare lo scanner prima di usarlo, cosa che ovviamente impedisce di attuare le scansioni.
Quando si pensa a SANE bisogna dare una collocazione ai vari componenti, anche se in modo semplificato, per poter comprendere cosa si sta facendo e dove cercare i problemi quando questi si manifestano.
Nella figura si vede la nuvoletta delle librerie che costituiscono la parte terminale di SANE, che va a comunicare effettivamente con lo scanner. Queste librerie vengono gestite da un sistema dinamico di caricamento (sane-dll), con il quale comunicano i programmi frontali, come scanimage e come saned; dove saned si occupa in particolare di offrire attraverso la rete l'accesso allo scanner locale.
La configurazione di SANE riguarda principalmente il sistema di librerie di accesso allo scanner e si trova normalmente nella directory /etc/sane.d/
. Dentro questa directory appaiono normalmente una serie di file con estensione .conf
, dove la radice del nome corrisponde alla libreria particolare da prendere in considerazione. Per esempio, il file hp.conf
si riferisce a un certo gruppo di scanner HP.
Oltre ai file di configurazione di una certa libreria specifica, appare sempre il file dll.conf
, che riguarda la gestione complessiva di queste librerie (dynamic backend loader). Questo file consente di specificare quali librerie utilizzare e quali ignorare del tutto. Ecco un esempio che contiene un estratto del file:
|
Per quanto riguarda la possibilità di offrire l'accesso allo scanner locale attraverso la rete, occorre verificare che il file /etc/services
contenga un riferimento appropriato alla porta 6566 TCP:
|
Inoltre occorre verificare che il supervisore dei servizi di rete sia stato configurato in modo da avviare saned quando viene richiesta quella porta. Nel caso particolare di Inetd, si tratta di intervenire nel file /etc/inetd.conf
con una riga simile a quella seguente:
|
Si osservi che l'avvio del programma saned con i privilegi dell'utente fittizio saned, associato al gruppo saned, come si vede nell'esempio, non è necessariamente corretto. Questo problema viene descritto meglio in un'altra sezione. |
Quindi occorre valutare la configurazione del programma saned, con il file /etc/sane.d/saned.conf
:
|
L'esempio mostra l'abilitazione dell'accesso da tutti gli indirizzi IPv4 privati, compreso quello locale, dell'indirizzo IPv6 loopback e di tutti gli indirizzi IPv6 di tipo site-local.
Per poter accedere a uno scanner remoto messo a disposizione tramite il programma saned, occorre predisporre localmente il file /etc/sane.d/net.conf
con l'indirizzo o il nome dell'elaboratore che ospita questo servizio:
|
Secondo questo esempio si prevede di poter accedere a uno scanner presso l'elaboratore con indirizzo IPv4 192.168.1.2.
Quando l'utilizzo di SANE è già predisposto dalla propria distribuzione GNU o BSD, dovrebbe essere stato previsto il gruppo di utenti denominato scanner, con il quale si potrebbe controllare l'accesso allo scanner stesso. Basta controllare nel file /etc/group
:
|
Quello che si vede nell'esempio è la situazione che si trova con NLNX, dove gli utenti tizio, caio, sempronio, mevio e filano risultano aggregati a questo gruppo.
Generalmente, l'utilità di questa procedura serve a dare i permessi adatti ai file di dispositivo; tuttavia, tale meccanismo dovrebbe funziona anche con gli scanner USB quando si utilizza Libusb.
Se però si accede attraverso la rete, i permessi di accesso ai file di dispositivo perdono di significato, in quanto si comunica direttamente con il servente saned. In pratica, per consentire l'accesso allo scanner per tutti gli utenti, conviene attivare l'accesso tramite la rete, magari anche solo localmente.
Per poter usare uno scanner attraverso uno dei vari programmi frontali bisogna poterlo individuare. Per fare questo si usa una stringa piuttosto articolata, che ha fondamentalmente la sintassi seguente:
nome_backend:dispositivo |
In pratica, prima dei due punti va messo un nome scelto tra quelli che appaiono nel file di configurazione /etc/sane.d/dll.conf
; si osservi però che la scelta non è sempre ovvia. Nella seconda parte, dopo i primi due punti verticali, si indica ciò che serve a raggiungere il dispositivo, ma questa può essere piuttosto articolata. A titolo di esempio ecco come potrebbe essere individuato uno scanner Canon, Canoscan LiDE 20: plustek:libusb:001:002.
Come si comprende, in questo caso il nome associato al tipo di scanner è «plustek» e non «canon» come sarebbe stato logico aspettarsi.
Fortunatamente vengono in aiuto due metodi per cercare di localizzare lo scanner presso il proprio elaboratore: il programma diagnostico sane-find-scanner e il programma frontale scanimage usato con l'opzione -L. Le prime volte conviene agire come utente root:
#
sane-find-scanner
[Invio]
# No SCSI scanners found. If you expected something # different, make sure that you have loaded a SCSI driver # for your SCSI adapter. found USB scanner (vendor=0x04a9 [Canon], product=0x220d \ |
#
scanimage -L
[Invio]
device `plustek:libusb:001:002' is a Canon \ |
Dei due programmi, il più attendibile è il primo, che però non specifica il nome da usare per lo scanner (nell'esempio è stata evidenziata l'informazione saliente, che però, in questo caso manca del prefisso plustek:).
Quando si dispone di un solo scanner locale e tutto va bene, come dagli esempi mostrati, si possono usare i vari programmi frontali senza bisogno di specificare le coordinate dello scanner. |
Non è da escludere che sane-find-scanner possa trovare uno scanner che scanimage -L invece non può localizzare.
Il lavoro sul progetto SANE dispone di una discreta quantità di librerie per l'accesso a vari tipi e modelli di scanner. Tuttavia, esistono anche delle librerie imperfette per l'accesso ad altri scanner che altrimenti sarebbero inutilizzabili con SANE. Quando si vuole utilizzare uno scanner per il quale servono queste librerie aggiuntive, è molto probabile che il programma sane-find-scanner o che scanimage -L diano informazioni errate o che non trovino proprio lo scanner. |
L'esempio seguente è ottenuto collegando due scanner; uno dei quali è il modello HP Scanjet 4200C, a cui si accede con librerie non standard:
#
sane-find-scanner
[Invio]
# No SCSI scanners found. If you expected something # different, make sure that you have loaded a SCSI driver # for your SCSI adapter. found USB scanner (vendor=0x03f0, product=0x0105) at \ |
#
scanimage -L
[Invio]
device `plustek:libusb:001:002' is a Canon \ |
Dall'esempio risulta chiaro che scanimage -L non vede lo scanner HP Scanjet 4200C. In questo caso particolare, dalla documentazione originale relativa alla libreria che si occupa di questo scanner, si capisce che le coordinate corrette per individuarlo sono hp4200:libusb:001:003.
Una volta verificato che è possibile raggiungere uno scanner locale utilizzando l'utenza privilegiata root, è necessario stabilire se sia possibile farlo anche con dei privilegi «normali». Da quanto già visto in precedenza, gli utenti associati al gruppo scanner (o ad altro gruppo analogo se il proprio sistema operativo è organizzato diversamente) dovrebbero avere accesso. Si può fare una verifica, ma per questo occorre un utente a cui sia associato esattamente questo gruppo, magari si può creare proprio un utente fittizio con lo stesso nome nel file /etc/passwd
:
|
Questo esempio è coerente con un altro esempio mostrato a proposito del file /etc/group
, dove il numero GID 106 corrisponde proprio al gruppo scanner.
Per fare la prova, si usa su per acquisire i privilegi di questo utente fittizio, quindi si tenta di usare scanimage:
#
su -s /bin/sh - scanner
[Invio]
$
scanimage -L
[Invio]
Se si ottiene lo stesso elenco che si otterrebbe con i privilegi dell'utente root, si accerta così che l'utente scanner, appartenente al gruppo scanner può accedere.
Se non funziona occorre risalire ai file che vengono utilizzati: possono essere file di dispositivo o file contenuti all'interno di /proc/bus/usb/
; lì occorre verificare qual è il gruppo e quali permessi ha il gruppo.
In precedenza è stata mostrata la configurazione relativa al supervisore dei servizi di rete per il controllo del programma saned, che ha lo scopo di offrire l'accesso allo scanner attraverso la rete. In un esempio si vede che il programma verrebbe avviato con i privilegi dell'utente fittizio saned, associato al gruppo saned:
|
Per sapere se saned può accedere realmente allo scanner locale, si può fare lo stesso tipo di prova:
#
su -s /bin/sh - saned
[Invio]
$
scanimage -L
[Invio]
Probabilmente, se ha funzionato l'accesso come utente e gruppo scanner, non funziona in questo altro modo; pertanto conviene ritoccare la configurazione del supervisore dei servizi di rete nel modo più appropriato; per esempio così:
|
Per raggiungere uno scanner disponibile attraverso la rete, presso un elaboratore in cui è stato configurato saned, come già descritto in queste sezioni, occorre indicare una stringa simile a quanto già descritto a proposito dell'accesso agli scanner locali:
net:nodo:nome_backend_remoto:dispositivo_remoto |
Per esempio, lo scanner Canon già descritto in precedenza, potrebbe essere raggiunto presso l'elaboratore all'indirizzo IPv4 192.168.1.2 con la stringa seguente:
net:192.168.1.2:plustek:libusb:001:002 |
Tuttavia, bisogna ricordare di configurare presso l'elaboratore remoto il file /etc/sane.d/saned.conf
e il file appropriato per il supervisore dei servizi di rete (di solito /etc/inetd.conf
); inoltre, localmente occorre compilare il file /etc/sane.d/net.conf
con l'elenco dei nodi di rete remoti che consentono l'accesso allo scanner:
|
Naturalmente, nel file /etc/sane.d/net.conf
si possono indicare gli elaboratori anche per nome, purché il sistema operativo sia in grado di tradurre correttamente tali nomi in indirizzi IP.
Nel caso sia necessario utilizzare indirizzi IPv6, questi vanno indicati racchiudendoli tra parentesi quadre, come già mostrato a proposito del file |
Una volta predisposto tutto correttamente, quando di esegue il comando scanimage -L si ottiene l'elenco completo degli scanner locali e di quelli remoti previsti, purché accessibili effettivamente:
$
scanimage -L
[Invio]
device `net:192.168.1.2:plustek:libusb:001:002' is a \ |
Si osservi che se si vuole consentire l'accesso allo scanner locale a tutti gli utenti, senza bisogno di associare gli utenti a un gruppo particolare, si può predisporre il demone saned con la configurazione necessaria e il file /etc/sane.d/net.conf
con il nome o l'indirizzo dell'elaboratore locale:
|
L'accesso a uno scanner remoto potrebbe essere limitato ad alcuni utenti che devono fornire una parola d'ordine, attraverso la configurazione del file |
Quando si cerca di contattare uno scanner remoto, può capitare di non riuscirci, anche se apparentemente è tutto a posto. Per scoprire cosa succede, si possono fare due verifiche: una dal lato cliente, ovvero dalla parte di scanimage; una dal lato servente, ovvero dalla parte di saned. Per cominciare si può avviare scanimage predisponendo una variabile di ambiente appropriata; in un colpo solo si può usare questo comando:
$
SANE_DEBUG_NET=128 scanimage -L
[Invio]
Ecco cosa si potrebbe ottenere dallo standard error quando tutto va bene:
[sanei_debug] Setting debug level of net to 128. [net] sane_init: authorize = 0x8049280, \ |
Se invece le cose vanno male e la controparte non risponde, si può provare dal lato servente, avviando saned al di fuori del controllo del supervisore dei servizi di rete (bisogna modificare temporaneamente la configurazione del supervisore dei servizi di rete in modo che non intercetti le chiamate alla porta 6 566):
#
su -s /bin/sh - scanner
[Invio]
$
saned -d128
[Invio]
In questo modo, saned resta in ascolto per una sola chiamata, alla quale risponde, quindi termina di funzionare. Ecco come potrebbe essere il risultato che si ottiene dallo standard error quando tutto va bene:
[saned] main: starting debug mode (level 128) [saned] main: trying to get port for service `sane' (getaddrinfo) [saned] main: [0] socket () using IPv6 [saned] main: [0] setsockopt () [saned] main: [0] bind () to port 6566 [saned] main: [0] listen () [saned] main: [1] socket () using IPv4 [saned] main: [1] setsockopt () [saned] main: [1] bind () to port 6566 [saned] main: [1] bind failed: Address already in use [saned] main: waiting for control connection [saned] saned (AF-indep+IPv6) from sane-backends 1.0.14 ready [saned] check_host: detected an IPv4-mapped address [saned] check_host: access by remote host: ::ffff:192.168.1.1 [saned] check_host: remote host is not IN_LOOPBACK nor IN6_LOOPBACK [saned] check_host: local hostname: nanohost [saned] check_host: local hostname(s) (from DNS): 127.0.0.1 [saned] check_host: local hostname(s) (from DNS): 127.0.0.1 [saned] check_host: local hostname(s) (from DNS): 127.0.0.1 [saned] check_host: remote host doesn't have same addr as local [saned] check_host: opening config file: /etc/hosts.equiv [saned] check_host: can't open config file: /etc/hosts.equiv \ |
Il programma scanimage (6) è il programma frontale più importante per l'utilizzo dello scanner attraverso SANE:
scanimage [opzioni_generali] [opzioni_dello_scanner] |
Il programma prevede un gruppo di opzioni generali e un altro gruppo di opzioni particolari che dipende dalle caratteristiche della libreria usata per comunicare con lo scanner. Si ottiene l'elenco di queste opzioni aggiuntive con l'ausilio dell'opzione -h.
|
La scansione di un'immagine attraverso scanimage viene ottenuta dallo standard output di questo. Segue la descrizione di alcuni esempi.
$
scanimage -L
[Invio]
Restituisce un elenco di scanner che possono essere individuati facilmente.
$
scanimage > copia.pnm
[Invio]
Esegue una scansione attraverso lo scanner predefinito (presumibilmente l'unico che venga individuato), usando opzioni predefinite, per generare il file copia.pnm
.
$
scanimage -d hp4200:libusb:001:003 > copia.pnm
[Invio]
Esegue una scansione attraverso lo scanner locale individuato dalla stringa hp4200:libusb:001:003, usando opzioni predefinite, per generare il file copia.pnm
.
$
scanimage -d net:192.168.1.2:hp4200:libusb:001:003
\
\ > copia.pnm
[Invio]
Esegue una scansione attraverso lo scanner di rete individuato dalla stringa net:192.168.1.2:hp4200:libusb:001:003, usando opzioni predefinite, per generare il file copia.pnm
. Evidentemente lo scanner in questione si trova presso l'elaboratore 192.168.1.2.
$
scanimage -h -d hp4200:libusb:001:003
[Invio]
Richiede le opzioni specifiche dello scanner locale individuato dalla stringa net:192.168.1.2:hp4200:libusb:001:003.
$
scanimage -d hp4200:libusb:001:003 --resolution 300
\
\ > copia.pnm
[Invio]
Esegue una scansione attraverso lo scanner locale individuato dalla stringa hp4200:libusb:001:003, a una risoluzione di 300 punti per pollice, per generare il file copia.pnm
.
Esiste una grande varietà di programmi frontali per SANE, che utilizzano la grafica X. Il primo di questi che vale la pena di conoscere è Xscanimage,(7) che, come suggerisce il nome, è il fratello grafico di scanimage, anche se non dispone delle stesse opzioni:
xscanimage [opzioni] [dispositivo] |
Come si vede dalla sintassi, l'indicazione della stringa dello scanner, se fornita, avviene alla fine della riga di comando, senza un'opzione che la introduca.
Xsane(8) è un altro programma, un po' più sofisticato, per il controllo della scansione delle immagini:
xsane [opzioni] [dispositivo] |
Il limite di alcuni programmi frontali per SANE sta nell'impossibilità di specificare espressamente l'uso di un certo scanner, cosa che diventa indispensabile quando il sistema di autorilevamento non funziona come dovrebbe. Molti programmi di disegno, come Gimp per fare un esempio, consentono l'acquisizione delle immagini da scanner, con l'ausilio di uno dei vari programmi frontali comuni; purtroppo, in questo modo è praticamente obbligatorio affidarsi al sistema di autorilevamento dello scanner.
SANE è accompagnato generalmente da una serie di pagine di manuale specifiche per ogni contesto. La tabella successiva riepiloga alcune di queste pagine; per avere l'elenco completo basta usare il comando:
$
apropos sane
[Invio]
|
La prima cosa che si desidera fare quando si dispone di un ambiente grafico, quale è X, è quella di poter disegnare ed elaborare immagini. I primi programmi realizzati per questo scopo, rimanendo nell'ambito del software libero, sono un po' strani e non uniformi tra loro per quanto riguarda il loro utilizzo. I programmi più recenti sono più pratici per l'utente medio, ma conviene comunque tenere conto anche di quelli più vecchi, che possono essere utili in situazioni particolari.
Per preparare documentazione tecnica su applicativi per X è indispensabile poter catturare delle immagini dallo schermo stesso. I programmi che permettono di fare questo potrebbero avere un limite nella profondità di colori delle immagini; in generale non dovrebbero esserci problemi quando si opera con una profondità di 8 bit (256 colori).
Il programma xwd(9) permette di catturare delle immagini dallo schermo di X. L'immagine ottenuta viene emessa attraverso lo standard output, di conseguenza, questo viene ridiretto quasi sempre, ovvero viene trattato attraverso un condotto. Quando il programma viene avviato, appare immediatamente un puntatore particolare e basta fare un clic sulla finestra che si intende catturare.
xwd [opzioni] |
|
$
xwd > pippo
[Invio]
Avvia xwd in modo da catturare un'immagine e di ottenere il file pippo
come risultato.
$
xwd -frame > pippo
[Invio]
Avvia xwd in modo da catturare una finestra completa di cornice. Come nell'esempio precedente, viene creato il file pippo
.
Il programma xwud(10) permette di visualizzare immagini generate con il programma xwd. L'immagine viene ottenuta dallo standard input e viene emessa in una finestra indipendente. L'utilità di xwud sta nella possibilità di controllare il contenuto dei file ottenuti con xwd prima di altri trattamenti eventuali.
xwud [opzioni] |
Segue la descrizione di alcuni esempi.
$
xwd | xwud -display roggen.brot.dg:0.0
[Invio]
Avvia xwd in modo da catturare un'immagine che poi passa a xwud per la visualizzazione su un elaboratore remoto.
$
xwd | tee pippo | xwud -display roggen.brot.dg:0.0
[Invio]
Avvia xwd in modo da catturare un'immagine che poi passa a tee, il quale la salva nel file pippo
e la passa anche a xwud per la visualizzazione sullo schermo locale (o comunque su quello predefinito).
Il programma xgrab,(11) attraverso xgrabsc, permette la cattura di immagini in modo relativamente semplice. In pratica, il programma che compie realmente il lavoro è xgrabsc, ma richiede l'uso di opzioni dettagliate, mentre xgrab funge da interfaccia frontale a questo. Il vantaggio fondamentale nell'usare xgrab invece di xwd sta nell'intervallo di tempo lasciato a disposizione dal momento in cui si conferma l'azione che si vuole compiere al momento in cui si deve selezionare la zona da catturare. Ciò consente, per esempio, di richiamare una finestra in primo piano o di fare qualche altra piccola operazione. Un'altra particolarità importante di questo programma sta nella possibilità di scegliere il formato del file di destinazione.
xgrab |
Il programma xgrab non è parte dei programmi di servizio standard di X, ma è comunque raggiungibile facilmente attraverso la rete.
Xloadimage(12) è un applicativo per la gestione di immagini, semplice ma efficace. Il nome suggerisce che possa servire per caricare e visualizzare delle immagini, ma in più permette di trasformare un'immagine in un formato differente e di modificare alcune regolazioni essenziali. Non si tratta di un sistema completo per la gestione e il ritocco di immagini, ma le funzioni che mette a disposizione sono molto importanti.
L'eseguibile xloadimage prevede due tipi di opzioni: globali e particolari. Le prime devono apparire nella prima parte degli argomenti della riga di comando, mentre le altre precedono l'indicazione dell'immagine a cui si riferiscono. Le opzioni particolari vanno quindi messe davanti al nome di ogni immagine che si intende trattare (sempre che ce ne sia bisogno). Eventualmente, è possibile fare in modo che xloadimage utilizzi lo standard input, per questo si deve utilizzare il nome stdin al posto dell'indicazione di un'immagine.(13)
xloadimage [opzioni_globali] {[[opzioni_dell'immagine] immagine]}... |
xloadimage [opzioni_globali] [opzioni_dell'immagine] stdin |
Xloadimage ha due pseudonimi: xsetbg e xview. Il primo equivale a xloadimage -onroot -quiet mentre il secondo equivale a xloadimage -view -verbose.
Quando Xloadimage viene utilizzato per visualizzare un gruppo di immagini, è possibile usare alcuni tasti per passare da un'immagine all'altra e per terminare l'esecuzione:
|
Se l'immagine non è contenuta completamente nella sua finestra, la si può fare scorrere con l'aiuto del mouse, premendo il primo tasto e trascinando nella direzione desiderata.
Le opzioni globali hanno effetto su tutte le immagini su cui si opera. Data la loro funzione è opportuno che siano collocate prima dell'indicazione delle opzioni particolari, ma sempre prima dei file.
|
|
|
|
|
Segue la descrizione di alcuni esempi.
$
xloadimage -onroot fondale.jpg
[Invio]
Carica l'immagine fondale.jpg
e la colloca sulla finestra principale, cioè sullo sfondo della superficie grafica.
$
xloadimage -dump jpeg,quality=50 prova.jpg
\
\ immagine.gif
[Invio]
Carica l'immagine immagine.gif
e la salva in formato JPEG, con il nome prova.jpg
, riducendo la sua qualità.
Le opzioni particolari hanno effetto solo sull'immagine che precedono (nella riga di comando). Alcune opzioni particolari possono essere generalizzate, cioè riferite a più immagini, attraverso l'opzione -global.
|
|
|
|
|
Segue la descrizione di alcuni esempi.
$
xloadimage -zoom 200 esempio.jpg
[Invio]
Carica l'immagine esempio.jpg
, ingrandendola al doppio della sua dimensione originale (200 %).
$
xloadimage pippo.jpg -merge -at 50,50
\
\ -clip 50,50,100,100
\
\ -brighten 150 pippo.jpg
[Invio]
Carica l'immagine pippo.jpg
, quindi carica nuovamente una parte della stessa immagine e, dopo averla schiarita, la fonde con la versione caricata precedentemente, nella stessa posizione di partenza del pezzetto ritagliato. In pratica, si ottiene di schiarire un'area dell'immagine originale.
Quando si utilizza l'opzione -dump, è possibile specificare il tipo di immagine che si vuole ottenere. Oltre al tipo, potrebbe essere possibile o necessaria l'indicazione di argomenti ulteriori, dal momento che molti formati gestiscono più modalità alternative. Sotto questo aspetto, un formato viene definito con la sintassi seguente:
formato[,opzione_di_formato[=valore]] file_da_generare |
Nella tabella successiva viene descritto il modello del formato in modo più particolareggiato, in base ad alcuni tipi di comuni.
|
|
Per facilitare l'utilizzo di questo programma è possibile definire una configurazione personalizzata attraverso il file ~/.xloadimagerc
. Nello stesso modo può essere predisposto un file di configurazione globale per tutto il sistema: /usr/lib/X11/Xloadimage
, o forse anche /etc/X11/Xloadimage
.
Se qualche elemento contiene spazi, si possono utilizzare gli apici doppi per evitare che questi spazi vengano interpretati come una separazione, ovvero l'inizio di un altro valore. Si può utilizzare la barra obliqua inversa (\) per poter includere gli apici doppi tra i caratteri normali e per permettere la continuazione, quando questa barra precede il codice di interruzione di riga.
Il simbolo # permette di indicare l'inizio di un commento, fino alla fine della riga. Come al solito, le righe bianche e quelle vuote vengono ignorate.
All'interno di questi file possono essere indicati tre tipi di informazione: path, extention e filter.
|
Segue un esempio del file di configurazione contenente la descrizione delle direttive usate, in forma di commento:
|
XPaint(14) è un programma di buona qualità per il disegno e il fotoritocco. A prima vista potrebbe non sembrarlo, ma quando se ne apprende la logica del funzionamento si scopre il suo valore.
Purtroppo, XPaint dipende dalle caratteristiche dello schermo, ovvero dalla profondità di colori gestiti nel momento in cui lo si utilizza. Se per ipotesi venisse utilizzato su uno schermo configurato per gestire esclusivamente i grigi, si potrebbero salvare solo immagini in scala di grigi. Questo significa che l'elaborazione di immagini di qualità superiore a quanto visualizzabile sullo schermo comporta una perdita di qualità.
XPaint è costituito dall'eseguibile xpaint; si tratta di un programma interattivo e solitamente non viene usata alcuna opzione e nemmeno alcun nome di file. Se si indicano dei file, questi vengono caricati in altrettante finestre per il disegno o fotoritocco.
xpaint [opzioni] [file...] |
XPaint utilizza una finestra di strumenti contenente un menù per le operazioni più importanti, quali il caricamento di altri file di immagini o la creazione di una nuova immagine, e una serie di icone che fanno riferimento ad altrettanti strumenti per il disegno.
A fianco della finestra degli attrezzi si collocano le finestre per il fotoritocco o per il disegno. Ognuna ha una propria tavolozza di colori. Sono consentite le operazioni di taglia-copia-incolla tra finestre differenti.
|
XPaint uses the native display format for storing image info while editing; the original image information is thrown away. This means that, in general, color information is irretrievably lost when using any display depth less than 24 bits. More specifically, for depths less than 8 bits, both 24-bit (true-color) and 8-bit (palette) images will be reduced to the display depth; for 8-bit displays, standard color-mapped images are safe but 12-bit color-mapped and 24-bit true-color images will lose color information; for 15- and 16-bit displays (typically RGB 555 and 565, respectively), in general both 8-bit and 24-bit images will suffer data loss; and for 24- or 32-bit displays, only very deep images such as 16-bit grayscale or 48-bit true-color will lose data. Also note that any ancillary information associated with the original image (embedded comments, time stamp, copyright, etc.) will always be lost. Your display depth is 8 bits. WARNING! Most true-color images will suffer major data loss! |
|
Segue la descrizione di alcuni esempi.
$
xpaint sole.jpg
[Invio]
Carica il file sole.jpg
in una finestra per il disegno.
$
xpaint -xrm 'XPaint.patternsize: 10'
[Invio]
Avvia il programma modificando la risorsa XPaint.patternsize in modo da avere una tavolozza dei colori un po' più compatta del solito.
Le varie icone rappresentano ognuna una modalità di disegno o di selezione sulle varie finestre di disegno. Il funzionamento del menù è abbastanza semplice, in particolare, il menù {File
} permette di caricare una nuova immagine, oppure di aprire una nuova finestra vuota per il disegno. Si noti in particolare la presenza del menù {Help
} dal quale si accede a una guida interna ben organizzata.
XPaint apre tante finestre di disegno quante sono le immagini da elaborare. La figura 30.63 ne mostra una all'interno della quale appare già un'immagine.
Nella parte inferiore ci sono due tavolozze di colori e modelli: normalmente la prima riguarda il tratto e la seconda il fondale. Se dalla finestra degli attrezzi si seleziona l'icona del rettangolo pieno, quando si disegna, il contorno del rettangolo utilizza il primo colore o modello, mentre il contenuto utilizza il secondo. Alla tavolozza possono essere aggiunti nuovi colori (solid) o modelli (pattern).
Ciò che è importante da ricordare è che il controllo sullo strumento usato per disegnare è sempre fatto attraverso la finestra degli attrezzi.
L'uso del menù è abbastanza intuitivo. In particolare, {File
} permette solo di salvare (il caricamento è previsto solo nella finestra degli attrezzi). Salvando è possibile cambiare formato o salvare solo una porzione selezionata dell'immagine.
Molte operazioni di fotoritocco che possono essere controllate dalla finestra di disegno si riferiscono (o possono riferirsi) a una zona rettangolare selezionata precedentemente. Per ottenere questa selezione si utilizza l'icona apposita (quella del ritaglio rettangolare) della finestra degli attrezzi.
Se si applicano delle alterazioni all'immagine intera, potrebbe capitare di non vederne il risultato. Si può provare a ridurre a icona la finestra e a ripristinarla: dovrebbe funzionare. |
La figura 30.64 mostra alcuni esempi di fotoritocco applicati a zone dell'immagine.
Il sistema di annullamento delle azioni (undo) è a più livelli e regolabile, a volte però potrebbe capitare di non vedere la reazione sull'immagine. È sempre bene provare a ridurre la finestra a icona e poi a ripristinarla per verificare la situazione esatta dell'immagine.
Gimp (15) è acronimo di Gnu image manipulation program e si tratta proprio di questo: un programma di manipolazione delle immagini. È il programma di punta del gruppo di lavoro che si occupa di realizzare l'ambiente integrato Gnome. Si tratta di un programma di ottima qualità che consente il disegno normale e il ritocco delle immagini.
Gimp ha una filosofia simile a quella di XPaint: pur trattandosi di un programma interattivo, permette di eseguire alcune operazioni attraverso l'indicazione di opzioni della riga di comando. Se si indicano dei file, questi vengono caricati in altrettante finestre per il disegno o fotoritocco.
gimp [opzioni] [file...] |
Gimp, come XPaint, utilizza una finestra di strumenti contenente un menù per le operazioni più importanti, quali il caricamento di altri file di immagini o la creazione di una nuova immagine, e una serie di icone che fanno riferimento ad altrettanti strumenti per il disegno.
A fianco della finestra degli attrezzi si collocano le finestre per il fotoritocco o per il disegno. Queste hanno un menù a cui si accede premendo il terzo tasto del mouse (quello destro) e, a differenza di XPaint, non contengono la tavolozza di colori, che invece è incorporata nella finestra degli strumenti.
Gimp non aderisce più agli standard dei vecchi programmi che utilizzavano le prime librerie grafiche. Quindi, le opzioni tradizionali, come -display, -geometry,... non sono più valide. |
|
La figura 30.66 mostra le finestre degli strumenti di Gimp.
Le varie icone rappresentano ognuna una modalità di disegno o di selezione sulle varie finestre di disegno. Il funzionamento del menù è abbastanza semplice, in particolare, il menù {File
} permette di caricare una nuova immagine, oppure di aprire una nuova finestra vuota per il disegno.
Gimp apre tante finestre di disegno quante sono le immagini da elaborare. La figura 30.67 ne mostra una all'interno della quale appare già un'immagine.
Su queste finestre non si vede alcun menù; per ottenerlo si preme il terzo tasto del mouse. Come nel caso di XPaint, il controllo sullo strumento usato per disegnare è sempre fatto attraverso la finestra degli strumenti.
Come nel caso di XPaint, molte operazioni di fotoritocco che possono essere controllate dalla finestra di disegno si riferiscono (o possono riferirsi) a una zona selezionata precedentemente. Per ottenere questa selezione si utilizza l'apposita icona della finestra degli attrezzi.
ImageMagick(16) è un pacchetto di programmi di servizio per la visualizzazione, la conversione e la manipolazione di immagini. La sua potenza sta proprio nella facilità con cui i programmi che lo compongono possono essere utilizzati in modo sistematico attraverso degli script.
I formati di immagine che possono gestire i programmi che compongono ImageMagick sono numerosi. Per conoscerne l'elenco completo basta leggere la pagina di manuale convert(1). |
Nell'uso dei programmi che compongono ImageMagick si incontrano situazioni comuni, regolate da opzioni che utilizzano la stessa sintassi. Anche se queste opzioni non sono necessariamente condivise da tutto l'insieme di questi programmi, vale la pena di descriverle a parte.
|
Il programma convert permette di convertire i file di immagini in formati differenti, applicando eventualmente anche altre trasformazioni. Dalla sintassi si intende che i file indicati nella riga di comando come quelli da convertire possono essere più di uno, mentre quello da ottenere come risultato della trasformazione può essere uno solo. In questo modo, si intende ottenere un file contenente un'animazione (ammesso che il formato grafico prescelto lo consenta).
convert [opzioni] file_da_convertire... file_risultante |
La conversione da un formato all'altro avviene in modo intuitivo, attraverso l'uso del magic number per i file da trasformare e delle estensioni per i file da generare; per esempio, volendo trasformare il file prova.gif
in prova.png
, si intende implicitamente che il primo file sia di tipo GIF e il secondo di tipo PNG. Tuttavia, si può indicare espressamente il tipo di file utilizzando il formato seguente:
tipo:nome |
Se il file in ingresso viene indicato attraverso un trattino (-), si intende fare riferimento allo standard input, mentre se viene usato un trattino al posto del nome di un file in uscita, si intende emettere il risultato della conversione attraverso lo standard output.
Il programma convert permette di eseguire una grande quantità di trasformazioni sulle immagini. Qui vengono descritte solo delle funzionalità elementari; per approfondire le caratteristiche di questo programma si può consultare la pagina di manuale convert(1).
Nella tabella successiva vengono descritte solo alcune opzioni che possono essere utilizzate con convert. In particolare, quanto è già stato descritto tra le opzioni standard di ImageMagick vale anche per questo programma.
|
Segue la descrizione di alcuni esempi.
$
convert prova.gif prova.png
[Invio]
Converte il file prova.gif
(presumibilmente di tipo GIF) nel file prova.png
che si intende debba essere di tipo PNG a causa dell'estensione utilizzata nel nome.
$
convert prova.gif PNG:prova
[Invio]
Come nell'esempio precedente, si converte il file prova.gif
nel file prova
, specificando esplicitamente che si deve trattare di un formato PNG.
$
convert prova.gif png:prova
[Invio]
Esattamente come nell'esempio precedente (il nome che identifica il tipo di file può essere indicato indifferentemente con le lettere maiuscole o minuscole).
$
convert -geometry 150%x150% prova.gif prova.png
[Invio]
Trasforma il file prova.gif
nel file prova.png
ingrandendo l'immagine del 150 %, in modo proporzionale.
$
convert -sharpen 50 prova.gif prova.png
[Invio]
Trasforma il file prova.gif
nel file prova.png
rielaborandola in modo da ottenere un effetto simile alla messa a fuoco (viene utilizzato un fattore di 50).
$
convert -quality 100 prova.gif prova.png
[Invio]
Trasforma il file prova.gif
nel file prova.png
cercando di perdere il minor numero possibile di dettagli.
$
convert -flip prova.gif prova.png
[Invio]
Trasforma il file prova.gif
nel file prova.png
ottenuto ribaltando specularmente l'immagine in modo verticale (dall'alto in basso).
$
convert -flop prova.gif prova.png
[Invio]
Trasforma il file prova.gif
nel file prova.png
ottenuto ribaltando specularmente l'immagine in modo orizzontale (da sinistra a destra).
$
convert -rotate 90 prova.gif prova.png
[Invio]
Trasforma il file prova.gif
nel file prova.png
ottenuto ruotando l'immagine di 90 gradi in senso orario.
$
convert *.jpg prova.gif
[Invio]
Legge tutti i file che terminano con l'estensione .jpg
e li utilizza per generare un'animazione GIF nel file prova.gif
.
$
convert *.jpg prova.png
[Invio]
Tenta di fare la stessa cosa dell'esempio precedente, generando un file di tipo PNG. In pratica, dal momento che il formato PNG può contenere solo un'immagine, viene creata una sequenza di file PNG, uno per ogni «scena», secondo il formato prova.png.n
.
Il programma mogrify è simile a convert, in quanto serve a convertire delle immagini, ma a differenza di questo tende a intervenire direttamente sui file di origine, senza riflettersi in un file di destinazione. Molte delle opzioni di convert sono disponibili anche con mogrify.
mogrify [opzioni] file... |
|
Segue la descrizione di alcuni esempi.
$
mogrify -format png *.gif
[Invio]
Converte i file che si trovano nella directory corrente e terminano con l'estensione .gif
in file di tipo PNG, creando una copia degli stessi file con estensione .png
.
$
mogrify -format PNG *.gif
[Invio]
Converte come nell'esempio precedente, con la differenza che l'estensione diventa .PNG
.
$
mogrify -geometry 150%x150% *.gif
[Invio]
Trasforma i file il cui nome termina per .gif
, ingrandendoli proporzionalmente del 150 %. I file originali vengono sovrascritti.
$
mogrify -colors 16 *.gif
[Invio]
Trasforma i file il cui nome termina per .gif
, rielaborando le immagini in modo da ridurre i colori a un massimo di 16.
$
mogrify -flip *.gif
[Invio]
Trasforma i file il cui nome termina per .gif
, ribaltando le immagini verticalmente (dall'alto in basso).
$
mogrify -flop *.gif
[Invio]
Trasforma i file il cui nome termina per .gif
, ribaltando le immagini orizzontalmente (da sinistra a destra).
Il programma animate visualizza un'animazione composta dai file forniti come argomento. Per ottenere questo risultato, animate costruisce una copia dell'insieme delle immagini nella memoria centrale; questo particolare è molto importante perché se si eccede si rischia di bloccare il sistema operativo.
animate [opzioni] file... |
Molte delle opzioni di convert sono disponibili anche con animate.
|
L'esempio seguente crea un'animazione con le immagini contenute nei file che terminano per .gif
. La sequenza è fatta a intervalli di mezzo secondo:
$
animate -delay 50 *.gif
[Invio]
Il programma montage permette di assemblare una serie di immagini in modo da ottenere una sorta di raccolta di diapositive. In pratica si ottiene un'immagine contenente una serie di icone che riproducono in piccolo i file indicati in ingresso.
montage [opzioni] file... file_risultante |
L'esempio seguente genera il file raccolta.png
(in formato PNG) composto da tutte le immagini ridotte dei file che terminano per .gif
:
$
montage *.gif raccolta.png
[Invio]
Il programma import permette di generare un file catturando un'immagine dallo schermo. Se non si specificano opzioni particolari, si intende utilizzare lo schermo attuale; inoltre, il puntatore del mouse viene modificato in un mirino a forma di croce. Se si fa un clic con il primo tasto sull'area di una finestra, si ottiene la copia del contenuto di questa, se invece si preme il primo tasto e si trascina, si ottiene la copia dell'area evidenziata.
import [opzioni] file_risultante |
|
Segue la descrizione di alcuni esempi.
$
import estratto.png
[Invio]
Avvia import in modo da permettere la selezione interattiva della finestra o dell'area desiderata. Il risultato viene salvato nel file estratto.png
.
$
import -window 0x1400002 finestra.png
[Invio]
Fa una copia del contenuto della finestra identificata dal numero esadecimale 140000216.
$
import -window root finestra.png
[Invio]
Fa una copia del contenuto della finestra principale.
Il programma display permette la visualizzazione di una sequenza di immagini, eventualmente stabilendo anche un intervallo nella sequenza stessa. Tuttavia, display non si limita a questo, permettendo di intervenire anche in modo interattivo: basta fare un clic sull'area della finestra di visualizzazione dell'immagine per ottenere un menù. Per la precisione, con il tasto sinistro si ottiene una finestra di pulsanti che fanno riferimento ad altrettanti sottomenù, mentre con il tasto destro si ottiene un menù a scomparsa delle funzionalità di uso più frequente.
display [opzioni] [file]... |
Questo programma può essere avviato anche senza argomenti, richiedendo implicitamente un funzionamento interattivo. In questo caso si ottiene subito la maschera che si vede nella figura 30.73.
Una volta che display ha visualizzato un'immagine in una finestra, si può ottenere il menù rapido attraverso un clic con il terzo tasto del mouse. Con il secondo tasto (quello centrale) si ottiene una finestra con un ingrandimento del punto selezionato, mentre con il primo tasto del mouse si ottiene una finestra contenente tutto il menù delle funzioni disponibili con questo programma (se viene ripremuto lo stesso tasto, il menù scompare).
Come nel caso degli altri programmi di ImageMagick, anche display permette di intervenire con una grande quantità di opzioni della riga di comando, anche se si può fare quasi tutto in modo interattivo.
Segue la descrizione di alcuni esempi.
$
display
[Invio]
Avvia il programma display per essere usato esclusivamente in modo interattivo.
$
display prova.png
[Invio]
Visualizza l'immagine contenuta nel file prova.png
.
$
display -delay 200 *.png
[Invio]
Inizia la visualizzazione delle immagini contenute in tutti i file il cui nome termina per .png
. I file vengono caricati di volta in volta, senza impegnare la memoria centrale come farebbe invece il programma animate. Il caricamento delle immagini avviene a intervalli di due secondi.
$
display 'vid:*.png'
[Invio]
Avvia display in modo da visualizzare un elenco di «diapositive» generate utilizzando le immagini contenute nei file che finiscono per .png
. Questo elenco di diapositive funge da menù per richiamare le immagini relative.
GraphicsMagick(17) è un lavoro derivato da ImageMagick, che mantiene una discreta compatibilità con questo. A differenza di ImageMagick, GraphicsMagick utilizza convenientemente un solo programma eseguibile: gm.
gm convert [opzioni] file_da_convertire... file_risultante |
gm mogrify [opzioni] file... |
gm animate [opzioni] file... |
gm montage [opzioni] file... file_risultante |
gm import [opzioni] file_risultante |
gm display [opzioni] [file]... |
Si intuisce dai modelli sintattici che le opzioni e l'uso generale siano sostanzialmente uguali a quelli di ImageMagick, dove in pratica, ai comandi originali si aggiunge davanti il nome gm.
Kolourpaint(18) è un programma per il disegno e il fotoritocco, che può essere usato con la semplicità di XPaint, offrendo però anche funzionalità abbastanza evolute, senza entrare nella complicazione di utilizzo di programmi come Gimp.
kolourpaint [opzioni] [file] |
Gpaint(19) è un programma funzionalmente ed esteticamente molto simile a XPaint, che però risulta essere coordinato con le altre applicazioni Gnome.
gpaint [file]... |
La figura 30.76 mostra Gpaint mentre si interviene su un file già esistente.
Tuxpaint (20) è un programma di disegno rivolto ai bambini, con la caratteristica di essere estremamente semplice e intuitivo nel suo utilizzo:
gpaint [opzioni] |
Il programma può essere avviato indicando delle opzioni, che possono servire probabilmente per l'utilizzo nell'ambito di un menù di avvio, ma non si può indicare il nome di un file, perché la gestione dei nomi è automatica. In pratica, Tuxpaint gestisce la directory ~/.tuxpaint/
, all'interno della quale inserisce informazioni di funzionamento e i file che vengono creati; in tal modo, quando si apre un file, invece di scegliere il nome, si sceglie la miniatura del suo contenuto.
Come ultima considerazione, si può osservare che Tuxpaint funziona in una finestra di dimensione fissa, tale da poter lavorare anche con una risoluzione dello schermo di soli 640×480 punti.
GQview(21), ex GQview, è un gestore di file contenenti immagini. Il programma eseguibile corrispondente è gqview che, come si vede dal modello sintattico, può ricevere l'indicazione di una directory, all'interno della quale si dovrebbero trovare dei file di immagini:
geeqie [opzioni] [directory] |
La figura 30.78 mostra come potrebbe presentarsi Geeqie in pratica. Si può osservare sul lato sinistro un nome evidenziato, corrispondente all'immagine che si sta visualizzando sul lato destro.
Esistono alcuni concetti generali che riguardano i vari formati audio digitali, da conoscere, almeno superficialmente, per poter comprendere il significato delle funzioni dei programmi che generano o elaborano tali formati.
Prima ancora di affrontare gli aspetti tecnici legati alla gestione dell'audio in forma digitale, vale la pena di annotare il significato e lo scopo del numero ISRC (International standard recording code) che rappresenta un sistema di identificazione per tutte le registrazioni sonore, comprese quelle che si compongono anche di una parte video.
In pratica, questo numero viene richiesto da chi desidera controllare la diffusione e l'utilizzo di un opera sonora, ottenendo un'attribuzione univoca a una registrazione singola.
Volendo fare un'associazione con le pubblicazioni dei libri, questo numero è l'equivalente del numero ISBN (capitolo 58).
Per maggiori informazioni si può consultare l'indirizzo: http://www.ifpi.org/content/section_resources/isrc.html.
Si può considerare ogni tipo di suono come la somma di vibrazioni, ognuna con una propria frequenza di oscillazione e ampiezza. Per gestire il suono in modo elettrico, questo viene trasformato (analogicamente) in un segnale elettrico che oscilla riproducendo le stesse frequenze e un'ampiezza proporzionale tra le varie vibrazioni. Un suono si può rappresentare in un piano cartesiano, mettendo normalmente nell'asse orizzontale il tempo e in quello verticale la variazione di ciò che ne rappresenta il mezzo trasmissivo: la pressione dell'aria o il livello del segnale elettrico.
Per poter rappresentare il suono in forma digitale (ovvero in forma numerica), occorre fare una semplificazione, che comporta la suddivisione del tempo in segmenti abbastanza piccoli, all'interno dei quali si va a misurare il livello dell'intensità di ciò che trasmette il suono (di solito si tratta del livello del segnale elettrico). In pratica, è come ridurre un diagramma continuo, in un istogramma che ne approssima la forma. Questo procedimento è la campionatura (sampling).
La campionatura digitale si misura in quantità di campioni prelevati al secondo, pertanto si misura in hertz (simbolo: «Hz»).
Si comprende intuitivamente che la riproduzione di un suono digitalizzato comporta la ricostruzione di una vibrazione ottenuta per interpolazione dei valori dei vari campioni; di conseguenza: maggiore è la frequenza di campionamento (sampling rate), migliore è la qualità della riproduzione che si può ottenere; inoltre, maggiore è la precisione del campione, migliore è la qualità del suono.
Sul piano teorico, si afferma che la frequenza massima che si vuole poter riprodurre richiede una frequenza di campionamento maggiore del doppio di questa. Per esempio, per riprodurre vibrazioni fino a 20 000 Hz occorre una frequenza di campionamento superiore a 40 000 Hz.
I formati dei file audio non compressi, sono di tanti tipi, dove in particolare vanno considerate le caratteristiche dei campioni stessi. La tabella 30.83 descrive brevemente le caratteristiche di un file del genere.
|
Una registrazione audio di qualità equivalente a quella dei CD audio è fatta a campioni di 16 bit, a una frequenza di 44 100 Hz; per arrivare al livello di un DAT (Digital audio tape) o di un DVD (per la componente audio) si passa a una frequenza di campionamento di 48 000 Hz. Pertanto, un secondo di registrazione a qualità CD, in stereofonia, comporta l'utilizzo di 2·16·44 100 = 1 411 200 bit, pari a 176 400 byte; così, un secondo di registrazione a qualità DAT, in stereofonia, comporta l'impiego di 192 000 byte.
È importante sottolineare la differenza che c'è tra un file audio con intestazione, rispetto a quello che non ne è provvisto: quando si passa un file audio grezzo a un programma che deve eseguirlo o elaborarlo, occorre specificare al programma tutte le caratteristiche del file, perché non può determinarle automaticamente. In particolare, occorre fare attenzione quando si trasferisce un file del genere da un'architettura a un'altra, dove nel passaggio può cambiare l'ordine dei byte.
Dopo la campionatura di un'informazione sonora, è possibile applicare delle tecniche per ridurre le dimensioni dei dati, ovvero per ottenerne la compressione. Si distinguono due situazioni: la compressione senza perdita che consente la ricostruzione dei campioni originali, rispetto a una compressione con perdita di informazioni. I formati audio compressi sono diversi e si distinguono per l'algoritmo di compressione.
Nella realizzazione di un file audio compresso si stabilisce un parametro in più rispetto ai file non compressi: il flusso massimo di dati per unità di tempo, noto come bit rate. Naturalmente, maggiore è questo valore, migliore è la qualità del suono riprodotto. Generalmente, si ottiene una buona qualità di registrazione stereofonica con un tasso del flusso di dati di 128 kbit/s. In fase di creazione di un file audio di questo tipo, si può stabilire che il tasso del flusso di dati sia costante o variabile (nel secondo caso si parla di variable bit rate e si usa la sigla «VBR»); in particolare, in caso di tasso variabile potrebbe essere stabilito un valore medio o un intervallo di valori da rispettare.
Un file audio compresso, può limitarsi a contenere l'informazione sonora per la quale è stato realizzato, oppure può essere inserito in un «contenitore» (container), che consente l'inserimento di informazioni addizionali. Per esempio, il formato compresso Vorbis è contenuto normalmente in un formato Ogg, da cui il nome Ogg Vorbis. Per la stessa ragione, esiste un formato FLAC (normale) e un formato Ogg FLAC (FLAC contenuto in Ogg. Nel caso di MP3, il nome è ambiguo, perché può fare riferimento al contenitore o al contenuto audio compresso.
Un file MP3 può includere delle informazioni importanti sul suo contenuto, oltre a ciò che è indispensabile per la riproduzione (come per esempio l'informazione sulla frequenza di campionamento). In generale, conviene stabilire questi dati nella fase di codifica del file stesso, mentre una parte di questi può essere modificata anche dopo.
|
|
Le informazioni più voluminose, come il titolo e le altre stringhe di testo, vanno aggiunte in coda al file MP3. Il modo in cui questi dati vengono segnalati nel file dipende da standard differenti che nel tempo sono stati aggiornati. In questo senso, alcuni programmi non aggiornati potrebbero anche non essere in grado di leggere ciò che viene scritto con standard più recenti.
Anche il contenitore Ogg consente l'inserimento di informazioni addizionali; in particolare un'intestazione composta da campi individuati da nomi. Non esistono campi descrittivi obbligatori e campi con lo stesso nome possono apparire più di una volta (per esempio nel caso dell'indicazione di più di un autore). La documentazione di Ogg propone uno standard nell'utilizzo dei campi descrittivi e in particolare vale la pena di considerare quelli seguenti:
|
Si può osservare in questo caso che non è stata prevista una classificazione preliminare dei generi.
Se l'unità per CD/DVD è provvista di un'uscita audio autonoma (una presa stereo per cuffia sulla parte frontale), è possibile ascoltare dei CD musicali anche senza la presenza di un'interfaccia audio. Naturalmente, se è disponibile tale interfaccia, il lettore CD/DVD potrebbe esservi stato collegato attraverso un cavetto schermato, in modo da poter utilizzare le funzionalità della stessa scheda per rielaborare il suono.
È importante considerare che, di norma, un CD contenente tracce audio non può essere innestato: l'ascolto o l'estrazione delle tracce sono operazioni che richiedono normalmente programmi appositi che accedono direttamente al file di dispositivo. |
Il software che si occupa di mettere in funzione il lettore CD-ROM come lettore di CD audio, interviene solo sul file di dispositivo corrispondente all'unità a cui si vuole fare riferimento (per esempio /dev/hdx
per una unità ATAPI, oppure /dev/scdn
o /dev/srn
per una unità differente); a volte si predispone per questo il collegamento simbolico /dev/cdrom
, in modo da facilitare l'utilizzo dei programmi relativi. Naturalmente, il file di dispositivo deve avere i permessi appropriati. Il segnale audio può essere prelevato direttamente dal lettore CD, oppure può essere gestito attraverso la scheda audio per mezzo di altro software.
Se la scheda audio non è di ottima qualità, potrebbe generare un rumore di fondo. Di conseguenza, per essere certi di prelevare il segnale più pulito possibile, è necessario utilizzare l'uscita del lettore CD stesso. |
Il software che permette l'ascolto di un CD audio, non richiede di tenere sotto controllo il lettore, per cui potrebbe essere costituito anche da un semplice programma a riga di comando, come nel caso di dcd.
I programmi per l'ascolto di CD audio potrebbero comportarsi in maniera differente tra di loro, tanto che non va esclusa la presenza di errori tali da impedire lettura di CD che in condizioni normali risultano realizzati correttamente. In altri termini, se per qualche ragione non si riesce a leggere un CD audio attraverso l'uso di un certo programma, conviene tentare di utilizzarne altri, prima di arrivare alla conclusione che il CD o il lettore possano essere difettosi. |
Molti programmi per l'ascolto di CD musicali abbinano anche la funzionalità di interrogazione della base di dati CDDB. Ciò viene descritto nella sezione 30.6.6.
Dcd (22) è un programma di servizio molto semplice, composto dall'eseguibile dcd, che segue la filosofia dei comandi a riga di comando, con tutti i vantaggi che ciò può dare. In pratica, senza impegnare una console virtuale o un terminale, manda al lettore i comandi richiesti di volta in volta. Dcd ha però un inconveniente: può accedere esclusivamente al file di dispositivo (o al collegamento) /dev/cdrom
!
dcd [n_traccia...] |
dcd {stop|restart|next|prev|info|dir|loop [n...]} |
La sintassi è molto semplice: se si indica un numero n si intende avviare l'esecuzione della traccia n-esima corrispondente; se si indicano più numeri si intende ottenere l'esecuzione di quelle tracce nella sequenza specificata; se si indica un'altra parola chiave, si vuole impartire il comando corrispondente:
|
Segue la descrizione di alcuni esempi.
$
dcd
[Invio]
Avvia l'esecuzione del primo brano del CD, proseguendo fino all'ultimo.
$
dcd 1
[Invio]
Esattamente come nell'esempio precedente.
$
dcd 1 3 5 7
[Invio]
Richiede l'esecuzione dei brani numero uno, tre, cinque e sette, in sequenza.
$
dcd next
[Invio]
Passa all'esecuzione del brano successivo.
TCD (23) è un pacchetto composto da due programmi: uno per lo schermo a caratteri e uno per il sistema grafico X. L'utilizzo è intuitivo e non occorrono molte spiegazioni. È importante osservare che il controllo del volume riguarda il lettore CD e non la scheda audio. In altri termini, si tratta del volume del segnale che viene generato dal lettore CD: sia quello che si ottiene attraverso l'uscita sul pannello frontale dell'unità, sia quello che viene inviato alla scheda audio (ammesso che esista) per mezzo del cavetto schermato interno all'elaboratore.
TCD richiede la presenza del file di dispositivo o del collegamento |
La figura 30.92 mostra il funzionamento di TCD nella versione per terminali a caratteri, mentre la figura 30.93 mostra la versione per il sistema grafico X. Per quanto riguarda il secondo caso, si osservi che TCD si dovrebbe trovare incluso anche nella raccolta degli applicativi di Gnome; in tal caso, l'aspetto della versione grafica risulta essere un po' diversa rispetto a quanto si vede nella figura riportata qui.
.-TCD v2.0, by Tim Gerla------Control Panel-------------------------. | | | | Status: Paused | [P] - Start playing. [-] - Previous track. | | Track: 10 of 12 | [U] - Pause or restart. [+] - Ne|t track. | | Time: 03:36 | [E] - Eject CDROM. [G] - Go to track #. | | CD: 55:17 | [S] - Stop playing. []] - Skip ahead. | | | [[] - Skip back. | |-Track List-------| [M] - Change play mode. < > - Adjust volume. | | 01a - 06:10 | Current Mode: Normal Current Volume: 10% | | 02a - 06:21 | | | 03a - 03:22 | [T] - Edit track database. | | 04a - 04:06 | [D] - Download CDDB data. | | 05a - 05:51 | | | 06a - 08:05 | | | 07a - 04:38 | [Q] - Quit. | | 08a - 05:10 | | | 09a - 07:55 |-Disc Information-------------------------------| | 10a - 08:29 | Length: 71:40 | | 11a - 04:54 | Title: Unknown / Unknown | | 12a - 06:37 | Track: Track 10 | `-------------------------------------------------------------------' |
Gli eseguibili sono rispettivamente tcd e gtcd. La lettera «g» di gtcd sta per GTK+, ovvero le librerie grafiche utilizzate.
Una cosa interessante di TCD sta nel fatto che più copie dei suoi eseguibili possono funzionare in modo concorrenziale, risultando tutte perfettamente sincronizzate, a parte qualche difficoltà nella regolazione del volume. |
Cdcd (24) è un altro programma per l'ascolto di CD musicali che consente un funzionamento a riga di comando, oppure in modo interattivo, ma sempre attraverso una console. La prima volta che viene avviato da ogni utente, richiede alcune informazioni elementari di configurazione, con cui crea il file ~/.cdcdrc
:
$
cdcd
[Invio]
La prima cosa che viene richiesta è il file di dispositivo abbinato al lettore CD:
Welcome to cdcd 0.5.0. You will now be asked a series of questions which will configure cdcd for your platform. The default answers are given in brackets. What is the name of your CD-ROM device? [/dev/cdrom] |
Se esiste il collegamento simbolico /dev/cdrom
che punta al dispositivo corretto, basta confermare con la pressione del tasto [Invio].
[Invio]
Successivamente, Cdcd cerca di ottenere le informazioni necessarie ad accedere alla rete, allo scopo di contattare una base di dati CDDB, oppure qualcosa di equivalente.
Are you connected to a network (y/n)? [y] |
[Invio]
There are two methods of retrieving CD track information, CDDB and CD Index. Using the CD Index will be somewhat faster, but does not yet facilitate inexact matching. Both methods may be used through HTTP proxy servers. Choose a method: 1) CDDB 2) CD Index Which method? [1] |
Avendo confermato la disponibilità di un accesso alla rete, viene proposto di accedere a una base di dati CDDB, oppure a un altro tipo di indice. La scelta più comune è proprio la base di dati CDDB, come suggerito dal programma stesso.
[Invio]
Use a HTTP proxy server? [n] |
In questo caso si suppone che non sia necessario utilizzare un proxy, per cui si conferma la proposta del programma.
[Invio]
cdcd version 0.5.0, Copyright (C)1998-99 Tony Arcieri Distributed under the GNU General Public License. See file COPYING for details. Built with libcdaudio 0.99.1 Enter ? for help. cdcd> |
Termina così la configurazione e il programma si mette a funzionare in una modalità interattiva, in attesa di comandi, dove l'invito è la stringa cdcd>. Per terminare basta dare il comando quit.
cdcd>
quit
[Invio]
Quando si avvia il programma, è comunque possibile specificare un file di dispositivo alternativo a quanto indicato nella configurazione, attraverso l'opzione -d. Nell'esempio seguente si suppone che l'unità CD sia collocata come prima unità ATAPI del secondo bus ATA:
$
cdcd -d /dev/hdc
[Invio]
È già stato specificato che Cdcd può funzionare sia in modo non interattivo, a riga di comando, sia in modo interattivo. In pratica, l'eseguibile cdcd può essere avviato indicando un comando come argomento, per cui esegue la richiesta e termina di funzionare, oppure può essere avviato senza argomenti e in tal caso mostra un invito rimanendo in attesa di comandi. Naturalmente, i comandi in questione sono gli stessi, sia quando usati come argomento della riga di comando, sia quando usati nel funzionamento interattivo.
cdcd [comando] |
Si ottiene l'elenco dei comandi disponibili con il comando help, mentre per conoscere la sintassi precisa di ogni comando basta il comando help nome_comando. Per esempio:
$
cdcd help
[Invio]
cdcd commands: play stop open close pause resume ff rew sites next prev getvol setvol status rndplay slot list submit info tracks edit ext refresh device verbose quit access For more specific help, type 'help <command>' |
$
cdcd help play
[Invio]
Usage: play [starttrackname/track #] [endtrackname/track #] [min:sec] By default, play starts at the beginning of the CD. You may specify tracks using either the number of the track or a section of the track's name. The disc will play from where it starts to the end of the disc or a track you specify. You may also specify a position within the first track to start. |
La tabella 30.101 descrive brevemente i comandi principali di Cdcd.
|
AsCD (25) è un programma grafico molto semplice, per il controllo dell'esecuzione di un CD audio. L'opzione più importante per l'avvio del programma è -device, con la quale si specifica dove trovare il lettore CD:
ascd [-device unità_cd] [altre_opzioni] |
Per esempio, potrebbe essere avviato così per controllare l'unità /dev/hdc
:
$
ascd -device /dev/hdc
[Invio]
Gcd (26) è un programma grafico per l'ascolto di CD musicali, ottenuto come riduzione di Grip, che invece ha molte più funzionalità. Gcd può funzionare in modo molto poco appariscente, come si vede nella figura 30.103, oppure anche come si vede nella figura 30.104. All'avvio cerca normalmente di contattare una base di dati CDDB e se la connessione fallisce, la cosa viene segnalata con un messaggio di errore in un riquadro separato.
Gcd si avvia con l'eseguibile gcd e oltre a questo non c'è molto da aggiungere, dal momento che il suo funzionamento interattivo è abbastanza intuitivo, guidato anche da etichette a scomparsa che descrivono il significato dei pulsanti grafici che appaiono sul pannellino di controllo.
CDDB è una base di dati dei CD musicali offerta attraverso la rete. A fianco di servizi CDDB proprietari, il cui accesso può essere sottoposto a delle condizioni, esiste anche un servizio CDDB pubblico, corrispondente a Freedb.org (http://www.freedb.org).
Il protocollo usato per l'accesso a una base di dati CDDB è denominato CDDBP e utilizza la porta 888 o la porta 8 880. Con questo protocollo si può interrogare il servizio utilizzando i pochi dati che fornisce il CD sui brani che contiene, oppure si possono fornire le informazioni conosciute sul CD, mettendole a disposizione di tutti. Molti programmi per l'ascolto di CD audio sono organizzati per l'interrogazione automatica di questo servizio, allo scopo di fornire tutte le notizie conosciute su ciò che si sta ascoltando.
Alcuni sistemi grafici integrati, come Gnome, utilizzano un programma cliente che si occupa di eseguire le interrogazioni per conto dei programmi che possono averne bisogno, come TCD (nella versione per Gnome). Nel caso di Gnome si tratta precisamente di cddbslave, il quale poi memorizza le informazioni nella directory ~/.cddbslave/
.
La maggior parte dei programmi che si avvalgono del protocollo CDDBP concordano nel salvare le informazioni ricevute nella directory ~/.cddb/
, in modo da evitare interrogazioni successive attraverso la rete, per i dati già raccolti. Inoltre, esiste un'altra convenzione abbastanza diffusa, che consiste nell'usare il file ~/.cdservrc
per indicare il servizio CDDB a cui ci si deve rivolgere; per esempio, il contenuto di questo file potrebbe corrispondere al testo seguente:
|
Tanto per fare un esempio di come possa funzionare la cosa in generale, si fa riferimento a TCD nella versione per Gnome. Sul pannello frontale, tra le varie icone se ne trova una che permette di accedere alla finestra di inserimento e modifica delle informazioni sulle tracce. Queste informazioni sono memorizzate naturalmente nella propria directory personale. Si vede questa finestra nella figura 30.106. In questo caso appaiono anche i titoli dei vari brani, se così non fosse, si potrebbe interrogare la base di dati CDDB, come suggerisce il pulsante grafico nella parte bassa.
Il servizio offerto da Freedb.org avviene per mezzo di diversi nodi di rete, a cui si accede normalmente attraverso il nome freedb.freedb.org
, che si risolve in una serie di indirizzi alternativi:
$
host freedb.freedb.org
[Invio]
freedb.freedb.org has address 203.16.234.30 freedb.freedb.org has address 64.71.163.204 freedb.freedb.org has address 130.179.31.49 freedb.freedb.org has address 193.201.200.74 freedb.freedb.org has address 195.37.77.155 |
Si osservi comunque che, normalmente, anche in mancanza di una configurazione precedente, il software che si utilizza dovrebbe essere già predisposto per interrogare correttamente questo indirizzo in modo predefinito.
Le tracce audio di cui si compone un CD musicale sono in pratica dei file audio in un formato particolare. Anche se con qualche difficoltà, è possibile estrarre queste tracce e, teoricamente, si possono ricomporre masterizzando un nuovo CD.
È importante ricordare che l'acquisto di un CD non dà implicitamente il diritto di farne quello che si vuole. In generale si ottiene solo il diritto di ascoltarlo per sé; mentre altre operazioni come la copia, l'esecuzione in pubblico e la trasmissione, sono attività che devono essere autorizzate espressamente da chi detiene i diritti di quella pubblicazione sonora, senza contare l'eventuale presenza di una tassa. |
Qui viene mostrato a titolo didattico il modo in cui le tracce audio di un CD possono essere estratte. Tuttavia, utilizzare questa tecnica per memorizzare tali brani in un'unità di memorizzazione qualunque, vuol dire farne una «copia», ovvero un'azione che normalmente è vietata da chi possiede i diritti sulla pubblicazione relativa. |
L'estrazione delle tracce da un CD non è necessariamente un'operazione illegale, anche se la prima idea che viene in mente a chiunque è quella di fare così delle copie digitali perfette. In certi casi può essere l'unico modo per riuscire ad ascoltare un CD attraverso un lettore in cui l'uscita audio non funziona; in ultima analisi potrebbe essere il modo per realizzare un sistema audio completamente digitale fino all'ultima fase del processo di elaborazione che si vuole attuare.
In generale, per estrarre le tracce audio da un CD si utilizzano programmi come Cdda2wav, Cdparanoia e Grip. Il problema più difficile dell'estrazione dei brani è quello di riuscire a individuarne correttamente l'inizio e la fine, oltre alla necessità di seguire correttamente la traccia senza salti.
Cdparanoia(27) è in grado di estrarre le tracce audio di un CD in modo digitale, senza passare per l'elaborazione della scheda audio. Può generare diversi tipi di formati, tuttavia al principiante conviene un formato con intestazione, come il WAV-RIFF. Si compone di un eseguibile unico, cdparanoia:
cdparanoia [opzioni] intervallo_di_esecuzione [file_da_generare] |
La caratteristica più importante di questo applicativo sta nel fatto che è in grado di leggere e rileggere più volte le tracce audio in modo da escludere errori, attraverso il confronto delle letture successive.
A parte il caso in cui venga utilizzata l'opzione -B, è obbligatorio specificare l'intervallo di tracce e di tempo di registrazione. Semplificando al massimo, si tratta dell'intervallo di tracce espresso semplicemente nella forma m-n, dove m è la traccia iniziale e n quella finale. Nella pagina di manuale cdparanoia(1) si può leggere una spiegazione un po' più dettagliata che permette di individuare meglio la porzione desiderata.
|
Segue la descrizione di alcuni esempi.
$
cdparanoia -d /dev/hdc -w 1 mio_file.wav
[Invio]
Crea il file mio_file.wav
ottenuto dalla prima traccia del CD contenuto nel lettore, corrispondente al file di dispositivo /dev/hdc
.
$
cdparanoia -d /dev/hdc -w 1-2 mio_file.wav
[Invio]
Crea il file mio_file.wav
ottenuto dalle prime due tracce del CD contenuto nel lettore, corrispondente al file di dispositivo /dev/hdc
.
$
cdparanoia -d /dev/hdc -w -B
[Invio]
Crea una serie di file, nella directory corrente, uno per ogni traccia del CD contenuto nel lettore, corrispondente al file di dispositivo /dev/hdc
. I file sono in formato WAV-RIFF.
$
cdparanoia -d /dev/hdc -w 1 -
\
\ | sox -t .wav - -t ossdsp /dev/dsp
[Invio]
Legge la prima traccia audio del CD contenuto nel lettore (corrispondente al file di dispositivo /dev/hdc
) e la passa a un altro programma, attraverso un condotto. Quel programma si occupa di convertire il formato in modo da poterlo inviare al dispositivo /dev/dsp
che in pratica corrisponde a un ingresso digitale della scheda audio.
A parte la qualità della riproduzione che si ottiene, eventualmente anche pessima, questo esempio mostra in che modo si può prelevare una traccia audio per rielaborarla prima dell'ascolto, senza passare per l'uscita audio del CD. |
Grip(28) è un altro programma in grado di estrarre tracce audio da un CD, pilotando eventualmente anche la conversione in formato MP3, Ogg Vorbis o FLAC. Eventualmente può funzionare come lettore CD puro e semplice; in tal caso, si comporta esattamente come Gcd, che in effetti è una versione ridotta dello stesso Grip.
Anche Grip è quindi un programma grafico interattivo, come lo è Gcd, ma in questo caso è molto importante la configurazione, che viene memorizzata nel file ~/.grip
. Due aspetti molto importanti della configurazione riguardano il modo in cui vengono prelevate le tracce (figura 30.109) e la conversione eventuale in MP3, Ogg Vorbis (figura 30.110 e figura 30.111) o FLAC.
Il prelievo normale può avvenire direttamente attraverso Grip stesso, senza l'ausilio di altri programmi, ma in particolare viene definita in questa fase la collocazione dei file ottenuti (che sono di tipo WAV-RIFF). Nella figura 30.109 si vede in particolare che i file vengono definiti in base alla stringa ~/mp3/%A/%d/%n.wav. Evidentemente, %A, %d e %n sono delle macro che vengono sostituite, rispettivamente, con il nome dell'artista, il nome del disco, la traccia, completa di numero sequenziale. In pratica, se non è stato ottenuto il nome dell'artista e del CD, la prima traccia corrisponde al file ~/mp3/noartist/unknown_disk/track_1.wav
.
La conversione in MP3, Ogg Vorbis o in FLAC delle tracce richiede un programma apposito. Grip è in grado di utilizzarne diversi, in particolare LAME (sezione 30.13), Vorbis Tools e Flac. Nella configurazione (figura 30.110) deve essere indicato il tipo di programma usato per la conversione, il percorso assoluto dell'eseguibile e le opzioni da dargli; inoltre, come nella situazione precedente deve essere indicato in che modo comporre il nome del file. Anche nella riga di comando del programma di conversione vengono indicate delle macro; tuttavia, in generale non conviene modificare le opzioni e gli argomenti che si ottengono automaticamente alla selezione di un tipo particolare di programma per la compressione audio.
|
Dopo la configurazione, per passare al prelievo occorre prima selezionare le tracce desiderate, come si vede nella figura 30.113, utilizzando il mouse, premendo il terzo tasto (quello destro). Successivamente si può passare al prelievo, come si vede nella figura 30.114, dove si può scegliere se prelevare semplicemente le tracce, generando file di tipo WAV-RIFF, con il pulsante grafico <Rip only
>, oppure si può ottenere direttamente la conversione in formato MP3, con il pulsante grafico <Rip+Encode
>.
Premesso che la riproduzione di un CD audio deve avvenire nel rispetto della legge, il problema che si incontra dopo tale realizzazione consiste probabilmente nel disegno di una copertina appropriata. Naturalmente, ciò può valere anche per un CD non duplicabile che ha perso la sua copertina originale, o che viene trasferito in un contenitore differente.
Per questo genere di cose basta un programma di disegno, o addirittura un foglio elettronico, ma occorre tempo per prendere le misure esatte e per trascrivere i dati del disco. Si intuisce che un programma specifico per questo scopo potrebbe interrogare un servizio CDDBP e generare tutto automaticamente.
Disc-Cover (29) è un programma, relativamente semplice, per la produzione di copertine da inserire nei contenitori per CD, utilizzando le informazioni che si possono ottenere tramite il protocollo CDDBP:
disc-cover [opzioni] |
Il programma si avvale di una propria configurazione, costituita dal file /etc/disc-cover.conf
ed eventualmente dal file ~/.disc-coverrc
, dove il secondo rappresenta ovviamente la personalizzazione del singolo utente. Oltre a questi file, il programma si avvale della configurazione standard costituita dal file ~/.cdserverrc
per l'individuazione del servizio a cui rivolgere le interrogazioni con il protocollo CDDBP e del contenuto della directory ~/.cddb/
per ricercare interrogazioni fatte in precedenza.
In generale, non dovrebbe essere necessario modificare la configurazione predefinita del programma, a parte, eventualmente, verificare che il file ~/.cdserverrc
contenga informazioni valide. In base alla configurazione predefinita, il programma legge il CD cercando di accedervi attraverso il file di dispositivo /dev/cdrom
, ma si può usare l'opzione -D per specificarne uno differente. Inoltre, in mancanza di un file ~/.cdserverrc
, si può chiedere al programma di produrne uno con l'uso dell'opzione -S (se il file c'è già ma è errato, lo si può rimuovere prima di usare tale opzione).
In condizioni normali, quando Disc-Cover legge un CD e ottiene le informazioni sul suo contenuto, genera un file PostScript con il disegno delle copertine da stampare e ritagliare. Attraverso le opzioni è possibile richiedere un formato differente, così come è possibile specificare il nome del file che si vuole generare. In mancanza di altro, si ottiene normalmente un nome costituito dall'artista e dal titolo del disco.
|
Segue la descrizione di alcuni esempi.
$
disc-cover -D /dev/sr0
[Invio]
Viene avviato il programma indicando esplicitamente di voler leggere il CD contenuto nell'unità corrispondente al file di dispositivo /dev/sr0
. Supponendo che si tratti del CD Eagles, Hotel California, pubblicato da Asylum, si potrebbe ottenere il file PostScript denominato: Eagles_-_Hotel_California.ps
. L'aspetto del cartoncino da ritagliare dovrebbe essere come quello che si vede nella figura 30.116, nel lato sinistro.
$
disc-cover -D /dev/sr0 -c x-slim
\
\-a "http://magnatune.com/artists/Ensamble%20Sreteniye\n
\
\License: Creative Commons
\
\Attribution-NonCommercial-ShareAlike 1.0\n
\
\Downloaded: 2003-10-17"
[Invio]
Qui si vuole generare la copertina per un cofanetto sottile, del tipo x-slim, per un disco ottenuto a partire da file MP3 scaricati da http://magnatune.com, nel rispetto della licenza CC Attribution-NonCommercial-ShareAlike 1.0, come citato attraverso l'opzione -a. Si osservi nel testo associato all'opzione -a l'uso della sequenza \n per richiedere di andare a capo. Il file che si ottiene dovrebbe avere l'aspetto che si vede nella figura 30.116, nel lato destro.
Cdlabelgen (30) è un programma per la produzione di copertine da inserire nei contenitori per CD, utilizzando le informazioni fornite attraverso la riga di comando:
cdlabelgen [opzioni] |
Se il programma viene usato senza l'indicazione di alcuna opzione, si ottiene, attraverso lo standard output, un file PostScript con il disegno dei cartoncini da inserire in un contenitore comune per CD, con l'indicazione della data e nulla altro. Con l'uso delle opzioni è possibile specificare il nome del file da creare e il contenuto da inserire nei cartoncini. In pratica, Cdlabelgen non si avvale del protocollo CDDBP e tutto quello che si vuole inserire va specificato con le opzioni.
|
Segue la descrizione di alcuni esempi.
$
cdlabelgen -c "Eagles"
\
\-s "Hotel California"
\
\-i " 1. Hotel California 06:32%
\
\ 2. New Kid In Town 05:04%
\
\ 3. Life In The Fast Lane 04:46%
\
\ 4. Wasted Time 04:55%
\
\ 5. Wasted Time (Reprise) 01:23%
\
\ 6. Victim Of Love 04:09%
\
\ 7. Pretty Maids All In A Row 03:59%
\
\ 8. Try And Love Again 05:11%
\
\ 9. The Last Resort 07:27%
\
\%CD length: 43:33" > cartoncino.ps
[Invio]
In questo caso, nel file cartoncino.ps
si vuole riprodurre il testo descrittivo di un CD musicale comune, dove si può osservare l'uso dell'opzione -i per indicare i titoli delle tracce contenute. Il risultato che si ottiene è simile a quello che si vede nella figura 30.118, nel lato sinistro. Si ricorda che questo disco in particolare non è duplicabile legalmente e l'esempio viene riportato per poter fare un confronto tra il risultato generato da Cdlabelgen e Disc-Cover, come appare in un'altra sezione.
$
cdlabelgen -c "nanoLinux III" -s "2005.01.01" -M
\
\-i "Please select a name like: auto, hdb, hdc,
\
\hdd, hda1, hda2,... sda, sdb, sda1,%
\
\sda2,... sr0, sr1, to boot the root
\
\file system from the corresponding device%
\
\file (/dev/hda, /dev/hdb, etc.).
\
\You may select a BIOS device with a name like%
\
\80 or 81, which selects the boot sector
\
\inside the first or second ATA hard%
\
\disk. You may also press [F1], [F2],...
\
\to get help, or just press [Enter] to%
\
\boot the usual hard disk." > nanolinux.ps
[Invio]
In questo caso si vuole predisporre una bustina per contenere una distribuzione GNU/Linux autoavviabile da CD. Il risultato che si dovrebbe ottenere, in questo caso nel file nanolinux.ps
, si vede nella figura 30.118, nel lato destro.
Esistono diversi modi per arrivare a ottenere la gestione dell'audio con i sistemi GNU/Linux. Con kernel 2.6 si considera attuale il modello denominato ALSA (Advanced Linux sound architecture, mentre il modello precedente, noto con la sigla OSS (Open sound system), è superato.
Qualunque sia il tipo di gestione dell'audio che si vuole utilizzare, nel caso di un sistema GNU/Linux occorre predisporre un kernel con le funzionalità necessarie all'adattatore audio di cui si dispone, possibilmente utilizzando dei moduli. Se si intende realizzare un kernel modulare, occorre poi fare in modo che i moduli relativi vengano caricati opportunamente, eventualmente specificando i parametri necessari a raggiungere correttamente la scheda. Nell'esempio successivo viene caricato il modulo ALSA per una scheda PCI EMU10K1:
#
modprobe snd-emu10k1
[Invio]
Per verificare che la scheda sia stata riconosciuta correttamente, si può «interpellare» il file di dispositivo /dev/sndstat
, corrispondente a /proc/asound/oss/sndstat
:
#
cat /dev/sndstat
[Invio]
#
cat /proc/asound/oss/sndstat
[Invio]
Sound Driver:3.8.1a-980706 (ALSA v1.0.2c emulation code) Kernel: Linux nanohost 2.6.3 #1 Sun Mar 7 13:36:24 CET \ |
ALSA è comunque un'infrastruttura complessa; in generale conviene affidarsi all'organizzazione prestabilita dalla propria distribuzione GNU/Linux, anche per quanto riguarda la configurazione del tipo di adattatore audio disponibile. Per esempio, la distribuzione GNU/Linux Debian, consente di riconfigurare ALSA con il comando dpkg-reconfigure alsa-base.
La complessità di ALSA richiede normalmente la presenza di uno script nella procedura di inizializzazione del sistema, per l'avvio e l'arresto della gestione dell'audio (per esempio /etc/init.d/alsa
). In questo modo, vengono caricati automaticamente i moduli necessari, in base alla configurazione, e così vengono anche creati al volo i file di dispositivo adatti.
La documentazione più aggiornata riferita alle schede audio è contenuta nel pacchetto dei sorgenti del kernel. Precisamente si tratta dei file contenuti a partire dalla directory sorgenti_linux/Documentation/sound/
.
I file di dispositivo relativi alle funzionalità audio sono descritti nel file sorgenti_linux/Documentation/devices.txt
, assieme a tutti gli altri. Il documento in questione è precisamente Linux allocated devices, curato da Peter H. Anvin. Quello che segue è l'estratto significativo di questo file, riferito alla gestione di OSS, utilizzati però anche per ALSA:
|
A titolo di esempio, dovendo creare il dispositivo /dev/audio
, si potrebbe usare il comando seguente:
#
mknod /dev/audio c 14 4
[Invio]
Sono importanti anche i permessi di questi file. In generale dovrebbero appartenere all'utente root e al gruppo audio, oppure sys in sua mancanza. Inoltre, per cominciare potrebbero avere i permessi di lettura e scrittura per tutti gli utenti: 06668.
In seguito è il caso di ridurre i permessi, in modo di abilitare l'accesso alle funzionalità audio solo ad alcuni utenti. |
ALSA richiede dei file di dispositivo aggiuntivi che si collocano normalmente nella directory /dev/snd/
, valendo anche in questo caso le stesse considerazioni fatte a proposito dei permessi. La cosa importante da considerare a proposito dei file di dispositivo usati specificatamente da ALSA è che questi vengono generati automaticamente, attraverso lo script snddevices (potrebbe trattarsi del file /usr/share/alsa-base/snddevices
, o qualcosa di simile). In generale, non è necessario preoccuparsi dell'esistenza di questo snddevices, perché l'infrastruttura ALSA dovrebbe essere organizzata in modo tale da funzionare senza interventi particolari da parte dell'utente; tuttavia, quando si tenta di gestire ALSA al di fuori dei canoni prestabiliti, se mancano questi file di dispositivo, non si può ottenere alcun risultato.
Volendo utilizzare il lettore CD-ROM per ascoltare dei CD audio normali, occorre regolare anche i permessi del dispositivo corrispondente al lettore stesso. In pratica, occorre prendersi cura del dispositivo a cui punta il collegamento simbolico /dev/cdrom
. Questo dispositivo, dal momento che è riferito a un'unità in sola lettura, potrebbe essere accessibile in lettura e scrittura a qualunque utente (a meno che si voglia controllare per qualche motivo). Per questo, di solito si attribuiscono i permessi 06668.
#
chmod 0666 /dev/cdrom
[Invio]
Quando l'elaboratore che dispone di scheda audio è collegato a una rete, potrebbero porsi dei problemi di sicurezza riguardo ai permessi per gli utenti comuni sui file di dispositivo di questa. Infatti, un utente che può accedere all'elaboratore, avrebbe la possibilità di attivare la scheda audio e ascoltare attraverso il microfono, ammesso che questo sia collegato. Nello stesso modo potrebbe attivare il canale della linea in ingresso e così anche tutte le altre fonti disponibili. Pertanto, generalmente, questi file di dispositivo sono sprovvisti del permesso di lettura per gli utenti diversi dal proprietario e dal gruppo di questi file. |
La scheda audio essenziale è semplicemente un mixer audio comprendente diversi ingressi e una o più uscite. I dispositivi più importanti relativi alla scheda audio sono /dev/audio
e /dev/dsp
. In particolare, il primo permette di trasmettere alla scheda dei file in formato digitale Sun, ovvero quelli che normalmente hanno l'estensione .au
. Volendo gestire l'audio in modo diretto, attraverso questo file di dispositivo, occorre convertire i file audio nel formato Sun (questo si ottiene di solito attraverso l'applicativo Sox). Nello stesso modo, leggendo da questo file di dispositivo, si ottiene un file in formato digitale Sun del segnale gestito o generato dalla scheda audio. In pratica:
$
cat mio_file.au > /dev/audio
[Invio]
Questo comando serve a eseguire il file mio_file.au
, mentre il prossimo serve a registrare per otto secondi (ogni secondo è un blocco di 8 Kibyte) generando il file registratore.au
:
$
dd if=/dev/audio of=registratore.au bs=8k count=8
[Invio]
Aumix(31) è un applicativo per la gestione delle funzionalità di miscelazione e di equalizzazione della scheda audio. Può essere usato in modo interattivo, richiedendo in questo caso lo schermo di un terminale a caratteri, oppure direttamente attraverso le opzioni della riga di comando. In particolare, nella modalità interattiva mostra solo i canali audio che possono essere controllati effettivamente.
Il funzionamento di Aumix e degli altri programmi analoghi non è perfetto. Alle volte possono apparire dei controlli che di fatto non producono alcun risultato, o peggio, può anche succedere che qualche livello sonoro esistente non sia accessibile. Purtroppo, molto dipende dalla qualità del codice scritto nel kernel per la gestione della scheda audio di cui si dispone. |
La figura 30.122 mostra il funzionamento interattivo di Aumix, che si ottiene avviando l'eseguibile aumix senza indicare alcun argomento. In particolare si fa riferimento a una scheda audio SoundBlaster standard a 16 bit.
|
Tanto per rendersi conto di questa variabilità nell'apparenza di Aumix, si può osservare anche la figura 30.123 che mostra cosa accade con una vecchia scheda SoundBlaster a 8 bit.
|
I canali stereofonici hanno anche la possibilità di essere bilanciati, come si vede intuitivamente dalle figura. Per selezionare un canale si possono utilizzare i tasti [freccia-su] e [freccia-giù]; per passare alla regolazione del bilanciamento si può utilizzare il tasto di tabulazione, [Tab], così come lo si può usare per tornare indietro all'elenco dei canali. Infine i tasti [freccia-sinistra] e [freccia-destra] permettono di regolare il volume del canale o di cambiare il bilanciamento, a seconda di dove si trova il cursore. È interessante notare che anche il mouse funziona, se gestito attraverso il demone gpm.
A fianco di alcuni livelli di volume appare la lettera «P», oppure la lettera «R». La prima sta per play, mentre la seconda sta per record. In pratica, i canali contrassegnati con la lettera «P» rappresentano un segnale in ingresso nel mixer audio, diretti semplicemente all'amplificatore finale (le uscite normali della scheda audio). Invece, i canali contrassegnati con la lettera «R», oltre che essere diretti all'amplificatore finale, sono utilizzati per il campionamento del segnale (di solito uno soltanto) ed è ciò che si riesce a leggere dal dispositivo /dev/audio
.
Generalmente è solo il canale del microfono ad avere la sigla «R» e questo per ovvie ragioni. Tuttavia, è possibile modificare il comportamento di alcuni canali utilizzando la [barra-spaziatrice], oppure il mouse (basta fare un clic sulla lettera per scambiarne il valore).
|
L'eseguibile aumix è tutto ciò che compone l'applicativo omonimo. In modo particolare, le opzioni possono servire per regolare il volume di un certo canale (purché questo abbia una corrispondenza con la scheda audio disponibile effettivamente), oppure per conoscere il livello attuale o ancora per scambiare le modalità «R» (record) e «P» (play).
aumix [opzioni_di_canale] [altre_opzioni] |
|
|
Segue la descrizione di alcuni esempi.
$
aumix -v 70
[Invio]
Regola il volume generale al 70 %.
$
aumix -m 0 -l R
[Invio]
Regola il volume del canale microfonico a zero e indica la linea di ingresso come canale in registrazione.
La configurazione di Aumix consiste semplicemente dei file ~/.aumixrc
. Il file di configurazione personale viene creato utilizzando l'eseguibile aumix con l'opzione -S, oppure quando il programma funziona in modalità interattiva, attraverso la pressione del tasto [s] (purché la configurazione locale sia riferita all'uso della lingua inglese). Il file di configurazione non viene caricato automaticamente: lo si può richiedere attraverso l'opzione -L, oppure attraverso il tasto [l] (anche in questo caso vale la cosa solo per la lingua inglese).
Quando viene caricata la configurazione, se il file ~/.aumixrc
manca, Aumix fa riferimento a /etc/aumixrc
, che potrebbe essere ottenuto semplicemente copiando una configurazione personale che si ritiene adatta a livello generale, in mancanza d'altro.
A titolo di esempio viene mostrato il contenuto di uno di questi file di configurazione, dove il significato delle righe che lo compongono dovrebbe essere intuitivo.
|
Alcune distribuzioni GNU/Linux utilizzano Aumix per memorizzare e ripristinare le regolazioni della scheda audio. In pratica, nella procedura di inizializzazione del sistema si fa in modo di salvare in un file, presumibilmente /etc/aumix
, i valori utilizzati per ultimi durante la fase di arresto, mentre dallo stesso file vengono riletti durante la fase di avvio.
La gestione audio ALSA è accompagnata solitamente da programmi di servizio specifici; in particolare dei mixer audio molto sofisticati: Alsamixer(32) e Alsamixergui.(33) Il primo funziona su un terminale a caratteri, mentre il secondo è fatto per la grafica di X; entrambi hanno in comune delle opzioni per la riga di comando, anche se di solito vengono utilizzati senza fornirne alcuna:
alsamixer [opzioni] |
alsamixergui [opzioni] |
|
Il funzionamento di Alsamixer e di Alsamixergui è abbastanza intuitivo: i tasti freccia, usati orizzontalmente permettono di selezionare il cursore a slitta, mentre usati verticalmente permettono di cambiare il volume.
Un mixer generico per la grafica, che può essere utile, è Gnome-volume-control, che fa parte del pacchetto Gnome-media. (34) Il suo utilizzo è molto semplice e di solito non si usano opzioni nella riga di comando:
gnome-volume-control [opzioni] |
Per verificare il funzionamento del sistema di registrazione e di riproduzione di brani campionati, si possono usare direttamente i dispositivi /dev/audio
, /dev/dsp
(eventualmente anche quelli specifici di ALSA: /dev/snd/pcmC0D0c
per l'acquisizione e /dev/snd/pcmC0D0p
per l'esecuzione). Entrambi permettono di leggere il risultato di un campionamento e di riprodurre gli stessi brani se questi vengono scritti sugli stessi dispositivi.
Il primo dei due file di dispositivo, /dev/audio
, fa riferimento al formato standard della Sun, semplificato al massimo. I file audio con questo formato hanno normalmente l'estensione .au
. Il secondo, /dev/dsp
, rappresenta un formato audio grezzo.
Per «registrare» da questi dispositivi, basta leggerli e inviare ciò che si ottiene verso un file normale. Lo stesso file può essere diretto al dispositivo attraverso cui è stato generato, ottenendone la riproduzione. Tuttavia, per registrare occorre selezionare un canale dalla scheda audio, specificando che per questo è abilitata la registrazione. In generale si può trattare del canale microfonico, di quello del CD e della linea di ingresso esterna. In pratica, utilizzando Aumix, si tratta di avviare l'eseguibile aumix con l'opzione -m, -c o -l, rispettivamente, con l'argomento R. In queste condizioni, 8 Kibyte corrispondono a un secondo di riproduzione audio, di conseguenza, si può utilizzare uno dei due comandi seguenti per campionare e memorizzare per un minuto in un file:
$
dd if=/dev/audio of=registratore.au bs=8k count=60
[Invio]
$
dd if=/dev/dsp of=registratore bs=8k count=60
[Invio]
Per riprodurre questi file, si devono utilizzare gli stessi dispositivi da cui sono stati generati. Rispettivamente, valgono i due comandi seguenti.
$
cat registratore.au > /dev/audio
[Invio]
$
cat registratore > /dev/dsp
[Invio]
Quando il sistema di gestione dell'audio avviene attraverso ALSA, i file di dispositivo /dev/audio
e /dev/dsp
continuano a essere disponibili, tuttavia si potrebbero usare anche altri file di dispositivo. A titolo informativo viene annotato come potrebbe essere usato Sox, ammesso che sia stato compilato con il supporto al formato audio di ALSA. Per registrare:
$
sox -t alsa -r 44100 -w -u /dev/snd/pcmC0D0c
\
\ registratore.wav
[Invio]
Per riprodurre:
$
sox mio_file.wav -t alsa /dev/snd/pcmC0D0p
[Invio]
|
Wavtools(35) è un pacchetto per l'esecuzione e la registrazione di file audio in formato WAV-RIFF. Utilizza in particolare il dispositivo /dev/dsp
. Si compone di quattro eseguibili: wavr e gwavr per la registrazione; wavp e gwavp per l'esecuzione.
wavr [opzioni] |
gwavr [opzioni] |
wavp file_wav |
gwavp file_wav_gsm |
In pratica, non c'è bisogno di opzioni per eseguire un file attraverso wavp o gwavp. La lettera «g» iniziale di gwavr e gwavp, indica che si tratta della versione predisposta per un formato WAV compresso utilizzando l'algoritmo GSM.
|
Sound-recorder (36) è un pacchetto per l'esecuzione e la registrazione di file audio non compressi (WAV-RIFF e altri). Utilizza il dispositivo /dev/dsp
. Si compone di alcuni eseguibili: sound-recorder e cdsound-recorder per la registrazione; play-sample per la riproduzione.
sound-recorder [opzioni] file_audio |
cdsound-recorder [opzioni] suffisso_file_audio |
play-sample [opzioni] file_audio |
In pratica, non c'è bisogno di opzioni per eseguire un file attraverso play-sample, a meno di voler richiedere un comportamento diverso da quello predefinito per il tipo di file che si va a eseguire.
Sia sound-recorder, sia cdsound-recorder si limitano a registrare ciò che proviene dalla scheda audio, purché sia abilitata la registrazione sulla linea prevista. Questo serve soprattutto a comprendere che cdsound-recorder non estrae le tracce da un CD audio, ma si limita a eseguirle, per registrare un file audio corrispondente. |
|
Segue la descrizione di alcuni esempi.
$
sound-recorder -f wav -c 2 -s 44100 -S 07:00
\
\ musica.wav
[Invio]
Registra per sette minuti in un file WAV-RIFF stereofonico, con campionamento a 44 100 Hz. Il file che si ottiene è musica.wav
nella directory corrente.
$
cdsound-recorder -f wav -c 2 -s 44100 -l 1,3,5-7
\
\ musica.wav
[Invio]
Avvia la registrazione di una serie di file in un file WAV-RIFF stereofonico, con campionamento a 44 100 Hz, a partire dalle tracce uno, tre, cinque, sei e sette di un CD audio. I file che si ottengono hanno il suffisso musica.wav
, iniziando con il numero di traccia e un trattino basso. Per esempio, in questo caso il file della prima traccia è 01_musica.wav
.
$
play-sample musica.wav
[Invio]
Esegue il file musica.wav
.
Per la registrazione e la riproduzione di file attraverso il sistema ALSA, si possono usare anche i programmi Arecord e Aplay, che fanno parte del pacchetto Alsa-utils.(37) Si tratta di programmi da usare a riga di comando:
arecord [opzioni] file_da_registrare |
aplay [opzioni] file_da_eseguire... |
I due programmi condividono delle opzioni, con le quali si specificano le caratteristiche dei file da registrare o da eseguire.
|
Segue la descrizione di alcuni esempi.
$
arecord -d 10 -t wav -f S16_LE -t 2 -r 44100
\
\ prova.wav
[Invio]
Registra per dieci secondi in un file WAV-RIFF stereofonico, con campionamento a 44 100 Hz. Il file che si ottiene è prova.wav
nella directory corrente.
$
arecord -d 10 -t wav -f cd prova.wav
[Invio]
Esattamente come nell'esempio precedente, sfruttando l'abbreviazione dell'opzione -f cd.
$
aplay prova.wav
[Invio]
Esegue il file prova.wav
, senza bisogno di specificarne le caratteristiche, trattandosi di un formato con WAV-RIFF, che pertanto è provvisto di un'intestazione con le informazioni necessarie a individuarlo correttamente.
$
arecord -d 10 -t raw -f S16_LE -t 2 -r 44100
\
\ prova.raw
[Invio]
Registra per dieci secondi in un file stereofonico, senza intestazione (16 bit con segno little endian), con campionamento a 44 100 Hz. Il file che si ottiene è prova.raw
nella directory corrente.
$
arecord -d 10 -t raw -f cd prova.raw
[Invio]
Esattamente come nell'esempio precedente, sfruttando l'abbreviazione dell'opzione -f cd.
$
aplay -t raw -f S16_LE -t 2 -r 44100 prova.raw
[Invio]
Esegue il file prova.raw
, che richiede l'indicazione delle sue caratteristiche, trattandosi di un formato senza intestazione.
$
aplay -t raw -f cd prova.raw
[Invio]
Esattamente come nell'esempio precedente, sfruttando l'abbreviazione dell'opzione -f cd.
Sox(38) è attualmente lo strumento più importante di conversione di file audio. In linea di massima, Sox è in grado di convertire da un formato a un altro, anche se i passaggi da una frequenza di campionamento a un'altra non danno risultati ottimi; inoltre riesce a introdurre degli effetti interessanti.
Meritano attenzione alcuni effetti che Sox permette di introdurre attraverso la rielaborazione digitale del segnale: è possibile estrarre solo una porzione delle frequenze audio; si possono introdurre effetti di eco e di vibrato; è possibile invertire il brano.
Una particolarità di Sox è quella di distinguere i formati audio in base all'estensione dei nomi dei file (in quasi tutti i casi). La tabella 30.137 riporta l'elenco di alcuni di questi; per un elenco completo e una descrizione più dettagliata si può consultare la pagina di manuale sox(1).
|
L'eseguibile sox è quello che svolge tutto il lavoro dell'applicativo Sox. Purtroppo la sintassi è un po' confusa e lo schema che si vede qui è già una semplificazione di quella completa:
sox [opzioni_generali] [opzioni_di_formato] \ |
sox [opzioni_generali] [opzioni_di_formato] file_in_ingresso -e [effetti] |
In generale è necessaria l'indicazione di un file in ingresso e di uno in uscita. Per stabilire il formato di un file si fa riferimento all'estensione utilizzata nel nome; eventualmente si possono realizzare anche dei condotti indicando un trattino orizzontale (-) al posto del nome del file corrispondente (in ingresso o in uscita), però in questo caso occorre indicare un'opzione apposita per specificare il formato a cui si fa riferimento.
Le opzioni di formato si applicano al file indicato subito dopo; in pratica, quelle che appaiono prima del file in ingresso, si riferiscono a questo, mentre quelle indicate dopo il file in ingresso, riguardano il file in uscita.
Gli effetti che Sox è in grado di generare si indicano attraverso delle parole chiave collocate alla fine della riga di comando, dopo l'indicazione del file in uscita.
|
|
|
Segue la descrizione di alcuni esempi; tuttavia, tra questi non vengono mostrati casi in cui si cambia il formato dei file audio, perché si tratta di un'operazione delicata e per questo è meglio leggere la documentazione originale. In particolare, non conviene tentare di ridurre la frequenza di campionamento, perché di solito il risultato è pessimo.
$
sox prova.wav prova-vibrato.wav vibro 5 0.7
[Invio]
Legge il file prova.wav
(di tipo WAV, data l'estensione) e lo trasforma nel file prova-vibrato.wav
, mantenendo le stesse caratteristiche riguardo al campionamento, ma aggiungendo un effetto vibrato.
$
sox prova.wav prova-eco.wav echo 1 0.7 300 0.3
[Invio]
Legge il file prova.wav
(di tipo WAV, data l'estensione) e lo trasforma nel file prova-eco.wav
, mantenendo le stesse caratteristiche riguardo al campionamento, ma aggiungendo un effetto eco. Per la precisione, il guadagno in ingresso rimane inalterato; il guadagno in uscita del suono principale viene attenuato al 70 %; l'effetto eco ha un ritardo di 300 ms e ha un volume pari al 30 % rispetto al suono normale.
$
sox prova.wav prova-1000.wav band 1000 500
[Invio]
Legge il file prova.wav
(di tipo WAV, data l'estensione) e lo trasforma nel file prova-1000.wav
, mantenendo le stesse caratteristiche riguardo al campionamento, ma filtrando il segnale in modo da selezionare in particolare le frequenze da 750 Hz a 1 250 Hz.
$
sox prova.wav -t .wav - band 1000 500
\
\ > prova-1000.wav
[Invio]
Come nell'esempio precedente, ma in questo caso il file in uscita viene ottenuto attraverso lo standard output, per cui occorre specificare il tipo con l'opzione -t.
$
sox prova.wav -r 48000 -c 2 prova-48.wav resample
[Invio]
Legge il file prova.wav
e lo trasforma nel file prova-49.wav
, ricampionandolo a 48 000 Hz e garantendo un risultato a due canali audio (anche se l'origine fosse monofonica).
$
sox prova.wav -t ossdsp -w -s /dev/dsp
[Invio]
Esegue il file prova.wav
, attraverso il file di dispositivo /dev/dsp
. Si può osservare che viene specificato il formato dei campioni inviati al file di dispositivo, con le opzioni -w (16 bit) e -s (signed linear), mentre non è necessario specificare la quantità di canali e la frequenza di campionamento che rimangono inalterati rispetto al file originale.
$
sox -t ossdsp -w -s -c 2 -r 44100 /dev/dsp
\
\ -t .wav prova.wav
[Invio]
Registra nel file prova.wav
ciò che ottiene dal file di dispositivo /dev/dsp
, in modo stereofonico, campionando a 44 100 Hz. Si può osservare che viene specificato il formato dei campioni ricevuti dal file di dispositivo, con le opzioni -w (16 bit) e -s (signed linear).
Sox è in grado di ridurre il rumore di fondo di una registrazione attraverso l'uso di due «effetti» particolari. Per prima cosa occorre estrarre dalla registrazione una porzione di silenzio, che contiene il rumore di fondo; successivamente si fa leggere a Sox il file contenente il rumore, per generare un file che ne riassume le caratteristiche; al termine, si fa rielaborare il file audio completo, fornendo le informazioni raccolte sulle caratteristiche del rumore, per generare un file filtrato. Per capire il meccanismo, conviene fare un esempio, che viene mostrato nei passi successivi.
Il file reg.wav
contiene del rumore di fondo; attraverso un programma apposito, si estrae una piccola porzione di silenzio, che viene salvata nel file rumore.wav
.
Si fa leggere a Sox il file rumore.wav
, per generare il «profilo di rumore», nel file rumore.prof
:
$
sox rumore.wav -t .wav /dev/null noiseprof
\
\ rumore.prof
[Invio]
Il contenuto del file rumore.prof
può essere simile a quello seguente:
|
Si rielabora il file reg.wav
con Sox, associando le informazioni sul rumore, contenute nel file rumore.prof
:
$
sox reg.wav reg-2.wav noisered rumore.prof 0.1
[Invio]
Si ottiene il file reg-2.wav
filtrato.
Come si vede dagli esempi, sono stati usati due effetti: noiseprof e noisered.
|
Con Sox è possibile ottenere delle informazioni statistiche dettagliate su un file sonoro, attraverso la sua lettura completa. Per questo si usa l'effetto stat che riguarda solo il file in ingresso, mentre quello in uscita può essere omesso se si utilizza l'opzione -e.
|
Segue la descrizione di alcuni esempi.
$
sox prova.wav -t .wav /dev/null stat 2> prova.stat
[Invio]
Legge il file prova.wav
e passa il suo contenuto, senza trasformazioni al file di dispositivo /dev/null
. Durante la lettura, genera il file prova.stat
con le statistiche accumulate.
$
sox prova.wav -e stat 2> prova.stat
[Invio]
Come nell'esempio precedente, senza bisogno di usare il file di dispositivo /dev/null
per ignorare il file in uscita.
$
sox prova.wav -e stat -v 2> volume.max
[Invio]
Estrae soltanto il valore del volume e lo inserisce nel file volume.max
.
Il file prova.stat
degli esempi mostrati, potrebbe avere l'aspetto seguente:
|
Invece, il risultato ottenuto con l'effetto stat -v si limita al valore del campo Volume adjustment::
|
Il valore ottenuto in questo modo, soprattutto se si usa l'effetto stat -v, può essere applicato per regolare in modo uniforme il volume di diversi file, come nello script seguente:
|
In pratica, i file indicati come argomenti nella riga di comando dello script, vengono scanditi uno per uno, in modo da generarne la statistica del volume, così da generare poi, per ognuno, un nuovo file con l'estensione aggiuntiva .v.wav
e con il volume aggiustato.
Sox è accompagnato generalmente da due script: play e rec. Il loro scopo è quello di facilitare l'ascolto e la registrazione, facendo affidamento sulle capacità di Sox di convertire al volo il formato di questi file.
play file |
rec file |
Quando non si ha la possibilità di utilizzare un programma più comodo, questa potrebbe essere l'unica risorsa per riuscire a gestire con semplicità le funzionalità audio.
A volte, questi script sono errati, probabilmente per un piccolo errore di sintassi nella scrittura di una struttura di selezione (case). Per semplificare le cose, viene mostrato il contenuto essenziale di questi due script. L'esecuzione di un brano registrato in un file avviene in pratica con un comando come quello seguente:
sox file_da_eseguire -t ossdsp -w -s /dev/dsp |
Naturalmente, prima del file potrebbero essere aggiunte altre opzioni, se lo si ritiene opportuno; nello stesso modo si potrebbero aggiungere delle opzioni riferite a effetti da inserire nell'audio, indicandole alla fine del comando. In modo analogo, si può registrare un file, ma in tal caso è obbligatorio specificare il tipo di campionamento, se non si vuole ottenere soltanto un file monofonico di bassa qualità; il modello seguente permette di ottenere un campionamento alla qualità di un CD:
sox -t ossdsp -w -s -c 2 -r 44100 /dev/dsp file_da_registrare |
Valgono le stesse considerazioni fatte per il caso dell'esecuzione di un brano, in particolare, le opzioni riferite al file che si vuole ottenere vanno messe subito prima di questo file, cioè dopo l'indicazione del dispositivo /dev/dsp
.
Normalize(39) è un programma ottimo per uniformare il livello audio nei file WAV-RIFF, che dispone anche di uno script per facilitare l'operazione con file in formato MP3 e Ogg Vorbis.
normalize [opzioni] file_wav... |
Il programma eseguibile normalize è quello che svolge il lavoro, sui file WAV-RIFF. Si usa come si vede nel modello sintattico, dove dopo le opzioni si mette l'elenco dei file da modificare: i file in questione vengono sovrascritti con la modifica del volume audio.
Il programma è ricco di opzioni, ma due in particolare sono importanti, con le quali si specifica una modalità particolare nel calcolo del volume da applicare. In condizioni normali, il volume dei file viene regolato in modo indipendente dagli altri; a questa regola si può eccepire con due modalità che si escludono a vicenda: con la modalità «mix» tutti i file indicati come argomento vengono regolati al volume medio che hanno già nel loro insieme; con la modalità «batch» il volume viene regolato mantenendo invariato il rapporto relativo tra i vari file, come se si trattasse di un file soltanto.
|
Segue la descrizione di alcuni esempi.
$
normalize file_1.wav file_2.wav file_3.wav
[Invio]
Regola a un livello ottimale il volume dei file file_1.wav
, file_2.wav
e file_3.wav
.
$
normalize --mix file_1.wav file_2.wav file_3.wav
[Invio]
Regola a un livello medio comune il volume dei file file_1.wav
, file_2.wav
e file_3.wav
.
$
normalize --batch file_1.wav file_2.wav file_3.wav
[Invio]
Regola a un livello ottimale il volume dei file file_1.wav
, file_2.wav
e file_3.wav
, mantenendo il rapporto relativo tra di loro.
Si veda la pagina di manuale normalize(1) per le altre opzioni disponibili; inoltre si veda normalize-mp3(1) o normalize-ogg(1) per intervenire direttamente su file audio compressi.
Xwave(40) è un applicativo relativamente completo per la registrazione, la modifica e l'esecuzione di brani musicali registrati in vari formati, in particolare in WAV-RIFF. Si tratta di un applicativo per X. Nella figura 30.148 si vede il pannello principale dopo aver caricato un file WAV.
Il programma eseguibile che svolge tutto il lavoro è xwave. Non richiede opzioni e il suo funzionamento è intuitivo. È interessante la possibilità offerta di modificare un brano, per esempio usando il taglia-incolla (basta selezionare una porzione della traccia con il mouse), oppure introducendo degli effetti.
Può darsi che la registrazione non sia perfetta, ma questo è un particolare trascurabile rispetto alle altre possibilità di questo applicativo.
Audacity(41) è un applicativo molto sofisticato per la registrazione di un progetto musicale, composto anche da più tracce, in grado di esportare il risultato in formati audio comuni. Qui, Audacity viene considerato semplicemente come un ottimo sistema di registrazione, trascurando la realizzazione di un progetto musicale vero e proprio.
audacity |
Generalmente, l'eseguibile audacity si utilizza senza argomenti, come si vede nel modello sintattico semplificato.
Se si seleziona il bottone della registrazione, Audacity inizia a registrare prelevando il segnale dalla linea attiva per questo, con una campionatura prestabilita. Si può osservare che nella figura risulta attiva la linea di ingresso esterno (line-in); inoltre è accessibile il controllo del guadagno di ingresso.
Il modo in cui vengono raccolti i campioni in fase di registrazione si stabilisce attraverso la configurazione, che si raggiunge con la voce {Preferences
} del menù {File
}.
Una volta appurato che l'ingresso è quello giusto, che il livello sonoro è appropriato, che il tipo di campionamento è conforme alla qualità che si vuole ottenere, si può selezionare il bottone di registrazione.
Se si ferma la registrazione, la traccia si conclude; se poi si avvia nuovamente la registrazione, viene aperta un'altra traccia. Per salvare la registrazione in un formato comune, la si deve «esportare», per esempio con la voce {Export as WAV
} del menù {File
}.
La sintesi vocale si ottiene a partire da campioni fonetici, utilizzati attraverso un programma che sia in grado di interpretare un testo e di tradurlo nella sequenza di fonemi adatti a una certa lingua.
eSpeak(42) è un programma molto semplice per la lettura automatica di un testo per varie lingue. Si utilizza senza bisogno di grafica, oppure viene attivato attraverso programmi frontali. A ogni modo, il programma principale può ricevere il testo da sintetizzare in tre modi alternativi:
espeak [opzioni] [-v linguaggio] testo |
espeak [opzioni] [-v linguaggio] < testo |
espeak [opzioni] [-v linguaggio] -f file_testo |
Come si vede, si può fornire il testo come ultimo argomento, oppure attraverso lo standard input, oppure con l'opzione -f, all'interno di un file. Inoltre, un'altra opzione fondamentale è -v, con la quale si specifica il linguaggio secondo cui va sintetizzato il testo.
La codifica del testo atteso da eSpeak UTF-8, oppure, una codifica a 8 bit appropriata al linguaggio scelto.
Segue la descrizione di alcuni esempi elementari:
$
espeak -v it "Ciao, come stai?"
[Invio]
Legge e sintetizza, attraverso l'adattatore audio, il testo «Ciao, come stai?»
$
echo "Ciao, come stai?" | espeak -v it
[Invio]
Fa esattamente la stessa cosa dell'esempio precedente.
$
espeak -v it -f testo.txt
[Invio]
Legge e sintetizza quanto contenuto nel file testo.txt
.
Non sono disponibili le regole di sintesi per tutte le lingue esistenti e non è detto che la sigla usata per la selezione debba corrispondere agli standard; inoltre nel caso della lingua inglese si può anche scegliere tra intonazioni differenti. Pertanto, è bene sapere tra cosa si può scegliere:
$
espeak --voices
[Invio]
Pty Language Age/Gender VoiceName File Other Langs 5 af M afrikaans af 5 cy welsh-test cy 5 de M german de 5 el M greek_test el 1 en-uk M english en/en 1 en-uk F female en/en-f 2 en-uk M en/en7 en/en7 3 en-uk 55M en/en4 en/en4 4 en-uk 70M old en/en8 5 en-uk M blocked en/en6 5 en-uk default default 5 en-uk M echo en/en1 5 en-uk fuzzy en/en2 1 en-uk-north F en/en-n-f en/en-n-f 1 en-uk-north M lancashire en/en-n (en-uk 3) 5 en-uk-rp M english_rp en/en-rp (en-uk 4) 4 en-uk-wmids M english_wmids en/en-wm 5 eo M esperanto eo 5 es M spanish_test es 5 fi finnish-test fi 5 it M italian it 5 pl M polish_test pl 5 ru M russian_test ru |
Come si vede, l'opzione --voices consente di avere un elenco di ciò che è disponibile. Nel caso della lingua inglese, la scelta è interessante: tra le altre cose è disponibile anche un tono femminile:
$
espeak -v en-f "My dear, I love you so much!"
[Invio]
A parte la scelta della lingua, ci sono diverse opzioni che possono servire per migliorare la comprensibilità del testo letto. La cosa forse più importante è la velocità di lettura, che si controlla con l'opzione -s (speed):
$
espeak -s 120 -v it "Sostituisci il dischetto!"
[Invio]
L'argomento dell'opzione rappresenta la quantità di parole al minuto. Essendo il valore predefinito pari a 160, in questo esempio si ottiene una lettura leggermente più lenta del solito.
Oltre alla velocità di lettura, anche il tono di voce (l'intonazione) può essere regolato, questa volta con l'opzione -p (pitch), che attende un argomento composto da un numero che va da 0 a 99: più è grande, più acuto è il tono di voce. Il tono predefinito corrisponde al valore 50, pertanto, l'esempio seguente sintetizza il testo con il tono più acuto possibile:
$
espeak -p 99 -v it "Mamma, me lo compri?"
[Invio]
In condizioni normali, eSpeak legge un testo puro e semplice, sintetizzandolo attraverso l'adattatore audio. Diversamente, con l'opzione -m (markup), che si usa senza argomenti, è possibile fornire anche un file HTML, come si vede nell'esempio seguente:
$
espeak -v it -m -f testo.html
[Invio]
È anche possibile produrre un file WAV-RIFF, senza emettere alcun suono attraverso l'adattatore audio, con l'opzione -w (wave). Nell'esempio seguente il file testo.txt
viene sintetizzato nel file testo.wav
:
$
espeak -v it -f testo.txt -w testo.wav
[Invio]
MIDI sta per Music instrument digital interface, ovvero un'interfaccia digitale per gli strumenti musicali. Semplificando molto le cose, l'idea alla base di MIDI è quella di avere una tastiera musicale collegata a un generatore di suoni. Il generatore di suoni può essere un generatore di forme d'onda, con più o meno armoniche, oppure un riproduttore di modelli campionati, ovvero suoni più o meno reali, memorizzati (campionati) in precedenza. Nel secondo caso, i modelli di suoni devono poter essere riprodotti a tonalità differenti.
Il generatore di suoni di un sistema MIDI può essere comandato direttamente da una tastiera (o da un altro strumento elettronico adeguato), oppure da un programma che legge un file: di solito un file in formato «MIDI». Un file del genere contiene quindi una sorta di spartito elettronico, in cui sono indicati gli strumenti e le note che questi devono suonare: è competenza del generatore di suoni il riprodurre gli strumenti nel modo migliore possibile.
Un file MIDI contiene tutte le informazioni necessarie a ripetere un'esecuzione elettronica, attraverso un generatore di suoni adeguato. Le informazioni che contiene un file MIDI sono simili, concettualmente, a quelle di uno spartito musicale, con la differenza sostanziale che la definizione della durata delle note può essere più libera.
Una semibiscroma, che dovrebbe essere la nota più breve, ha una durata di un sessantaquattresimo, mentre in un file MIDI si possono annotare anche intervalli più piccoli, oltre al fatto che le durate delle note possono non essere così esatte come si scrive in uno spartito classico. |
Un file MIDI (MIDI standard file format 1) può contenere un massimo di 16 canali, ognuno dei quali si può dividere in tracce. Tuttavia, le tracce di uno stesso canale possono contenere informazioni riferite a un solo strumento (anche se suonato simultaneamente), pertanto si possono gestire un massimo di 16 strumenti differenti in modo simultaneo.
La figura 30.156, ottenuta da un programma grafico per l'analisi e l'esecuzione di file MIDI, dovrebbe dare l'idea di come questi file sono organizzati. Si può notare lo schema quadrettato che divide le ottave in dodici semitoni (come suggerisce la schematizzazione di una tastiera sul bordo sinistro) e in battute (si vedono le prime tre battute), all'interno del quale, l'andamento dei canali viene evidenziato con colori differenti.
A proposito di file MIDI, si utilizzano dei termini inglesi che a prima vista possono risultare abbastanza misteriosi. La tabella seguente cerca di spiegare a cosa si riferiscono alcuni di questi termini.
|
Un file MIDI può essere ottenuto da un'esecuzione manuale, attraverso una tastiera MIDI, collegata a un'interfaccia adatta assieme al programma relativo, oppure attraverso la scrittura di uno spartito, o di qualcosa di simile, che viene poi convertito in un file MIDI.
Esiste un sistema di composizione tipografico per la produzione di spartiti, in grado di generare anche file MIDI, denominato LilyPond (sezione 57.2); tuttavia, nella prossima sezione viene mostrato l'uso di Midge, un programma che genera file MIDI a partire da un sorgente scritto con un proprio linguaggio, simile concettualmente a quello di LilyPond, il quale però non può produrre uno spartito tradizionale.
L'esecuzione di un file MIDI all'interno di un elaboratore richiede la disponibilità di un programma in grado di interpretarlo correttamente, per comandare un generatore di suoni. Questo generatore può essere un'apparecchiatura esterna specializzata, collegata alla scheda audio attraverso una porta speciale; può essere un sintetizzatore incorporato nella scheda audio; infine può essere un programma che genera un file audio pronto da mandare alla scheda. Qui viene presa in considerazione solo l'ultima di queste possibilità, con il programma Timidity++, che attraverso una serie di file di modelli di suoni (patch), è in grado di creare al volo un file in formato WAV-RIFF da mandare immediatamente alla sistema di riproduzione audio.
Midge(43) è un programma scritto in Perl, che si avvale del modulo MIDI-Perl,(44) in grado di generare file MIDI a partire da file sorgenti scritti secondo un proprio linguaggio, ma capace anche di trasformare un file MIDI in un sorgente facile da modificare.
Probabilmente, la funzionalità più importante di Midge sta proprio nella sua capacità di trasformare un file MIDI in qualcosa che può essere gestito come file di testo puro e semplice; diversamente, la scrittura di un sorgente Midge potrebbe essere anche troppo complessa.
$
midi2mg -o bwv777.mg bwv777.midi
[Invio]
L'esempio mostra l'uso dello script midi2mg per ottenere un file sorgente a partire da un file MIDI. In questo caso si genera il sorgente bwv777.mg
, a partire dal file MIDI bwv777.midi
. Il contenuto di questo sorgente ottenuto potrebbe essere simile all'estratto seguente:
|
In questo modo, si intuisce la sintassi generale del formato usato da Midge: un'intestazione definita con la sezione @head{}, seguita da un corpo, definito dalla sezione @body{}, che contiene la descrizione dei canali, contenuti nei blocchi @channel{}.
È bene precisare che ogni blocco @channel{} descrive in realtà una traccia, abbinata però al canale indicato per numero. In pratica, dal momento che lo strumento è lo stesso nei due canali, si potrebbero usare due tracce dello stesso canale, in questo modo:
|
La notazione simbolica delle note richiama il nome usato nella lingua inglese, tuttavia si rimanda alla documentazione originale per l'interpretazione corretta di questa parte del formato usato da Midge (pagina di manuale midge(1)).
|
Se si intende usare Midge per ritoccare dei file MIDI già disponibili, sono molto importanti alcuni parametri che vengono fissati con direttive simili all'assegnamento di variabili:
$parametro valore_attribuito |
Per esempio, il parametro $tempo serve a definire la velocità di esecuzione, in quantità di battute per minuto. Nel caso dell'esempio mostrato, si può osservare che questa velocità (assieme anche al tempo vero e proprio, cioè la frazione che determina la lunghezza di ogni battuta) è stata definita all'interno delle direttive @channel, mentre sarebbe più appropriata all'esterno, nella direttiva @head, ammesso che non debba cambiare nel corso dell'esecuzione delle tracce. L'esempio seguente mostra qualche piccolo ritocco a quanto già visto sopra:
|
La tabella 30.162 riassume alcuni parametri importanti di Midge, che possono servire per ritoccare un file MIDI già disponibile.
|
|
La compilazione di un sorgente Midge si ottiene semplicemente con lo script midge:
$
midge bwv777.mg
[Invio]
In questo caso si compila il sorgente bwv777.mg
, ottenendo il file MIDI bwv777.mid
. Volendo specificare espressamente il nome del file MIDI da generare, si potrebbe usare l'opzione -o:
$
midge -o JSBach-BWV777.midi bwv777.mg
[Invio]
Come si può intuire, qui si intende ottenere il file MIDI JSBach-BWV777.midi
.
Timidity++(45) è un programma in grado di convertire il formato MIDI (e anche altri) in WAV-RIFF, utilizzando dei modelli di suoni (patch) memorizzati su file. In questo modo, attraverso Timidity++ è possibile riprodurre un file MIDI senza bisogno di un generatore di suoni esterno e senza bisogno di schede audio particolari.
Prima di mostrare il suo funzionamento è importante affrontare il problema dei modelli di suoni necessari alla conversione. I file in questione sono facili da reperire, ma può capitare che la propria distribuzione GNU non predisponga un pacchetto adeguato, oppure che questo non contenga dei modelli di suoni gradevoli. Infatti, dipende dai modelli la qualità della riproduzione di un file MIDI. Tanto per fare un esempio, se un'esecuzione prevede un clavicembalo, ma al posto di questo si sente un piano, si può percepire la melodia, ma non il suono che è stato previsto nel file MIDI; inoltre, il modello di uno strumento configurato male, potrebbe generare poi un suono «stonato», oppure a un volume sonoro non appropriato.
Generalmente, se disponibile, conviene installare la raccolta nota come Eawpatches,(46) dal momento che risulta contenere i modelli sonori migliori e configurati anche in modo accurato. Se si trova il pacchetto originale, lo si può installare dove si vuole nel file system; per esempio così:
#
cd /opt
[Invio]
#
tar xzvf ~/eawpats12_full.tar.gz
[Invio]
In questo modo, si ottiene l'inserimento dei file dei modelli sonori nella directory /opt/eawpats/
. Successivamente occorre prendere il file di configurazione per Timidity++ e collocarlo nella posizione prevista da Timidity++ stesso. Supponendo che si tratti della directory /etc/
, si deve agire come mostrato di seguito:
#
cp /opt/eawpats/linuxconfig/timidity.cfg
\
\ /etc/timidity.cfg
[Invio]
Quindi è necessario modificare questo file (/etc/timidity.cfg
) in modo da raggiungere i modelli sonori appena installati. Dovrebbe essere così:
|
Una volta installati questi file, si può passare a Timidity++, attraverso l'eseguibile timidity:
timidity [opzioni] file... |
Se non vengono indicate delle opzioni, i file vengono trasformati al volo e inviati al sistema di riproduzione audio.
Esistono molti modi per indicare i file da riprodurre. In particolare merita attenzione la possibilità di indicare lo standard input attraverso un trattino orizzontale (-) e anche la possibilità di indicare un URI di tipo HTTP o FTP. Inoltre, se il file indicato corrisponde a un archivio compresso di un formato comune, nella maggior parte dei casi è in grado di eseguire i file contenuti al suo interno.
|
Come si vede, in condizioni normali si usa l'eseguibile timidity senza opzioni, o al massimo con -in (oppure selezionando un'altra interfaccia preferita).
È molto difficile ridurre un file contenente informazioni sonore. In questo contesto, di solito, quando si parla di compressione, si fa riferimento a metodi di semplificazione delle informazioni memorizzate, basati sulla percezione umana. Questa «semplificazione» si traduce in pratica in una riduzione e distorsione nei suoni riprodotti.
In generale, il formato più comune per i file audio compressi è MP3, ovvero «MPEG-1 layer 3», «MPEG-2 layer 3» o «MPEG-2.5 layer 3». Lo standard MPEG definisce il formato e la decodifica dei dati, mentre non fissa un metodo per la codifica. Sulla codifica sono state sviluppate tecniche differenti, alcune delle quali sono brevettate. A causa di questo problema, lo sviluppo di software libero in grado di generare file MP3 è limitato alla produzione in forma di sorgenti, non potendo in pratica arrivare alla distribuzione di applicativi già compilati.
A fianco di MP3, si è sviluppato in tempi più recenti anche un formato senza brevetti, denominato Vorbis, trasportato normalmente in un contenitore Ogg, noto così con il nome Ogg Vorbis (si usa normalmente l'estensione .ogg
per i file), che offre prestazioni equivalenti a quelle di MP3.
In alternativa, esiste anche un formato compresso senza perdita, denominato FLAC, che eventualmente si trasporta in un contenitore Ogg (che diventa così un formato Ogg FLAC). Anche il formato FLAC è privo di brevetti ed è favorito così nell'ambito del software libero.
MP3info (47) è un programma molto semplice con lo scopo di estrarre le informazioni tipiche dai file MP3, con la possibilità di modificare i dati descrittivi. Si compone dell'eseguibile mp3info, che si utilizza secondo la sintassi seguente:
mp3info [opzioni] file_mp3... |
Se non si indica alcuna opzione, si ottengono le informazioni sui file in forma sintetica. Tuttavia, con l'opzione -F, o meglio ancora con l'opzione -f, si può controllare il modo in cui tali informazioni vengono fornite.
L'opzione -f prevede un argomento composto da una stringa contenente delle sequenze di escape, che si distinguono per il fatto che iniziano con il simbolo di percentuale (%). La tabella 30.166 riporta un elenco parziale di queste sequenze di escape, escludendo in particolare quelle che rappresentano una scelta sottoposta a una condizione. Per il loro approfondimento è sufficiente leggere la poca documentazione originale.
Con alcune shell, questi simboli di percentuale potrebbero essere interpretati in modo diverso, come nel caso di Midnight Commander. |
|
Per comprendere meglio il significato di tutto questo, l'esempio seguente consente di estrarre esattamente il nome dell'artista e il titolo della canzone (o di qualunque altra cosa si tratti), ponendo le due informazioni su righe differenti:
$
mp3info -f "%a%N%t" prova.mp3
[Invio]
Bla bla bla bla Pinco Pallino |
Volendo si potrebbe realizzare uno script per visualizzare tutto quello che c'è da sapere nel file, come nell'esempio seguente, in cui si può fare riferimento a un solo file alla volta:
|
MP3info consente anche la modifica di alcune di queste informazioni, ma ciò avviene attraverso opzioni apposite e le sequenze di escape dell'opzione -f non hanno alcun ruolo in questo contesto.
|
Segue la descrizione di alcuni esempi; in particolare, qui non si mostra un esempio con l'uso dell'opzione -f, perché già proposto in precedenza.
$
mp3info -t "Bla bla bla" -a "Pinco Pallino" -y "2001"
\
\ -g 112 prova.mp3
[Invio]
Imposta il titolo, l'artista, l'anno e il genere (tango) nel file prova.mp3
.
$
mp3info -p1
[Invio]
Mostra l'elenco dei generi in una sola colonna, secondo l'ordine numerico attribuito dallo standard.
LAME (48) è un progetto per la codifica in formato MP3 ed eventualmente anche in altri formati audio compressi. Il progetto produce esclusivamente del codice sorgente (compilabile facilmente) perché la distribuzione di pacchetti già compilati viene impedita di fatto dalla presenza di vari brevetti.
In un sistema GNU/Linux la compilazione di LAME avviene in modo molto semplice. Supponendo di disporre del file lame.tar.gz
e di volere installare i file a partire da /opt/lame/
, si potrebbe procedere nel modo seguente:
$
tar xzvf lame.tar.gz
[Invio]
$
cd lame
[Invio]
$
./configure --prefix=/opt/lame
[Invio]
$
make
[Invio]
$
su
[Invio]
#
make install
[Invio]
Naturalmente, occorre poi preoccuparsi di inserire il percorso /opt/lame/bin/
nella variabile di ambiente PATH. Si veda eventualmente quanto descritto nella sezione 7.1.
Al termine della compilazione si ottiene l'eseguibile lame, che può essere utilizzato secondo la sintassi seguente:
lame [opzioni] file_in_ingresso file_in_uscita |
In pratica, il primo argomento dopo le opzioni indica un file, solitamente in formato WAV-RIFF (salvo la specificazione di qualcosa di differente), mentre il secondo è il file MP3 che si vuole generare. Naturalmente, se si utilizza il carattere - al posto del nome dei file, si fa riferimento allo standard input e allo standard output rispettivamente.
|
Segue la descrizione di alcuni esempi.
$
lame -q 2 prova.wav prova.mp3
[Invio]
L'esempio mostra la situazione più comune di utilizzo, in cui si specifica l'opzione -q 2 per ottenere un buon risultato. In pratica, si ottiene il file prova.mp3
a partire da prova.wav
. Si intende che il file prova.wav
sia di tipo WAV-RIFF, 16 bit, stereo, 44 100 Hz.
$
lame -q 2 -p prova.wav prova.mp3
[Invio]
Come nell'esempio precedente, ottenendo però un file un po' più lungo, per l'aggiunta di un codice di controllo alla fine di ogni frame.
$
lame -q 2 -p -c prova.wav prova.mp3
[Invio]
Come nell'esempio precedente, con l'attivazione dell'indicatore del copyright.
$
lame -q 2 -p -c -tg 101
\
\ -tt "Conferenza sul software libero"
\
\ -ta "Pinco Pallino"
\
\ -ty "2001" prova.wav prova.mp3
[Invio]
Come nell'esempio precedente, con l'aggiunta di altre informazioni utili. Si osservi l'uso del genere 101.
$
lame --decode prova.mp3 prova.wav
[Invio]
Riproduce il file prova.wav
, completo di intestazione, a partire dal file prova.mp3
.
Volendo generare file in formato MPEG, ma senza incorrere nel problema dei brevetti che riguardano principalmente lo strato III dello standard, si può usare Toolame, (49) che si limita a utilizzare lo strato II; pertanto genera file «MPEG-1 layer II».
toolame [opzioni] file_in_ingresso file_in_uscita |
La sintassi per l'utilizzo dell'eseguibile toolame è conforme a quella di lame, con qualche limitazione ed eccezione; in particolare l'opzione -h di toolame mostra una guida rapida e non ha nulla a che vedere con la qualità della registrazione.
Toolame impone che il file in ingresso sia diviso in campioni da 16 bit. |
|
Segue la descrizione di alcuni esempi.
$
toolame -q 2 prova.wav prova.mp2
[Invio]
L'esempio mostra la situazione più comune di utilizzo, in cui si specifica l'opzione -q 2 per ottenere un buon risultato. In pratica, si ottiene il file prova.mp2
a partire da prova.wav
. Si intende che il file prova.wav
sia di tipo WAV-RIFF, 16 bit, stereo, 44 100 Hz.
$
lame -q 2 -c prova.wav prova.mp2
[Invio]
Come nell'esempio precedente, con l'attivazione dell'indicatore del copyright.
Per l'utilizzo del formato Ogg Vorbis è disponibile il pacchetto di programmi noto come Vorbis Tools. (50)
Si tratta di una raccolta di programmi di utilizzo relativamente semplice, per la codifica, l'esecuzione e la modifica di file Ogg Vorbis.
Per la codifica si utilizza oggenc, con la sintassi seguente:
oggenc [opzioni] file_in_ingresso... |
In pratica, se non si richiede qualcosa di particolare con le opzioni, si indicano i file da codificare (WAV-RIFF) e si ottengono file compressi con lo stesso nome ma con estensione .ogg
.
|
Le opzioni -a, -t e -l, possono essere inserite più volte, per fare riferimento, in sequenza, a più file distinti. Segue la descrizione di alcuni esempi.
$
oggenc *.wav
[Invio]
Elabora i file che corrispondono al modello *.wav
, generando altrettanti file con estensione .ogg
secondo valori predefiniti.
$
cat prova.wav | oggenc -o prova.ogg -
[Invio]
Elabora il file prova.wav
che proviene dallo standard input, generando il file prova.ogg
.
Per la decodifica, ovvero per generare un file audio non compresso a partire da un formato Ogg Vorbis, si utilizza oggdec, con la sintassi seguente:
oggdec [opzioni] file_ogg... |
Se non si specificano opzioni, si ottengono file in formato WAV-RIFF con gli stessi nomi di quelli indicati tra gli argomenti, ma con l'estensione rimpiazzata da .wav
, come nell'esempio seguente:
$
oggdec *.ogg
[Invio]
Come si può intuire si ottengono altrettanti file con estensione .wav
.
Per leggere le informazioni contenute in un file Ogg Vorbis, si utilizza ogginfo, con la sintassi seguente:
ogginfo [opzioni] file_ogg... |
Anche in questo caso, il programma ogginfo viene usato prevalentemente senza opzioni. L'esempio seguente mostra le informazioni di un file che però non contiene annotazioni particolari:
$
ogginfo prova.ogg
[Invio]
Processing file "prova.ogg"... New logical stream (#1, serial: 6b8328ba): type vorbis Vorbis headers parsed for stream 1, information follows... Version: 0 Vendor: Xiph.Org libVorbis I 20020717 (1.0) Channels: 2 Rate: 44100 Nominal bitrate: 112,001000 kb/s Upper bitrate not set Lower bitrate not set Vorbis stream 1: Total data length: 2661137 bytes Playback length: 3m:15s Average bitrate: 109,099492 kbps Logical stream 1 ended |
Per modificare le annotazioni contenute in un file Ogg Vorbis, si utilizza vorbiscomment, la cui sintassi cambia a seconda dell'azione che si intende compiere; pertanto vale la pena di mostrarne l'utilizzo solo attraverso degli esempi.
Generalmente si comincia dalla lettura delle annotazioni contenute nel file Ogg Vorbis che si vuole modificare, salvandole in un file di testo normale:
$
vorbiscomment -l prova.ogg > prova.txt
[Invio]
In questo caso, viene creato il file prova.txt
a partire dalle annotazioni contenute all'interno di prova.ogg
. Il contenuto del file prova.txt
potrebbe essere simile a quello seguente:
|
Per modificare questi dati nel file Ogg Vorbis, si può intervenire nello stesso file di testo appena generato, cambiandolo per esempio così:
|
Per modificare le annotazioni con i dati contenuti nel file di testo appena modificato, si può procedere così:
$
vorbiscomment -w -c prova.txt prova.ogg prova_2.ogg
[Invio]
In questo modo si viene a creare un nuovo file Ogg Vorbis denominato prova_2.ogg
con le modifiche apportate, mentre il file originale rimane invariato.
In modo analogo, per aggiungere le annotazioni contenute nel file di testo prova.txt
, basta usare l'opzione -a:
$
vorbiscomment -a -c prova.txt prova.ogg prova_2.ogg
[Invio]
Se invece non si vuole usare un file di testo per indicare le annotazioni, si possono specificare i campi direttamente sulla riga di comando attraverso l'opzione -t:
$
vorbiscomment -a -t "license=GNU GPL"
\
\ prova.ogg prova_2.ogg
[Invio]
In questo caso viene aggiunto il campo LICENSE con la dicitura «GNU GPL».
Si ricorda che i campi delle annotazioni contenute in un file Ogg Vorbis sono liberi e dipende dalle convenzioni il significato pratico che gli si va ad attribuire. |
Per l'esecuzione di un file in formato Ogg Vorbis, si utilizza ogg123, con la sintassi seguente:
ogg123 [opzioni] {file_ogg|directory|http_uri}... |
In condizioni normali non sono necessarie opzioni; piuttosto, è il caso di osservare che i file da eseguire possono essere indicati singolarmente, a directory intere, oppure anche attraverso indirizzi URI del tipo http://...
.
In condizioni normali, ogg123 dovrebbe essere in grado di indirizzare il flusso audio digitale al file di dispositivo corretto, secondo la modalità che questo richiede. Eventualmente, è possibile modificare questo comportamento con l'uso delle opzioni (che qui non vengono descritte), oppure attraverso la configurazione dei file /etc/libao.conf
e ~/.libao
. Si veda eventualmente la pagina di manuale libao.conf(5).
Flac (51) è il pacchetto standard per la compressione e l'estrazione con il formato FLAC, che ha la caratteristica di non perdere informazioni. Il programma principale del pacchetto è flac, con il quale si comprime e si decomprime:
flac [azione] [opzioni] file |
A seconda delle opzioni usate o non usate, si intende se si vuole comprimere, decomprimere o altro, il file indicato alla fine della riga di comando (nel modello sintattico è stata indicata un'opzione iniziale con il nome di «azione», proprio per specificare il da farsi). Quando si esegue una compressione o un'estrazione, il file che si genera dalla compressione o dall'estrazione, si può specificare attraverso l'opzione -o; altrimenti, il programma cerca di determinare da solo un nome appropriato. Per esempio, se si sta comprimendo il file prova.wav
, il programma cerca di produrre il file compresso prova.flac
; lo stesso vale, in modo opposto, se si esegue un'estrazione.
|
|
La documentazione di Flac riporta molte altre opzioni, che si possono rendere utili o necessarie, per esempio, per dichiarare espressamente le caratteristiche del campionamento in ingresso, oppure per richiedere una compressione migliore (ma più lenta). Segue la descrizione di alcuni esempi.
$
flac musica.wav
[Invio]
Comprime il file musica.wav
, generando il file musica.flac
, con opzioni di compressione normali. In questo caso si ottiene un file di dimensioni pari a circa il 53 % di quello originale:
flac 1.1.1, Copyright (C) 2000,2001,2002,2003,2004 Josh Coalson flac comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions. Type `flac' for details. options: -P 4096 -b 4608 -m -l 8 -q 0 -r 3,3 musica.wav: wrote 10684429 bytes, ratio=0.539 |
$
flac -o musica.flac musica.wav
[Invio]
Esegue la stessa operazione dell'esempio precedente, con la differenza che in questo caso si specifica espressamente il nome del file da generare.
$
flac -t musica.flac
[Invio]
Verifica l'integrità del file musica.flac
:
flac 1.1.1, Copyright (C) 2000,2001,2002,2003,2004 Josh Coalson flac comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions. Type `flac' for details. musica.flac: ok |
$
flac -d musica.flac
[Invio]
Esegue dal file musica.flac
il file musica.wav
.
$
flac -o musica.wav -d musica.flac
[Invio]
Esattamente come nell'esempio precedente, specificando il nome del file da generare.
A fianco di flac, il programma metaflac consente di intervenire nelle informazioni aggiuntive contenute in un file FLAC:
metaflac [opzioni] [operazioni] file_flac |
A titolo di esempio, il comando seguente consente di leggere le informazioni disponibili all'interno di un file FLAC:
$
metaflac --list musica.flac
[Invio]
Mpg321 (52) è un programma a riga di comando per l'esecuzione di file MP2 e MP3. Si tratta precisamente di un programma che ripete le funzionalità di Mpg123, che però non è software libero.
mpg321 [opzioni] file_mp3... |
mpg321 [opzioni] uri_file_mp3... |
Il funzionamento è evidentemente molto semplice; vale la pena di annotare qualche opzione.
|
Segue la descrizione di alcuni esempi.
$
mpg321 prova.mp3
[Invio]
Esegue il file prova.mp3
.
$
mpg321 -v prova.mp3
[Invio]
Esegue il file prova.mp3
, mostrando la progressione dell'esecuzione.
$
mpg321 -v -w prova.wav prova.mp3
[Invio]
Esegue il file prova.mp3
, generando il file prova.wav
.
MP3blaster (53) è un programma interattivo per l'esecuzione di file audio (inizialmente solo per file MP3, ma successivamente esteso anche ad altri, compreso Ogg Vorbis). Se viene avviato con l'indicazione di alcuni file audio, si ottiene il pannello di controllo che si vede nella figura 30.181.
.-----------------------------------------------------------------------( - ). |[F 1] Select Files [F 2] Add Group [F 5] Set Group Title | |[F 3] Load/Add Playlist [F 4] Write Playlist [ C ] Clear Playlist | |[ m ] Move Files After [ M ] Move Files Before [ / ] Start Search | |[ f ] Toggle File Display [F 6] Toggle Repeat [F 7] Toggle GroupShuffle | |-----------------------------------------------------------------------( + )| | Global Playback: Play current group, including subgroups |Mpg1 Layer3| | Next Song : Baroque_Ensemble_Les_Eclairs_de_Musique_-_A._V|44Khz 128kb| | |JointStereo| | |Threads:100| |----------------------------[Default]---------------------------------------| |Apotheose_-_Vivaldi_Allegro_dalla_Sonata_in_mi_minore_per_flauto|[ ] shuffle| |Baroque_Ensemble_Les_Eclairs_de_Musique_-_A._Vivaldi_-_Concerto_|[ ] repeat | | | 0:20| | | 2:31| | | | | | |< || >|| | | 4 5 6 | | | | | | << [] >>| | | 1 2 3 | |-----------------------------------------------------------------[ t ]Mixer-| ||> Apothéose - Vivaldi: Allegro dalla Sonata |Vol | |<Unknown Album> (http://www.vitaminic.it) |[<]+064%[>]| `----------------------------------------------------------------------------' |
Le funzionalità che MP3blaster mette a disposizione sono numerose e il loro accesso è poco intuitivo. Nella parte alta appare una sorta di finestra che riepiloga i comandi che possono essere impartiti, ma non sono tutti: per visualizzare gli altri si può scorrere utilizzando i tasti [+] e [-]. La tabella 30.182 elenca alcuni comandi (tasti) che possono essere impartiti durante l'esecuzione di un file audio.
|
MP3blaster si avvia attraverso l'eseguibile mp3blaster, con o senza argomenti, ma in generale è meglio indicare subito i file da eseguire:
mp3blaster [opzioni] [file]... |
Eventualmente è possibile anche indicare un indirizzo del tipo http://...
se da quello è possibile ottenere un flusso audio riconosciuto da MP3blaster.
In generale, se alla fine della riga di comando vengono indicati dei file, viene avviata la loro esecuzione; altrimenti si ottiene generalmente il pannello iniziale del programma, dal quale si possono selezionare le funzioni desiderate.
Come accennato, il modo più semplice per avviare MP3blaster è quello di indicare subito i file da eseguire, come nell'esempio seguente, in cui si fa riferimento a tutti i file con estensione .mp3
e .ogg
contenuti nella directory brani/
:
$
mp3blaster brani/*.mp3 brani/*.ogg
[Invio]
Xmms, (54) ovvero X multimedia system, è un lettore multimediale grafico, per i formati audio più comuni. Avviandolo per la prima volta, attraverso l'eseguibile xmms, si ottiene il pannello di controllo che si vede nella figura 30.183.
Oltre al pannello principale è possibile visualizzare il mixer e l'elenco dei brani pronti per l'esecuzione (playlist), come si vede nella figura 30.184, dove si vede anche l'esecuzione di un brano di musica.
I brani da eseguire possono essere indicati attraverso l'interazione con il pannello, utilizzando il menù che si ottiene facendo un clic con il tasto destro del mouse, oppure indicandoli nella riga di comando. Per esempio:
$
xmms *.mp3
[Invio]
In tal caso, come si intuisce, si caricano tutti i file con estensione .mp3
della directory corrente.
La prima volta che si avvia, Xmms crea la directory ~/.xmms/
, in cui si collocano i file di configurazione. Questa configurazione memorizza anche l'ultimo elenco di brani selezionati, consentendo il riavvio successivo di Xmms con il recupero degli stessi dati.
Xmms richiede l'interfaccia grafica X per funzionare; tuttavia, una volta avviato è possibile controllarlo attraverso altre istanze del comando xmms, con delle opzioni apposite. Per esempio:
$
xmms -u
[Invio]
mette in pausa l'esecuzione in corso, oppure la fa riprendere;
$
xmms -e *.ogg
[Invio]
aggiunge altri brani all'elenco attuale;
$
xmms -p
[Invio]
fa partire l'esecuzione dell'elenco di brani attuale;
$
xmms -s
[Invio]
ferma l'esecuzione.
Dal pannello grafico, così come è possibile far apparire il mixer e l'elenco dei brani, è possibile fare anche sparire tutti i pannelli. In tal senso, la possibilità di controllare l'esecuzione attraverso i comandi del tipo mostrato, diventa molto conveniente. Eventualmente, per far riemergere il pannello principale si può usare il comando:
$
xmms -m
[Invio]
FreeAmp, (55) è un programma grafico per l'esecuzione di vari tipi di file audio. All'avvio si presenta come si vede nella figura 30.185.
L'eseguibile che compie il lavoro è freeamp che può ricevere eventualmente come argomento il nome di un file da eseguire immediatamente:
freeamp [file] |
Dal pannello frontale è possibile regolare facilmente il volume della linea di amplificazione; inoltre è possibile spostare la posizione dell'esecuzione (il punto di inizio). Attraverso il pulsante grafico <MyMusic
> si accede a una finestra simile a quella che si vede nella figura 30.186, che ha lo scopo di consentire un accesso facilitato ai file nel proprio disco fisso.
Tra le tante funzionalità di FreeAmp esiste anche la possibilità di modificare facilmente le informazioni ID3 dei file MP3. Per modificare i dati di un file, basta selezionarlo nell'ambito della finestra a cui si accede con il pulsante grafico <MyMusic
>, selezionando da lì il pulsante <Edit
>. Si ottiene una maschera simile a quella che si vede nella figura 30.187.
FreeAmp è anche in grado di collegarsi a un flusso di dati MP3 fornito attraverso il protocollo HTTP, ovvero uno stream HTTP, come quello generato da Icecast, descritto nella sezione 30.14.1. Per un collegamento del genere, basta avviare l'eseguibile freeamp indicando l'URI corretto, come nell'esempio seguente:
$
freeamp http://dinkel.brot.dg:8000
[Invio]
Come si vede dal comando, pur trattandosi del protocollo HTTP, si utilizza solitamente una porta differente da quella standard. La figura 30.188 mostra in che modo appare FreeAmp quando si collega a un flusso HTTP.
Zinf, (56) è una sorta di rivisitazione di FreeAmp: «Zinf is not FreeAmp».
zinf [file] |
zinf [uri] |
Dal punto di vista operativo, Zinf si comporta come FreeAmp, però c'è un vantaggio importante: se sono installati i file necessari, può funzionare anche con un terminale a caratteri:
zinf -ui ncurses.ui [file] |
zinf -ui ncurses.ui [uri] |
A titolo di esempio, viene mostrato il funzionamento di Zinf per ascoltare una radio Icecast:
$
zinf -ui ncurses.ui
\
\ http://www.sky.fm/mp3/classical.pls
[Invio]
|
Ci sono tanti modi di gestire l'audio attraverso la rete. La tecnica più semplice, anche se non è necessariamente la più efficace, consiste nella realizzazione di una connessione TCP normale dove ogni nodo di rete intrattiene una sessione indipendente. Si intende il limite di questo nel fatto che ogni utente che si collega aggiunge del carico alla rete. In pratica, questo approccio può andare bene solo in reti locali poco popolate, oppure con particolari doti di velocità.
Icecast 1(57) è un sistema di trasmissione di audio digitale MP3 attraverso il protocollo HTTP.
Icecast 1 è da considerarsi un lavoro obsoleto. Al suo posto si inserisce Icecast 2 che utilizza soltanto il formato Ogg Vorbis per la diffusione di audio digitale attraverso la rete. |
Il meccanismo di funzionamento è quello della figura 30.14, con la particolarità di presentare il flusso digitale come fa il protocollo HTTP, iniziando con l'intestazione seguente, seguita poi dalla codifica MP3:
|
Icecast si compone di un servente, corrispondente all'eseguibile icecast e di un programma cliente per la trasmissione al servente, ovvero al ripetitore, dei file MP3 che altri clienti possono poi ricevere e riprodurre.
Il servente icecast non richiede file di configurazione, dal momento che tutte le informazioni necessarie per il suo funzionamento vengono fornite attraverso la riga di comando; tuttavia, le distribuzioni GNU/Linux possono organizzare il pacchetto in modo da avviare il servizio nell'ambito della procedura di inizializzazione del sistema, dove lo script di avvio potrebbe leggere un file di configurazione con le informazioni necessarie a comporre il comando completo di avvio di icecast.
icecast [opzioni] |
A titolo di esempio si può vedere come potrebbe essere strutturato, in modo elementare, lo script per l'avvio del servizio Icecast:
|
Si può osservare che lo script importa inizialmente il file /etc/defaults/icecast
, nel quale evidentemente viene dichiarata la variabile di ambiente OPZIONI. Per esempio, sempre semplificando al massimo, questo file esterno potrebbe essere strutturato nel modo seguente, con l'unico scopo di stabilire una parola d'ordine per l'invio di un flusso audio da ritrasmettere:
|
La parola d'ordine in questione, potrebbe essere accettata in chiaro, oppure in modo cifrato, come si intende in questo esempio. Per ottenere la parola d'ordine cifrata a partire da quella in chiaro, si può usare il programma Makepasswd, (58) che non fa parte di Icecast 1:
$
echo ciao | makepasswd --clearfrom - --crypt
[Invio]
ciao D.BOQjOm40WtQ |
In pratica, la parola d'ordine in chiaro è «ciao», mentre la stringa cifrata equivalente è «D.BOQjOm40WtQ».
Il servente di Icecast utilizza in modo predefinito delle porte TCP per ricevere e inviare il flusso audio MP3. La porta 8 000 viene utilizzata normalmente per concedere l'accesso ai programmi clienti, la porta 8 001 viene utilizzata per ricevere il flusso audio da ritrasmettere ed eventualmente la porta 8 002 serve per l'amministrazione remota del servente.
Si osservi il fatto che un servente di Icecast potrebbe essere utilizzato anche da un utente comune, tanto più in considerazione dell'utilizzo normale di porte non privilegiate per il suo funzionamento. In tal caso, evidentemente, non si farebbe uso di script della procedura di inizializzazione del sistema. |
L'esempio mostrato anticipa l'uso dell'opzione -p, con la quale si stabilisce una parola d'ordine. Ciò permette di evitare che un cliente non autorizzato possa utilizzare il servente per trasmettere un flusso audio. Per conoscere le altre opzioni disponibili è possibile consultare la pagina di manuale icecast(8).
Il servente Icecast prevede anche un file di configurazione che dovrebbe corrispondere a /etc/icecast/icecast.conf
, che però qui non viene descritto. A ogni modo, in questo file è possibile anche specificare la parola d'ordine per gli accessi, senza bisogno di usare l'opzione -p nella riga di comando.
Icecast offre il programma shout per la trasmissione al servente del flusso audio MP3:
shout nodo [opzioni] [file_mp3]... |
In condizioni normali, è più che sufficiente l'indicazione dell'indirizzo o del nome del nodo in cui si trova il servente da contattare per la trasmissione, assieme all'elenco di file MP3 da trasmettere. Spesso è necessario aggiungere una parola d'ordine per accedere al servente e questo si ottiene con l'opzione -P. La tabella 30.196 riepiloga alcune opzione di uso comune.
|
A seconda di come viene compilato, questo programma potrebbe avere la necessità di accedere a porzioni del file system per cui servono privilegi particolari di accesso. Se ciò accade, il programma va avviato come utente root:
#
shout dinkel.brot.dg -P ciao *.mp3
[Invio]
L'esempio precedente fa sì che vengano trasmessi i file corrispondenti al modello *.mp3
al servente dinkel.brot.dg
, fornendo la parola d'ordine «ciao», utilizzando la porta TCP predefinita (8 001).
#
shout dinkel.brot.dg -P ciao -p elenco
[Invio]
Questo secondo esempio è simile al precedente, con la differenza che i file MP3 non vengono elencati nella riga di comando, ma sono forniti in un elenco contenuto nel file di testo elenco
.
#
shout dinkel.brot.dg -P ciao -r -l -p elenco
[Invio]
Questo ultimo esempio aggiunge l'uso delle opzioni -r e -l, con le quali si ottiene rispettivamente una sequenza casuale nell'ordine dei file audio trasmessi e una trasmissione senza fine.
Il sistema usato da Icecast per trasmettere audio digitale MP3 attraverso il protocollo HTTP è uno standard diffuso, per cui sono diversi i programmi per l'esecuzione di file MP3 che sono anche in grado di collegarsi a un flusso di questo tipo. In particolare è disponibile FreeAmp o Zinf, che per accedere a un servente Icecast si utilizzano semplicemente così:
freeamp http://nodo:porta |
zinf http://nodo:porta |
L'esempio seguente fa sì che FreeAmp o Zinf si colleghi al nodo dinkel.brot.dg
, alla porta 8 000 in attesa di un flusso MP3:
$
freeamp http://dinkel.brot.dg:8000
[Invio]
$
zinf http://dinkel.brot.dg:8000
[Invio]
Icecast offre anche un programma cliente abbastanza spartano, che si limita a emettere il flusso ottenuto attraverso lo standard output. Si tratta di listen:
listen nodo porta [proxy porta] |
La sintassi del programma è essenziale; in particolare si può osservare il vantaggio dato dall'uso del protocollo HTTP, che in questo modo consente di utilizzare anche un proxy se ciò è necessario per raggiungere la rete esterna.
Da solo, listen serve a poco, perché non fa altro che ricevere il flusso MP3 emettendolo attraverso lo standard output; tuttavia può essere utile per verificare il funzionamento del servizio di Icecast.
Internet è popolata da «stazioni radio» di tutti i generi. Queste emittenti utilizzano vari tipi di protocolli e di sistemi di compressione, però non tutto è accessibile attraverso il software libero. Di solito si possono ascoltare stazioni Showcast e Icecast.
Sono molti i programmi in grado di ricevere stazioni radio da Internet; in generale, ogni buon programma per l'esecuzione di file musicali è anche in grado di accedere a dei protocolli di rete. In particolare vale la pena di citare: Xmms, (59) Rhythmbox, (60) FreeAmp (61) e Zinf. (62) Si osservi comunque che quasi tutti i programmi che sono in grado di eseguire dei file multimediali (nel senso di audio e video assieme), sono anche in grado di leggere file che contengono solo audio e anche di collegarsi a una stazione radio del genere.
Nelle situazioni più comuni, la ricezione di una stazione radio di Internet si ottiene specificando un indirizzo che fa riferimento al protocollo HTTP, con l'indicazione eventuale di una porta alternativa. Per esempio: http://dinkel.brot.dg:8000
, http://dinkel.brot.dg/radio/1001
, http://dinkel.brot.dg:80/radio/1001
,...
In alternativa, al posto di fare riferimento direttamente alla fonte, l'indirizzo può riguardare un file che indica una o più origini alternative. Per esempio, l'indirizzo http://www.mostlyclassical.com/mp3/classical128k.pls
punta in pratica al file classical128k.pls
che deve essere letto e interpretato per accedere alla stazione radio vera e propria. Questo file, la cui estensione sta per play list, potrebbe avere un contenuto simile a quello seguente:
|
In tal modo, in base all'esempio, il programma per la ricezione di questa radio può tentare l'accesso a quattro ripetitori diversi: http://64.236.34.196:80/stream/1006
, http://64.236.34.4:80/stream/1006
, http://64.236.34.196:80/stream/1006
e http://64.236.34.4:5190/stream/1006
.
Streamtuner(63) è un programma frontale grafico, in grado di raccogliere gli elenchi principali di radio via Internet e di avviare il programma appropriato per il loro ascolto. Inoltre, può pilotare il programma Streamripper per registrare la trasmissione su file.
Streamripper(64) è un programma che si utilizza a riga di comando, ma che spesso viene utilizzato attraverso programmi frontali diversi, che ha lo scopo di filtrare un flusso audio digitale per salvarlo in file audio separati:
streamripper indirizzo [opzioni] |
Come si vede dal modello sintattico, l'utilizzo più semplice del programma richiede solo l'indicazione di un indirizzo (URI) dal quale ottenere la sorgente audio digitale. In modo predefinito, il programma crea una directory con il nome della stazione radio, all'interno della quale va a inserire i file, i cui nomi provengono dalle indicazioni che possono essere raccolte dal flusso audio stesso. Ecco un esempio:
$
streamripper http://194.79.31.234:7120
[Invio]
Connecting... stream: Radio Skipper - Live from Canada, America, Italy, France,England, Germany server name: SHOUTcast/Linux v1.9.5 bitrate: 128 meta interval: 32768 [ripping... ] Robbie Nevil - C'est La Vie [ 1.69M] [ripping... ] Promo ID 31 - Radio Skipper [ 326kb] [ripping... ] Barry White - Let the music play [ 1.11M] |
Si ottiene la sottodirectory «Radio Skipper - Live from Canada, America, Italy, France, England, Germany/», all'interno della quale appaiono dei file audio:
$
cd Radio*
[Invio]
$
ls
[Invio]
Barry White - Let the music play.mp3 Promo ID 31 - Radio Skipper.mp3 Robbie Nevil - C'est La Vie.mp3 |
Si comprende intuitivamente che un filmato sia una sequenza di immagini fisse, prese a intervalli regolari molto brevi; tuttavia, per poter usare i programmi che creano o elaborano dei filmati digitali, occorre conoscere, almeno superficialmente, altri concetti specifici.
Ai fini della rappresentazione digitale, si può considerare un'immagine come un mosaico rettangolare, composto da una matrice di tessere, ognuna di dimensione uguale: le tessere di questo mosaico sono i punti grafici, noti come pixel. Da questo punto di vista, le caratteristiche di un'immagine sono la larghezza e l'altezza in punti grafici, a cui si aggiunge la «profondità», rappresentata dalla quantità di colori.
Per la precisione, la profondità si può esprimere sia con il numero di colori rappresentabili, intendendo per colore ogni tonalità disponibile, sia con il numero di bit con cui i colori vengono rappresentati. In tal caso, se n è la quantità di bit a disposizione, il numero di colori rappresentabili è 2n. |
Si arriva a un filmato mettendo assieme una serie di immagini fisse, ottenute a intervalli molto brevi e regolari. La frequenza con cui queste immagini sono scandite è la frequenza di quadro (frame rate), che secondo la tradizione televisiva va dai 25 Hz (standard PAL e SECAM europei) a circa 30 Hz (standard NTSC americano).
Il sistema televisivo tradizionale introduce anche l'interlacciamento, per ridurre la percezione dello sfarfallio dell'immagine. Attraverso l'interlacciamento, ogni immagine viene divisa in due immagini contenenti righe alterne (una contiene le righe dispari, l'altra le righe pari), da visualizzare a una frequenza doppia rispetto alla frequenza di quadro. Le due immagini che compongono il quadro sono dei semiquadri (field).
La trasformazione di un filmato in forma digitale (numerica) implica la realizzazione di un file contenente una sequenza di immagini successive. Se la memorizzazione avviene senza tecniche di compressione, è sufficiente determinare le dimensioni di ogni immagine (si ottiene la dimensione a partire da larghezza, altezza e profondità) e sapere a che frequenza visualizzarle (frequenza di quadro), per poter riprodurre il filmato correttamente.
Per risparmiare spazio, le immagini dei vari quadri possono essere rappresentate attraverso tecniche che ne consentono la riduzione delle dimensioni, di solito con la perdita di qualche informazione, esattamente come avviene con tanti formati di rappresentazione di immagini fisse. Per esempio, il formato MJPG è una sequenza di immagini JPG.
Per risparmiare spazio ulteriore, le immagini dei quadri, oltre che essere compresse per conto proprio, dopo un'immagine completa possono rappresentare solo le variazioni nei quadri successivi.
Come avviene per la compressione audio, la creazione di un file video compresso, che consente la perdita di informazioni, prevede normalmente la possibilità di fissare il flusso massimo di dati per unità di tempo: bit rate. Naturalmente, maggiore è questo valore, migliore è la qualità del video riprodotto. Si distingue generalmente tra un flusso massimo costante o variabile; nel secondo caso si usa normalmente la sigla «VBR» (Variable bit rate).
Un filmato può essere realizzato come una sequenza di immagini non compresse, senza informazioni ulteriori. In tal caso, per la sua riproduzione è necessario conoscere le caratteristiche delle immagini e la loro frequenza di scansione; inoltre, è necessario leggere il file dal principio, per poter calcolare esattamente l'inizio di ogni nuovo quadro.
Per facilitare l'esecuzione di un filmato, il file che lo contiene potrebbe disporre di una sorta di intestazione, con tutte le informazioni necessarie alla decodifica.
Per consentire l'esecuzione di un filmato attraverso un flusso di dati, all'interno dei quali è possibile anche la perdita di porzioni di questi, è necessario che i quadri del filmato siano distinguibili. In tal caso, di solito, all'inizio di un gruppo di quadri viene inserita un'intestazione con i dati necessari alla riproduzione corretta del filmato stesso.
Generalmente, si è abituati a considerare un filmato come qualcosa che contiene sì una sequenza visiva, ma anche una traccia sonora. Per ottenere questo risultato occorre raccogliere video e audio in un contenitore multiplex (molteplice), ovvero un file che a sua volta contiene, a pezzi, un file video e un file audio, con le informazioni necessarie alla loro esecuzione sincronizzata.
Un contenitore multiplex è fatto per contenere certi tipi di formati (video, audio o altro), ma non tutti; inoltre, a seconda delle sue caratteristiche, può prevedere la presenza di più componenti sincronizzate, come più tracce audio in lingue diverse, più tracce video o anche informazioni testuali (come i sottotitoli). |
La trasformazione di un filmato da una rappresentazione digitale a un'altra, è un'operazione complessa che produce spesso risultati scadenti. La qualità scadente del risultato dipende generalmente dal fatto che si parte da un formato già compresso, ottenuto con la perdita di informazioni visive rispetto alle immagini originali, per arrivare nuovamente a un formato compresso, dove la perdita di informazioni può solo aumentare.
La trasformazione di un filmato richiede generalmente un adattamento della geometria, ovvero delle dimensioni orizzontali e verticali delle immagini, così come la modifica della frequenza di quadro. Si può comprendere che proprio la modifica della frequenza di quadro sia l'aspetto più difficile della trasformazione.
Il modo più semplice per trasformare la frequenza di quadro è quello di calcolare quale quadro della sequenza originale è il più vicino, in termini di tempo, al quadro della sequenza trasformata. In questo modo, a seconda dei casi, può succedere che alcuni quadri della sequenza originale vengano eliminati, oppure che vengano duplicati. Ovviamente, il risultato produce degli scatti periodici nel fluire della sequenza visuale. A titolo di esempio viene mostrato il procedimento in forma di pseudocodifica:
|
In pratica, la funzione FRAME_RATE() riceve come argomenti:
|
Come si vede, nella chiamata della funzione non viene indicato un limite finale all'array di destinazione, in quanto il riferimento a celle nuove ne implica la creazione.
All'inizio della funzione, vengono dichiarate anche altre variabili locali:
|
Inizialmente viene calcolato il tempo di durata dei quadri della sequenza di origine e di quella di destinazione; quindi viene azzerato il valore di FRAME_DST, a indicare che si comincia dal primo quadro nella sequenza di destinazione. Successivamente inizia un ciclo senza fine, dove si calcola: la durata della sequenza fino al punto del quadro di destinazione in corso di elaborazione; il quadro da usare nella sequenza originale (si divide il tempo attuale per la durata del quadro di origine, aggiungendo 0,5, contando di ottenere il troncamento dei decimali dal momento che si assegna a una variabile intera); l'indice corrispondente nell'array di origine; l'indice corrispondente nell'array di destinazione.
Se esiste l'elemento cercato nell'array di origine, il quadro viene copiato nell'elemento appropriato dell'array di destinazione, altrimenti il ciclo termina.
Se tutto va bene viene incrementato il contatore dei quadri di destinazione.
Dopo il ciclo viene calcolato l'indice massimo nell'array di destinazione e vengono restituiti i valori salienti: il riferimento all'array di destinazione, l'indice iniziale e finale della sequenza di quadri trasformata.
Quando ciò che deve essere trasformato è contenuto in un file che dispone di video e audio assieme, le complicazioni aumentano. Generalmente, si procede separando le varie componenti, trasformando i risultati e riassemblando tutto in un nuovo file multiplex. Intuitivamente, si comprende che l'azione di separazione sia nota come demultiplexing, mentre la fusione diventa semplicemente multiplexing.
Per lo stesso motivo per cui ci si trova a dovere trasformare i video digitali, succede che si debba trasformare in qualche modo anche la componente audio, soprattutto perché può essere obbligatorio l'uso di una certa frequenza di campionamento e la presenza di due tracce (per la stereofonia, anche se fasulla). La necessità di rielaborare la componente audio è una ragione in più per procedere inizialmente attraverso una separazione dei contenuti multipli.
Se si separano audio e video, quindi si rielabora il video in modo da attribuire una frequenza di quadro differente, ma senza selezionare i quadri (quindi senza rispettare il tempo di esecuzione), il video diventa più lungo o più corto (a seconda che la trasformazione preveda una frequenza di quadro minore o maggiore di prima). Se la differenza nella velocità di esecuzione della sequenza video può essere poco apprezzabile, riaggregando l'audio ci si accorge subito che dopo un po' di tempo il suono anticipa o ritarda rispetto al video. |
Se si separano audio e video, quindi si rielabora l'audio in modo da attribuire una frequenza di campionamento differente, ma senza «ricampionare» (quindi senza rispettare il tempo di esecuzione), l'audio diventa più lungo o più corto (a seconda che la trasformazione preveda una frequenza di campionamento minore o maggiore di prima). Se la differenza nella velocità di esecuzione della sequenza audio può essere poco apprezzabile, riaggregando il video ci si accorge subito che dopo un po' di tempo il suono ritarda o anticipa rispetto al video. |
I formati storici più importanti per i filmati sono fondamentalmente due: MPEG-1 e MPEG-2. Il primo è quello più comune, mentre il secondo riguarda prevalentemente i dischi DVD (Digital versatile disk). L'informazione audio utilizza i formati MP2 e MP3 (MPEG audio layer II e III). Normalmente, l'estensione di un file contenente video e audio MPEG è .mpg
.
Per registrazioni di scarsa qualità (come per esempio quelli che si potrebbero ottenere attraverso una fotocamera digitale), si usa spesso il formato MJPG (MJPEG), contenuto assieme ad audio MPEG in file con estensioni .avi
.
Esiste anche un formato libero, di qualità ottima, denominato Theora, inserito normalmente in un contenitore di tipo Ogg.
Per la riproduzione video sono disponibili anche applicativi abbastanza sofisticati, i quali, con l'aiuto di librerie aggiuntive (plugin), sono in grado di accedere a vari formati video e audio.
L'argomento tipico della riga di comando di un riproduttore di questo tipo, può essere un elenco di file, di directory ed eventualmente di ciò che viene definito «MRL», ovvero Media resource locator.
|
I programmi più comuni per l'esecuzione di filmati digitali, ma eventualmente validi anche per formati audio puri e semplici, sono VLC e Mplayer.(65) In particolare VLC è un programma del progetto VideoLAN,(66) che ha lo scopo di realizzare un sistema completo di trasmissione e ricezione di informazioni multimediali. VLC può essere usato sia per trasmettere, sia per ricevere, ma qui viene mostrato solo nella sua veste di «cliente», per la visione di file locali o per la ricezione.
vlc [opzioni] [media...] |
mplayer [opzioni] [media...] |
Segue la descrizione di alcuni esempi.
$
vlc *.avi
[Invio]
$
mplayer *.avi
[Invio]
Esegue i file che corrispondono al modello *.avi
nella directory corrente.
$
vlc file:///home/tizio/filmati/mio.mpg
[Invio]
$
mplayer file:///home/tizio/filmati/mio.mpg
[Invio]
Esegue il file /home/tizio/filmati/mio.mpg
.
$
vlc dvd:///dev/sr0
[Invio]
$
mplayer dvd:///dev/sr0
[Invio]
Esegue il DVD video inserito nell'unità corrispondente al file di dispositivo /dev/sr0
.
$
vlc http://www.mostlyclassical.com/mp3/classical128k.pls
[Invio]
$
mplayer http://www.mostlyclassical.com/mp3/classical128k.pls
[Invio]
Si collega a una radio attraverso Internet.
$
vlc http://www.webranger.net/m3ustart/s2.m3u
[Invio]
$
mplayer http://www.webranger.net/m3ustart/s2.m3u
[Invio]
Si collega a una televisione attraverso Internet.
Il funzionamento di Mplayer può essere controllato efficacemente attraverso la tastiera, ma per l'elenco dei comandi conviene leggere la pagina di manuale mplayer(1).
La registrazione video richiede strumenti fisici adatti: una semplice videocamera a fuoco fisso, specie se incorporata nell'elaboratore, non si presta per realizzazioni dignitose. Tuttavia, è molto importante la ripresa di ciò che appare sul video, in quanto può diventare un valido strumento didattico. A questo proposito, l'applicazione più adatta è generalmente Recordmydesktop(67), che produce formati in formato Ogg Vorbis Theora.
Questa applicazione si compone in pratica soltanto del programma recordmydesktop, che si usa con una sintassi molto semplice:
recordmydesktop [opzioni] [-o file] |
recordmydesktop [file] |
In mancanza dell'indicazione di un file, Recordmydesktop produce il file out.ogv
nella directory corrente, altrimenti crea il file indicato (da solo o con l'opzione -o). Se il nome del file predefinito o di quello specificato esiste già, ne viene prodotto uno con nome simile, aggiungendo un'estensione numerica (per esempio out-1.ogv
).
L'esempio seguente dimostra un utilizzo molto semplice del programma, dove si richiede di registrare ciò che avviene su tutto lo schermo, inserendo anche l'audio proveniente dal microfono, per generare il file out.ogv
:
$
recordmydesktop
[Invio]
La registrazione continua fino a che il programma riceve un segnale SIGTERM, il quale si può ottenere con la combinazione di tasti [Ctrl C], quando è in primo piano il terminale da cui il programma è stato avviato. Bisogna però fare attenzione: deve essere inviato un solo segnale SIGTERM, perché a quel punto il programma inizia a elaborare i dati accumulati per produrre il file in formato Ogg Vorbis Theora. Se invece si ripete l'invio del segnale SIGTERM, viene interrotto e annullato il procedimento di conversione.
Durante la registrazione, se si invia invece il segnale SIGUSR1, si ottiene la sospensione della ripresa, che può essere fatta ripartire con lo stesso segnale SIGUSR1.
|
Esiste anche un programma frontale, per il controllo di recordmydesktop; si tratta di gtk-recordmydesktop, il cui utilizzo, però, potrebbe essere più complicato della semplice riga di comando.
|
L'elaborazione di file contenenti video digitale è un'operazione molto complessa. In questa sezione vengono mostrati alcuni programmi in grado di compiere qualche operazione del genere. Si osservi però che quando si fa riferimento a un certo formato video, il programma che può elaborarlo, non sempre è in grado di gestire tutti i tipi di quel formato. In pratica, si può avere successo solo con un insieme limitato di tipi file e di situazioni.
A titolo indicativo, tra i programmi descritti in questa sezione, si suggerisce l'uso di FFmpeg per la conversione dei formati, essendo apparentemente più semplice ed efficace rispetto ad altri programmi simili.
FFmpeg(69) è un sistema completo di registrazione, elaborazione ed esecuzione di formati multimediali di vario tipo. Attraverso il programma ffmpeg, in particolare, è possibile rielaborare le varie componenti e qui viene descritto secondo questa sua modalità di utilizzo:
ffmpeg [opzioni_di_ingresso] -i file_ingresso \ |
In pratica, la prima serie di opzioni, prima di -i, riguarda il file in ingresso, nel caso fosse necessario specificarne le caratteristiche; le opzioni che appaiono dopo l'indicazione del file in ingresso, specificano l'elaborazione che si vuole ottenere nel file in uscita, annotato alla fine della riga di comando. L'esempio seguente serve a rendere l'idea: il file filmato.mpg
viene trasformato nel file filmato.avi
.
$
ffmpeg -i filmato.mpg -f avi filmato.avi
[Invio]
Si osservi comunque che questo esempio non produce necessariamente un file AVI compatibile con i programmi di esecuzione comuni, ma in questa fase serve a rendere l'idea del funzionamento del programma.
Nel modello sintattico appare l'opzione -f, con la quale si specifica il formato del file da generare, attraverso l'indicazione di una parola chiave. I mancanza di questa opzione, il programma tenta di determinare il formato del file da generare dall'estensione che viene data al nome dello stesso. Per conoscere l'elenco delle parole chiave disponibili per definire un formato, si può usare l'opzione -formats da sola:
$
ffmpeg -formats
[Invio]
File formats: E 3g2 3gp2 format E 3gp 3gp format D 4xm 4X Technologies format ... ... D wsvqa Westwood Studios VQA format DE yuv4mpegpipe YUV4MPEG pipe format Image formats (filename extensions, if any, follow): DE gif gif Codecs: D V 4xm D V D 8bps DEA aac ... ... D V D xl EV xvid DEV D zlib ... |
|
|
Segue la descrizione di alcuni esempi.
$
ffmpeg -i filmato.avi -f mpeg2video -hq -sameq -r 25
\
\ -s 720x576 video.m2v
[Invio]
Estrae la parte video del file filmato.avi
, generando il file video.m2v
, in formato MPEG-2, specificando una frequenza di quadro di 25 Hz e dimensioni di 720×576 punti grafici.
$
ffmpeg -i filmato.avi -f mpeg2video -hq -sameq
\
\ video.m2v
[Invio]
Come nell'esempio precedente, senza modificare la frequenza di quadro e le dimensioni.
$
ffmpeg -i filmato.avi -f wav audio.wav
[Invio]
Estrae dal file filmato.avi
la componente audio, memorizzandola in formato WAV-RIFF, nel file audio.wav
, senza cambiarne la frequenza di campionamento e il numero di canali.
$
ffmpeg -i filmato.avi -f mpeg -hq -sameq -r 25
\
\ -s 720x576 filmato.mpg
[Invio]
Converte il file filmato.avi
nel file filmato.mpg
(MPEG1, video e audio assieme), specificando la qualità, la frequenza di quadro e le dimensioni finali.
Mjpegtools (70) è un insieme di programmi per l'elaborazione di formati video MPEG. Nelle sezioni seguenti si mostra l'uso di alcuni di questi; si osservi comunque che solo alcune varianti MPEG sono gestibili e che normalmente si tratta di file che contengono solo informazioni video (senza audio).
I programmi jpeg2yuv e png2yuv consentono di trasformare una sequenza di file da un formato JPG o PNG in un flusso YUV4MPEG. Naturalmente, i file che costituiscono la sequenza da unire devono avere le stesse caratteristiche e le dimensioni (la geometria orizzontale e verticale in punti grafici) devono rispettare gli standard video.
jpeg2yuv -f f_quadro -I interlacciamento [altre_opzioni] \ |
png2yuv -f f_quadro -I interlacciamento [altre_opzioni] \ |
Come si vede, i modelli sintattici per l'uso di questi due programmi sono equivalenti e alcune opzioni sono obbligatorie.
|
Segue la descrizione di alcuni esempi.
$
jpeg2yuv -f 25 -I p -L 0 -j filmato-%06.jpg
\
\ > filmato.y4m
[Invio]
Genera il file filmato.y4m
a partire dalla sequenza di immagini filmato-000001.jpg
, filmato-000002.jpg
,... filmato-nnnnnn.jpg
, utilizzandole alla frequenza di 25 quadri al secondo, come si fa nel sistema PAL o SECAM, senza interlacciamento.
$
png2yuv -f 25 -I p -L 0 -j filmato-%06.png
\
\ > filmato.y4m
[Invio]
Come nell'esempio precedente, ma facendo riferimento a file PNG: filmato-000001.png
, filmato-000002.png
,... filmato-nnnnnn.png
.
$
jpeg2yuv -f 29.97 -I p -L 0 -j filmato-%06.jpg
\
\ > filmato.y4m
[Invio]
Come negli esempi precedenti, riferendosi a file JPG, utilizzando una frequenza di quadro di 29.97 quadri al secondo, come si fa nel sistema NTSC.
$
jpeg2yuv -f 25 -I p -L 0 -n 100 -j figura.jpg
\
\ > filmato.y4m
[Invio]
Utilizza il file figura.jpg
per generare un filmato composto da 100 quadri, contenenti la stessa immagine. La frequenza di quadro è di 25 quadri al secondo, pertanto il filmato dura 4 s.
$
png2yuv -f 25 -I p -L 0 -l 3 -j filmato-%06.png
\
\ > filmato.y4m
[Invio]
Utilizza una serie di file PNG per generare il file filmato.y4m
, nel quale la sequenza viene ripetuta per tre volte.
Il programma yuvplay consente di eseguire un flusso YUV4MPEG, come quello generato dai programmi png2yuv o jpeg2yuv:
yuvplay [opzioni] < file_y4m |
|
In condizioni normali, il programma viene usato senza opzioni, come nell'esempio seguente, dove viene eseguito il contenuto del file filmato.y4m
:
$
yuvplay < filmato.y4m
[Invio]
Il programma mpeg2enc consente di generare un file video MPEG-1 o MPEG-2 a partire da un flusso YUV4MPEG (il tipo esatto è 4:2:0 Y'CbCr).
mpeg2enc [opzioni] -o file_da_generare < file_y4m |
Come si vede dal modello sintattico, il flusso YUV4MPEG viene letto dallo standard input e il risultato viene memorizzato nel file indicato come argomento dell'opzione -o.
|
L'esempio più significativo di utilizzo di mpg2enc è quello con il quale si crea un file video MPEG-2 adatto a mplex:
$
mpeg2enc -a 2 -n p -f 3 -b 200 -o video.m2v
\
\ < video.y4m
[Invio]
In questo caso si suppone di disporre del file video.y4m
, contenente un flusso YUV4MPEG, con il quale si ottiene il file video.m2v
in formato MPEG-2. L'opzione -n p specifica che le caratteristiche del file MPEG-2 devono essere conformi allo standard PAL (per esempio la frequenza di quadro deve essere di 25 Hz) e l'opzione -b 200 fissa il tasso del flusso di dati video a 200 kbit/s.
Il programma mplex consente di generare un contenitore multimediale MPEG1 o MPEG2, partendo da un file video MPEG e da un file audio MPEG (eventualmente anche qualche altro formato audio è consentito, come descritto nella pagina di manuale mplex(1)).
mplex [opzioni] -o file_da_generare file_in_ingresso... |
Dal modello sintattico appena mostrato si intende che l'opzione -o è obbligatoria e precede il nome del file da produrre; quindi segue l'elenco dei file da unire nel contenitore multimediale.
|
L'esempio più significativo di utilizzo di mplex è quello con il quale si creano i file VOB adatti a Dvdauthor:
$
mplex -f 8 -V -o filmato.vob video.m2v audio.mp2
[Invio]
In questo caso si suppone di disporre del file video.m2v
in formato video MPEG-2 e del file audio.mp2
in formato MP2, per generare il file filmato.vob
. Si osservi che in questa situazione, è bene che il file video fornito in ingresso sia in formato MPEG-2, come nell'esempio.
Transcode(71) è un sistema modulare per l'elaborazione di formati video MPEG, gestito generalmente attraverso il programma frontale transcode. Purtroppo i moduli che compongono Transcode non sono perfettamente omogenei e spesso, la sintassi teorica della riga di comando dell'eseguibile transcode non genera i risultati attesi:
transcode [opzioni] |
Il modello sintattico appena mostrato indica soltanto che sono previste delle opzioni nella riga di comando, ma senza alcuna opzione, il programma non fa alcunché. Di solito si utilizzano almeno le opzioni -i e -o, per indicare rispettivamente un file in ingresso e uno in uscita.
|
La mancanza di omogeneità dei moduli che compongono Transcode fa sì che l'utilizzo delle opzioni della riga di comando possa variare molto da un modulo all'altro. Per questa ragione, nella tabella riepilogativa delle opzioni principali vengono mostrate soltanto quelle essenziali, rimanendo però l'esigenza di leggere la pagina di manuale transcode(1) per ogni modulo che si voglia tentare di utilizzare. Viene mostrato qui solo qualche esempio elementare di utilizzo del programma.
$
transcode -i filmato.mpg -o filmato.mov -y mov
[Invio]
Converte il file filmato.mpg
, che si suppone sia un contenitore multimediale MPEG1 (video e audio), in un file MOV (QuickTime), conservando entrambe le componenti (video e audio).
$
transcode -i filmato.mov -o video -y ffmpeg
\
\ -F mpeg1video
[Invio]
Estrae dal file filmato.mov
la componente video, convertendola nel file video.m1v
, in formato MPEG-1 (video). Per questa operazione si utilizza il modulo ffmpeg che richiede di specificare il formato con l'opzione -F e di indicare il nome del file (opzione -o) senza estensione.
$
transcode -i filmato.mov -o video -y ffmpeg
\
\ -F mpeg2video
[Invio]
Come nell'esempio precedente, generando però un file video in formato MPEG-2, con il nome video.m2v
.
$
transcode -i filmato.mov -o video -y jpg
[Invio]
Estrae dal file filmato.mov
la componente video, convertendola in una serie di file del tipo videonnnnnn.jpg
, in formato JPG, uno per ogni quadro.
In questa sezione si mostrano alcuni esempi che, a partire da un'immagine fissa, consentono di arrivare a un filmato, completo di audio, anche se completamente silenzioso.
Si può creare un video YUV4MPEG con jpeg2yuv o con png2yuv di Mjpegtools:
$
jpeg2yuv -f 25 -I p -L 0 -n 100 -j figura.jpg
\
\ > video.y4m
[Invio]
Oppure:
$
png2yuv -f 25 -I p -L 0 -n 100 -j figura.png
\
\ > video.y4m
[Invio]
In questo modo, a partire dal file figura.jpg
o figura.png
, si ottiene un video YUV4MPEG di 100 quadri, contenenti la stessa immagine, nel file video.y4m
. La frequenza di quadro è di 25 quadri al secondo, pertanto il video dura 4 s.
Con l'aiuto di mpeg2enc si trasforma il file video.y4m
in un formato MPEG-2, creando il file video.m2v
:
$
mpeg2enc -a 2 -n p -f 3 -b 200 -o video.m2v
\
\ < video.y4m
[Invio]
Viene creato un file audio silenzioso, di 4 s, in formato MP2, con una frequenza di campionamento di 48 000 Hz in stereofonia:
$
dd if=/dev/zero bs=4 count=192000
\
\ | toolame -b 128 -s 48 /dev/stdin audio.mp2
[Invio]
Si ottiene il file audio.mp2
che si può usare assieme a video.m2v
per creare un contenitore multimediale MPEG2 (video e audio) con l'aiuto di mplex:
$
mplex -f 3 -o filmato.mpg video.m2v audio.mp2
[Invio]
Si ottiene così il file filmato.mpg
.
|
A titolo di esempio, vengono fornite delle funzioni per script di shell POSIX, utili per elaborare i filmati con l'ausilio di Transcode e di ImageMagick. Nel file allegati/video/video_to_frame.txt si trova la dichiarazione della funzione video_to_frame(), la quale potrebbe essere utilizzata come nell'esempio seguente, dove si richiede di elaborare il file origine.m1v
per generare una serie di immagini con file che corrispondono al modello destinazione.nnnnnn.png
:
|
Si può sintetizzare il lavoro di questa funzione nel modo seguente:
vengono acquisite le informazioni necessarie all'elaborazione;
con l'aiuto di Transcode vengono separati i quadri in file temporanei distinti (per ora in formato JPG);
con l'aiuto dei programmi di ImageMagick i singoli quadri vengono adattati alla geometria finale, aggiungendo, se necessario, uno sfondo grigio;
vengono calcolati i tempi di scansione dei quadri e così vengono selezionati i file da copiare nella sequenza finale di file.
Dopo l'estrazione e l'adattamento dei vari quadri, si può passare alla costruzione di un nuovo filmato. Per fare questo viene proposta la funzione frame_to_video(), disponibile nel file allegati/video/frame_to_video.txt. Per usare questa funzione si può agire come nell'esempio seguente, dove si parte da file in formato PNG, secondo il modello origine.nnnnnn.png
, per generare il file destinazione.m2v
, a 25 quadri al secondo:
|
Il DVD video è semplicemente un disco con un file system UDF, contenente directory e file con nomi prestabiliti, inseriti nel file system con un ordine preciso. Anche un CD può contenere un file system di questo tipo ed essere usato per un filmato di breve durata.
Nonostante la semplicità della sua struttura, un DVD video è difficile da realizzare, quando non si dispone di strumenti che fanno tutto da soli (ammesso che lo facciano bene), perché di norma si devono rielaborare i file in modo da adattarli al formato previsto per i DVD stessi.
Un DVD video è costituito da un file system UDF, contenente le directory AUDIO_TS/
(che dovrebbe risultare vuota) e VIDEO_TS/
. Nella directory VIDEO_TS/
vengono inseriti diversi file, di cui i più importanti sono quelli con estensione .VOB
, che rappresentano un contenitore particolare per video MPEG-2 e audio (che può essere rappresentato con diversi formati). Le caratteristiche geometriche del formato video variano a seconda degli standard di riferimento.
|
Dal punto di vista dell'utilizzatore, il contenuto del DVD video è organizzato in «titoli», che a loro volta possono essere suddivisi in «capitoli».
I file contenuti nel DVD rispecchiano la suddivisione in «insiemi di titoli» o title set: VTS_mm_n.*
. In pratica, le cifre mm corrispondono all'insieme mm-esimo, mentre n rappresenta la n-esima porzione dello stesso. Spesso, gli insiemi di titoli sono singoli, pertanto la suddivisione che qui è stata indicata come mm rappresenta direttamente i titoli
I file che rappresentano un insieme di titoli (VTS_mm_n.*
) hanno una numerazione finale che ne rappresenta la porzione n-esima, perché nel DVD video non ci possono essere file più grandi di un gibibyte (simbolo: Gibyte), ovvero 230 byte, pertanto, diventa necessario suddividere i file .VOB
in questo modo. Evidentemente, questa suddivisione in porzioni da un gibibyte non può corrispondere a una suddivisione eventuale in capitoli.
Un DVD video contiene normalmente un menù, realizzato in forma di file .VOB
speciale: infatti, oltre che contenere un video MPEG-2 con lo sfondo del menù, deve contenere delle immagini che si evidenziano a seconda dell'azione che si compie (con il mouse o con il telecomando del lettore DVD); quindi, deve contenere dei riferimenti a dei titoli, in base alla selezione compiuta. In pratica, questo file .VOB
viene eseguito in modo ripetitivo, per dare il tempo all'utilizzatore di fare la selezione che desidera. Si intuisce che un menù può puntare ad altri sottomenù. Un DVD può anche fare a meno di un menù, ma in tal caso la sua esecuzione può essere solo sequenziale.
La copia di un DVD video che non abbia protezioni particolari, è un procedimento relativamente semplice: si copiano i file che contiene, con la stessa struttura in una directory; si riproduce un file-immagine con il file system UDF, rispettando l'ordine dei file; si incide la copia.
Si ricorda che la copia di un DVD video è un'operazione che deve essere autorizzata espressamente da chi detiene i diritti di autore. |
Viene mostrato il procedimento con un esempio, ipotizzando che il DVD sia letto e poi inciso da un lettore-masterizzatore collocato nell'unità del file di dispositivo /dev/sr0
:
#
mkdir /tmp/dvd
[Invio]
viene creata la directory /tmp/dvd/
per fare la copia del contenuto del DVD video;
#
mount -t auto /dev/sr0 /mnt/sr0
[Invio]
viene innestato il DVD video nella directory /mnt/sr0/
(che si presume essere già esistente);
#
cp -dpRv /mnt/sr0/* /tmp/dvd
[Invio]
viene copiato il contenuto del DVD video nella directory /mnt/sr0/
;
#
umount /mnt/sr0
[Invio]
viene separato il file system del DVD video dalla directory /mnt/sr0/
e quindi il DVD viene estratto anche dal lettore-masterizzatore;
#
mkisofs -dvd-video -o /tmp/dvd.img /tmp/dvd
[Invio]
viene creato il file /tmp/dvd.img
, contenente l'immagine del file system UDF, rispettando l'ordine necessario per i file di un DVD video;
#
growisofs -dvd-compat -Z /dev/sr0=/tmp/dvd.img
[Invio]
dopo aver inserito un DVD vergine nel masterizzatore (/dev/sr0
), si procede all'incisione;
#
rm -fr /tmp/dvd.img /tmp/dvd
[Invio]
al termine vengono cancellati i file temporanei che non servono più.
Si osservi che, di solito, i DVD video per cui non viene concessa la facoltà di copia da chi detiene i diritti di autore, contengono più dati rispetto alla capacità standard di un DVD vergine, complicando il procedimento di copia.
Il passo successivo alla copia pura e semplice di un DVD video consiste nell'estrarre solo alcuni file di proprio interesse, per realizzare con questi un DVD separato.
I file che contano sono quelli con estensione .VOB
che si trovano nella directory VIDEO_TS/
; con programmi come Xine, Totem o VLC, è possibile eseguirli per poter scegliere ciò che è di proprio interesse:
$
xine VTS_01_1.VOB
[Invio]
Una volta determinati quali sono i file da estrapolare per realizzare un altro DVD video, si deve realizzare una struttura nuova, a partire da questi file, con l'aiuto del programma Dvdauthor; (72) come nell'esempio seguente, dove si suppone che i file in questione si trovino nella directory corrente e che la struttura da creare debba essere collocata nella directory /tmp/dvd/
:
$
dvdauthor -o /tmp/dvd -f VTS_01_1.VOB VTS_01_2.VOB
\
\ VTS_01_3.VOB
[Invio]
$
dvdauthor -o /tmp/dvd -T
[Invio]
Quindi, si passa alla creazione del file-immagine per l'incisione di un disco:
#
mkisofs -dvd-video -o /tmp/dvd.img /tmp/dvd
[Invio]
In questo caso, il disco che si ottiene è privo di menù e la sua esecuzione parte direttamente dal primo dei file indicati.
Si osservi che esistono tecniche di protezione contro la copia non autorizzata, tali da far sì che il procedimento mostrato in questa sezione produca un video di pessima qualità. |
Dvdbackup(73) è un programma che consente di estrapolare il contenuto di un DVD video, con la possibilità di sezionarne i titoli e anche i capitoli in modo preciso.
dvdbackup azione [altre_opzioni_di_azione] -i dispositivo_dvd [-o directory] |
Il modello sintattico mostra l'utilizzo normale del programma eseguibile dvdauthor, dove si vede che si usa inizialmente un'opzione che serve a definire l'azione da compiere; successivamente possono essere aggiunte altre opzioni che specificano ulteriormente l'azione da compiere; quindi è obbligatorio l'uso dell'opzione -i per indicare il file di dispositivo corrispondente al lettore contenente il disco da esaminare o da sezionare; infine, quasi sempre, è necessario mettere l'opzione -o con l'indicazione di una directory che deve essere usata, o creata, per inserirvi ciò che viene estrapolato dal disco dell'opzione -i.
Quando si usa l'opzione -o, nella directory indicata viene creata una sottodirectory con il nome corrispondente al titolo del DVD, ammesso che ci sia, oppure un altro nome (per esempio DVDROM/
o CDROM/
). In quella sottodirectory viene creata la directory VIDEO_TS/
, con i file estrapolati dal DVD video, in base alle altre opzioni usate.
|
Segue la descrizione di alcuni esempi.
$
dvdbackup -I -i /dev/hdc
[Invio]
Mostra una descrizione del disco contenuto nell'unità del file di dispositivo /dev/hdc
, secondo una forma simile all'esempio seguente, dove è presente un solo insieme di titoli, composto da tre titoli, che a loro volta contengono tre capitoli ognuno:
DVD-Video information of the DVD with title ... File Structure DVD VIDEO_TS/ VIDEO_TS.IFO 12288 VIDEO_TS.VOB 77824 VIDEO_TS.BUP 12288 VTS_01_0.IFO 12288 VTS_01_1.VOB 87541760 VTS_01_0.BUP 12288 Main feature: Title set containing the main feature is 1 The aspect ratio of the main feature is 4:3 The main feature has 1 angle(s) The main feature has 1 audio_track(s) The main feature has 0 subpicture channel(s) The main feature has a maximum of 3 chapter(s) in on of its titles The main feature has a maximum of 2 audio channel(s) in on of its titles Title Sets: Title set 1 The aspect ratio of title set 1 is 4:3 Title set 1 has 1 angle(s) Title set 1 has 1 audio_track(s) Title set 1 has 0 subpicture channel(s) Titles included in title set 1 is/are Title 1: Title 1 has 3 chapter(s) Title 1 has 2 audio channel(s) Title 2: Title 2 has 3 chapter(s) Title 2 has 2 audio channel(s) Title 3: Title 3 has 3 chapter(s) Title 3 has 2 audio channel(s) |
$
dvdbackup -M -n "dvd" -i /dev/hdc -o /tmp
[Invio]
Crea la directory /tmp/dvd/VIDEO_TS/
, mettendovi al suo interno tutto il contenuto del disco che si trova nel file di dispositivo /dev/hdc
. Il contenuto in questione si riferisce, comunque, a quello di un DVD video.
$
dvdbackup -T 1 -n "dvd" -i /dev/hdc -o /tmp
[Invio]
Crea la directory /tmp/dvd/VIDEO_TS/
, mettendovi al suo interno i file del primo insieme di titoli del disco che si trova nel file di dispositivo /dev/hdc
. I file in questione corrispondono al modello VTS_01_*
.
$
dvdbackup -t 2 -n "dvd" -i /dev/hdc -o /tmp
[Invio]
Crea la directory /tmp/dvd/VIDEO_TS/
, mettendovi al suo interno uno o più file .VOB
contenenti il secondo titolo del disco che si trova nel file di dispositivo /dev/hdc
.
$
dvdbackup -t 2 -s 1 -e 2 -n "dvd" -i /dev/hdc -o /tmp
[Invio]
Crea la directory /tmp/dvd/VIDEO_TS/
, mettendovi al suo interno uno o più file .VOB
contenenti i primi due capitoli del secondo titolo del disco che si trova nel file di dispositivo /dev/hdc
.
Come si intende dalla lettura della sezione precedente, per predisporre un DVD video con l'aiuto di Dvdauthor, è necessario disporre di file in formato VOB, con le caratteristiche geometriche previste dallo standard prescelto (PAL/SECAM o NTSC) e con una traccia audio stereofonica campionata a 48 000 Hz. Per la precisione, lo standard DVD PAL/SECAM richiede quadri da 720×576 punti grafici, mentre lo standard DVD NTSC richiede quadri da 720×480 punti grafici.
Generalmente, i file multimediali di cui si può disporre facilmente o che si possono produrre attraverso apparecchiature comuni, non dispongono delle caratteristiche richieste dallo standard DVD video e occorre procedere con diversi passaggi di trasformazione. Si suppone di disporre del file filmato.avi
, contenente video e audio, assolutamente incompatibili con lo standard DVD video. Si comincia estrapolando la componente video, trasformandola con l'aiuto di FFmpeg:
$
ffmpeg -i filmato.avi -f mpeg2video -hq -sameq -r 25
\
\ -s 720x576 video.m2v
[Invio]
In questo modo si ottiene il file video.m2v
in formato MPEG-2 (solo video), con dimensioni e frequenza di quadro conformi allo standard PAL, indipendentemente dalle caratteristiche del file originale. Nello stesso modo si estrapola la componente audio, ma in tal caso non viene ancora modificata la campionatura:
$
ffmpeg -i filmato.avi -f wav audio.wav
[Invio]
Si ottiene il file audio.wav
, che si suppone avere una campionatura non appropriata, pertanto si rielabora con Sox, specificando anche di volere comunque due canali audio, per la stereofonia:
$
sox audio.wav -r 48000 -c 2 audio.48.wav resample
[Invio]
Si ottiene così il file audio.48.wav
che viene usato per generare un file MP2 con l'aiuto di Toolame:
$
toolame -b 128 audio.48.wav audio.mp2
[Invio]
A questo punto, con il programma mplex di Mjpegtools si possono aggregare i file video.m2v
e audio.mp2
in un file VOB adatto a Dvdauthor:
$
mplex -f 8 -V -o filmato.vob video.m2v audio.mp2
[Invio]
Si ottiene così il file filmato.vob
, che, come già mostrato nella sezione precedente, può essere trattato da Dvdauthor.
Il file allegati/video/audio_video_transcode.txt contiene la descrizione di una funzione per uno script di shell compatibile con lo standard POSIX, che ha lo scopo di produrre un file VOB appropriato a partire da un file contenente un filmato, che FFmpeg sia in grado di gestire. Disponendo del file filmato.avi
, volendo generare il file filmato.vob
, aderente allo standard PAL, occorrerebbe chiamare la funzione nel modo seguente:
|
Per inserire delle diapositive in un DVD video, occorre trasformare delle immagini fisse in filmati, contenenti una traccia audio, che eventualmente può essere silenziosa. A titolo di esempio, viene mostrato il procedimento per produrre un file VOB da un'immagine JPG (figura.jpg
) che ha già la geometria corretta per lo standard DVD video, con l'aiuto di strumenti contenuti del pacchetto Mjpegtools.
Si può creare un video YUV4MPEG con jpeg2yuv. In questo caso si vuole produrre un video di 10 s; considerato che si intende usare lo standard PAL, che prevede 25 quadri al secondo, occorre che il video contenga 250 quadri totali:
$
jpeg2yuv -f 25 -I p -L 0 -n 250 -j figura.jpg
\
\ > video.y4m
[Invio]
Si ottiene così il file video.y4m
da convertire in formato MPEG-2, creando il file video.m2v
:
$
mpeg2enc -a 2 -n p -f 3 -b 200 -o video.m2v
\
\ < video.y4m
[Invio]
Viene creato un file audio silenzioso, di 10 s, in formato MP2, con una frequenza di campionamento di 48 000 Hz in stereofonia:
$
dd if=/dev/zero bs=4 count=480000
\
\ | toolame -b 128 -s 48 /dev/stdin audio.mp2
[Invio]
Si ottiene il file audio.mp2
che si può usare assieme a video.m2v
per creare un contenitore multimediale MPEG2 (video e audio) con l'aiuto di mplex:
$
mplex -f 8 -V -o diapositiva.vob video.m2v audio.mp2
[Invio]
Si ottiene così il file diapositiva.vob
.
Il file allegati/video/picture_transcode.txt contiene una funzione per uno script di shell compatibile con lo standard POSIX, che ha lo scopo di produrre un file VOB appropriato a partire da un file contenente un'immagine fissa, che ImageMagick sia in grado di gestire. Disponendo del file figura.png
, volendo generare il file diapositiva.vob
della durata di 15 s, aderente allo standard PAL, occorrerebbe chiamare la funzione mostrata, nel modo seguente:
|
La realizzazione di un menù per un DVD video è una fase necessaria per produrre un risultato fruibile dall'utenza comune. Il menù è un file VOB che assomiglia idealmente a quello che si realizza a partire da un'immagine fissa, come nel caso delle diapositive, che però deve contenere delle informazioni aggiuntive. Dopo la realizzazione di un file VOB di questo tipo, occorre utilizzare Dvdauthor in modo leggermente diverso da quanto mostrato fino a questo punto, per collegare il menù agli altri file VOB esistenti.
Si crea inizialmente un disegno, con un programma appropriato, contenente al massimo tre colori, con una geometria approssimativa pari a quella dello standard DVD video che si vuole produrre. L'immagine potrebbe essere simile a quella che si vede nella figura 30.226.
Di questa immagine se ne deve preparare una copia, dalla quale va rimosso il titolo e va ridotta a soli due colori: il testo nero e lo sfondo bianco.
Si osservi che è bene circoscrivere le voci del menù con una cornice, come nell'esempio che viene proposto, per consentire successivamente al programma spumux di Dvdauthor di individuarle e distinguerle correttamente. |
A questo punto occorre assicurarsi di avere le immagini della geometria esatta e occorre produrre alcune immagini derivate. Il primo file contenente il menù con il titolo sia fondale.jpg
; il secondo, senza titolo e solo in bianco e nero, sia pulsanti.jpg
. Vengono usati i programmi di ImageMagick per le varie conversioni.
$
convert -geometry 720x576! -posterize 3 fondale.jpg
\
\ menu.background.jpg
[Invio]
Con questo primo comando viene prodotta l'immagine da usare come fondale del menù; come si vede si impone di adattare il file che si ottiene alla geometria dello standard PAL e di avere solo tre colori.
Successivamente, a partire dal file pulsanti.jpg
, si crea un file con soli due colori, dove il bianco deve annullarsi e diventare trasparente. Si ottiene il file menu.black.png
:
$
convert -geometry 720x576! -posterize 2
\
\ -transparent white
\
\ pulsanti.jpg menu.black.png
[Invio]
|
Da questo file con la scritta nera e lo sfondo trasparente, si creano altri file, dove la scritta deve apparire con colori differenti:
$
convert -fill red -colorize 100% menu.black.png
\
\ menu.red.png
[Invio]
$
convert -fill blue -colorize 100% menu.black.png
\
\ menu.blue.png
[Invio]
$
convert -fill green -colorize 100% menu.black.png
\
\ menu.green.png
[Invio]
|
Quindi si crea un filmato molto breve, in formato VOB, utilizzando il file menu.background.jpg
. In questo caso, però, si preferisce che il file finale (VOB) abbia l'estensione .mpg
, perché non si tratta ancora del file VOB definitivo:
$
jpeg2yuv -n 50 -I p -f 25 -j menu.background.jpg
\
\ | mpeg2enc -n p -f 3 -b 200 -o menu.m2v
[Invio]
$
dd if="/dev/zero" bs=4 count=1600
\
\ | toolame -b 128 -s 48 /dev/stdin menu.mp2
[Invio]
$
mplex -f 8 -o menu.mpg menu.m2v menu.mp2
[Invio]
A questo punto si deve usare il programma spumux di Dvdauthor, che però richiede prima la preparazione di un file XML di configurazione, come quello seguente:
|
In base al contenuto di questo file di configurazione, lo spazio tra i pulsanti deve essere maggiore o uguale a 15 punti grafici; inoltre, l'ordine con cui si intendono disposti i pulsanti è per righe.
Supponendo di avere salvato il file XML di spumux con il nome menu.spumux, si può procedere così:
$
spumux menu.spumux < menu.mpg > menu.vob
[Invio]
Nel file allegati/video/dvd_menu.txt è contenuta una funzione per uno script di shell compatibile con lo standard POSIX, che ha lo scopo di produrre un menù VOB appropriato a partire da un file contenente un'immagine fissa, unica, che ImageMagick sia in grado di gestire. Questo script produce però un risultato semplificato, in quanto si attende di ricevere una figura in bianco e nero, contenente esclusivamente le voci del menù, bordate in modo appropriato. Disponendo del file menu.png
, volendo generare il file menu.vob
aderente allo standard PAL, occorrerebbe chiamare la funzione mostrata, nel modo seguente:
|
Naturalmente, la creazione del file VOB contenente il menù, non esaurisce il problema, dal momento che poi questo menù deve essere collegato ai contenuti del DVD. Nella sezione successiva si vede come usare Dvdauthor a questo fine.
Una volta creato il menù del DVD in un file VOB, occorre collegare questo menù al resto del DVD. Per fare questo si può usare Dvdauthor in un modo differente rispetto a quello mostrato fino a questo punto, preparando un file XML di configurazione appropriato.
Come accennato in precedenza, il contenuto di un DVD può essere strutturato in «titoli» che a loro volta si articolano in «capitoli». In questa sezione si associa un titolo a ogni contenuto del DVD, facendo sì che ogni titolo contenga soltanto un capitolo. C'è da considerare che è possibile articolare il contenuto di un DVD in un menù principale e in altri menù inferiori, ma questa possibilità non viene descritta qui.
Si presume di avere preparato quattro filmati, già convertiti nel formato VOB. Si tratta dei file filmato-1.vob
, filmato-2.vob
, filmato-3.vob
e filmato-4.vob
. Si suppone che dopo la visualizzazione di uno di questi filmati si voglia tornare al menù. Quello che segue è il file XML da fornire poi a Dvdauthor:
|
Supponendo che il file XML si chiami dvd.xml
, si può utilizzare dvdauthor nel modo seguente:
$
dvdauthor -x dvd.xml
[Invio]
In base al contenuto del file dvd.xml
, si ottiene la directory /tmp/dvd/
, con il contenuto del DVD, da trasformare in file-immagine con mkisofs:
$
mkisofs -dvd-video -o dvd.img /tmp/dvd
[Invio]
Si ottiene così il file dvd.img
pronto per l'incisione del DVD.
Eseguendo il DVD con un programma come Xine o con un lettore DVD casalingo, si dovrebbe vedere un menù come quello che si vede nella figura successiva, dove il cursore si trova sopra il pulsante {Titolo 1
}.
Volendo fare in modo che dopo l'esecuzione di uno dei primi tre titoli si passi automaticamente al successivo, basta modificare così l'elemento titles del file dvd.xml
:
|
Dvdauthor ha una limitazione che impedisce di gestire più di 36 titoli in un solo menù. Tuttavia, più file VOB possono essere raggruppati in uno stesso titolo. L'esempio seguente mostra un file XML di configurazione di Dvdauthor, con tre titoli che si dividono alcuni file VOB. Si osservi che, in base alla configurazione mostrata, ogni file incluso in un titolo va a costituire un capitolo dello stesso.
|
Ci sono diversi programmi che consentono la realizzazione di un DVD video attraverso un'interfaccia grafica, più o meno intuitiva. L'utilizzo di tali programmi può facilitare questo tipo di lavoro, ma rimane il fatto che i concetti legati all'organizzazione di un DVD video devono essere conosciuti.
In questa sezione viene mostrato l'uso di DVDStyler(74) che è un programma frontale grafico, che a sua volta si avvale di altri programmi per la realizzazione di un DVD video, a partire dalla costruzione del menù. Il suo funzionamento viene descritto attraverso l'esempio di un progetto molto semplice, con un solo menù iniziale e alcuni file MPEG che costituiscono, ognuno, un titolo differente.
DVDStyler si avvia attraverso l'eseguibile dvdstyler, senza l'indicazione di opzioni e argomenti:
dvdstyler |
Prima di iniziare il progetto di un DVD video occorre verificare la configurazione; in particolare occorre controllare che venga usato lo standard video desiderato (NTSC o PAL). Per questo si accede alla voce {Settings
} del menù {Configuration
}.
Di solito conviene iniziare il progetto del DVD dal menù. Sul bordo sinistro della finestra del programma appaiono dei pulsanti di selezione, dove dovrebbe risultare selezionata la voce <Backgrounds
> e nella porzione sinistra della finestra dovrebbero apparire, di conseguenza, alcuni esempi di sfondi da usare per il menù. Se non piacciono, basta selezionare la voce <Directories
> e cercare i file con le immagini che si gradiscono di più. Una volta scelta l'immagine, la si seleziona trascinandola nel riquadro nero sulla destra, facendola diventare lo sfondo del menù.
Supponendo di sapere già quanti sono i titoli del DVD video che si vuole creare, si può passare alla scrittura del testo degli stessi. Per fare questo si deve selezionare la voce <Buttons
> (sul bordo sinistro della finestra), quindi trascinare il modello che si preferisce nel riquadro destro contenente l'immagine del menù del DVD. Una volta trascinati i modelli che si desiderano, occorre modificarli, usando il mouse con il tasto destro.
Il testo delle voci del menù può contenere qualsiasi cosa si ritenga più appropriato; si può cambiare il carattere e la sua colorazione; tuttavia, la cosa più importante da fare è associare correttamente la voce al titolo del DVD video che si sta realizzando. Per esempio, quello che si ritiene essere il terzo titolo, deve contenere l'azione jump title 3;. Si osservi anche che il carattere selezionato deve essere codificato secondo lo standard Unicode (si vede la sigla ISO 10646-1).
Per scegliere i filmati da inserire nel DVD, si può selezionare il bottone Directories, sul bordo sinistro della finestra, in modo da poter cercare i file che si desiderano includere. Una volta trovati i file, si trascinano nella parte bassa della finestra, dopo l'icona che rappresenta il menù di apertura.
Così facendo, ogni file costituisce un titolo differente.
Terminato il disegno del DVD video, si può salvare il progetto in un file, selezionando la voce {Save as
} del menù {File
}. Viene proposto di usare un nome con estensione .xml
.
Si può passare così alla creazione del DVD video attraverso la funzione {Burn DVD
} del menù {File
}.
Inizialmente conviene limitarsi a creare un file-immagine del DVD, che può essere provato con gli strumenti usuali (come VLC o Xine), prima di incidere un DVD reale. È sconsigliabile di provare l'anteprima, che potrebbe apparire errata, mentre invece il risultato può essere corretto.
Confermando, si passa alla fase di elaborazione, che se tutto va bene si conclude con la creazione del file-immagine desiderato.
Per provare un file-immagine, si può usare un MRL del tipo:
|
Exif.org, http://www.exif.org/
ID3.org, http://www.id3.org/
Phil Harvey, ExifTool, http://www.sno.phy.queensu.ca/~phil/exiftool/
SANE - Scanner Access Now Easy, http://www.sane-project.org/
SANE: Supported Devices, http://www.sane-project.org/sane-mfgs.html
SANE: Backends (Drivers), http://www.sane-project.org/lists/
SANE - Documentation, http://www.sane-project.org/docs.html
Howard Shane, The Scanner HOWTO, http://tldp.org/HOWTO/Scanner-HOWTO/
Jochen Eisinger, SANE Network Daemon, http://penguin-breeder.org/sane/saned/
Jeff Tranter, The Linux Sound HOWTO, http://tldp.org/HOWTO/Sound-HOWTO/
Documentazione del kernel, sorgenti_linux/Documentation/sound/
eSpeak, http://espeak.sourceforge.net/
Xiph.Org, Ogg Vorbis, http://www.xiph.org/vorbis/
Eric Scheirer, Frequently Asked Questions: MPEG, Patents, and Audio Coding, 1998, http://wayback.archive.org/web/*/http://web.media.mit.edu/~eds/mpeg-patents-faq
The LAME project, http://lame.sourceforge.net
Martin Nilsson, ID3 tag version 2, 1998, http://www.id3.org/id3v2-00
Phill Kerr, The Linux MP3-HOWTO, http://tldp.org/HOWTO/MP3-HOWTO.html
Shoutcast home, http://www.shoutcast.com
Classical Internet Radio, http://www.sky.fm/classical/
Digitally imported, http://www.di.fm
MPEGRadio, http://www.mpegradio.com
Eric A. Welsh, Eawpatches for Timidity, http://pdb.finkproject.org/pdb/package.php/timidity-eawpatches
Timidity++, http://timidity.sourceforge.net
MPEG pointers and resources, http://www.mpeg.org/MPEG/index.html
MJPEG Tools, http://mjpeg.sourceforge.net/, http://sourceforge.net/projects/mjpeg
FFmpeg, http://ffmpeg.sourceforge.net/, http://sourceforge.net/projects/ffmpeg
Dvdauthor, http://dvdauthor.sourceforge.net/, http://sourceforge.net/projects/dvdauthor
VideoHelp.com, http://www.videohelp.com
1) Exiftool stesse condizioni di Perl
4) SANE API and network protocol dominio pubblico
5) SANE backend libraries GNU GPL con alcune eccezioni
7) Xscanimage GNU GPL
8) Xscanimage GNU GPL
9) X MIT più altre licenze per porzioni particolari di codice
10) X MIT più altre licenze per porzioni particolari di codice
11) Xgrabsc software libero con licenza speciale
12) Xloadimage software libero con licenza speciale
13) Con Xloadimage si fa riferimento a «immagini» e non semplicemente a file che contengono delle immagini, perché questo programma ha una propria gestione dei percorsi e delle estensioni, anche se non è necessario sfruttare tale possibilità.
14) XPaint software libero soggetto a diverse licenze a seconda della porzione di codice coinvolta
16) ImageMagick software libero con licenza speciale
17) GraphicsMagick software libero con licenza speciale
18) Kolourpaint GNU GPL
27) Cdparanoia GNU GPL
29) Disc-Cover GNU GPL
30) Cdlabelgen software libero con licenza speciale
33) Alsamixergui GNU GPL
34) Gnome-media GNU GPL e GNU LGPL
36) Sound-recorder GNU GPL
37) Alsa-utils GNU GPL
38) Sox software libero con licenza speciale
44) MIDI-Perl GNU GPL o Artistic
45) Timidity++ GNU GPL
46) Eawpatches dominio pubblico, salvo alcuni file
50) Vorbis Tools GNU GPL
53) MP3blaster GNU GPL
58) Makepasswd GNU GPL
63) Streamtuner simile a BSD
64) Streamripper GNU GPL
67) Recordmydesktop GNU GPL
70) Mjpegtools GNU GPL
«a2» 2013.11.11 --- Copyright © Daniele Giacomini -- appunti2@gmail.com http://informaticalibera.net