Capitolo 30.   Immagini, audio e video

.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

30.1   File multimediali: contenitori e contenuti.

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).

30.1.1   Impronta

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.

Figura 30.2. Impronta di un file JPG.

......JFIF......................................
C................................... $.' ",#..(7
...
...

Figura 30.3. Impronta di un file PNG.

.PNG........IHDR...^...U........E....bKGD.......
.......pHYs.................tIME.....$...QG....t
...
...

Figura 30.4. Impronta di un file GIF (versione «89a»).

GIF89a^.U..P...........................". ..%  .
."."!".&&&/-2)0)/400-/1+212.665:A9?C@B;BAA?FFFJQ
...
...

Figura 30.5. Impronta di un file PDF (versione «1.4»).

%PDF-1.4
...
...

Figura 30.6. Impronta di un file ZIP (archivio compresso).

PK........5.o5................LogicSim/UT...&E[E
...
...

30.1.2   Intestazioni

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.

Figura 30.7. Esempio di un file JPG, che nella sua parte iniziale contiene un commento, oltre ad altre informazioni espresse in forma numerica binaria, non distinguibili nella figura.

......JFIF..............Created with The GIMP...
C................................... $.' ",#..(7
),01444.'9=82<.342...C...........2!.!22222222222
...
...

30.1.3   Etichette

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à.

30.1.4   Involucri

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.

30.1.5   Exif

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.

Tabella 30.8. Esempio di informazioni contenute all'interno di un'immagine JPG, secondo lo standard Exif.

Manufacturer FUJIFILM
Model FinePix A205S
Orientation top - left
x-Resolution 72.00
y-Resolution 72.00
Resolution Unit Inch
Software Digital Camera FinePix A205S Ver1.00
Date and Time 2004:08:07 21:24:52
YCbCr Positioning co-sited
Copyright [None] (Photographer) - (Editor)
Compression JPEG compression
Orientation top - left
x-Resolution 72.00
y-Resolution 72.00
Resolution Unit Inch
YCbCr Positioning co-sited
Exposure Time 1/2 sec.
FNumber f/4.8
ExposureProgram Normal program
ISO Speed Ratings 200
Exif Version Exif Version 2.2
Date and Time 2004:08:07 21:24:52
Shutter speed 120/100 sec. (APEX: 1)
Aperture f/4.8
Brightness -148/100
Exposure Bias 0.0
MaxApertureValue 3.20
Metering Mode Pattern
Light Source 0
Flash Flash did not fire, compulsatory flash.
Focal Length 16.5 mm
Maker Note 286 bytes unknown data
FlashPixVersion FlashPix Version 1.0
Color Space sRGB
PixelXDimension 1600
PixelYDimension 1200

30.1.6   ID3

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.

Figura 30.9. Esempio di informazioni contenute all'interno di un file MP3, secondo lo standard ID3.

Track: 1
Year: 2001
Genre: Classical [32]
Title: BWV 1041 / I. Allegro
Artist: Lara St. John
Album: Bach Violin Concertos
Comment: From magnatune.com

30.2   Exiftool

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

30.2.1   Tipi di informazioni

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:

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.

30.2.2   Modifica delle informazioni

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

Altri programmi affini.

30.3   Uso dello scanner con SANE

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:

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.

30.3.1   Lucchetto

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.

Figura 30.17. Due scanner sbloccati e pronti per l'uso.

Lucchetti aperti degli scanner

30.3.2   Schema generale

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.

Figura 30.18. Schema di massima della struttura di SANE.

SANE

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.

30.3.3   Configurazione

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:

# /etc/sane.d/dll.conf
# SANE dynamic backend loader configuration

net
abaton
agfafocus
apple
avision
...
...
umax
#umax_pp
umax1220u
v4l

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:

...
sane         6566/tcp    saned # SANE network scanner daemon
...

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:

...
sane  stream  tcp  nowait  saned.saned  /usr/sbin/tcpd  /usr/sbin/saned
...

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:

#
# saned.conf
#
127.0.0.1
192.168.0.0/16
172.16.0.0/12
10.0.0.0/8
[::1]
[fe80::]/10

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:

#
# net.conf
#
192.168.1.2

Secondo questo esempio si prevede di poter accedere a uno scanner presso l'elaboratore con indirizzo IPv4 192.168.1.2.

30.3.4   Gruppo «scanner»

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:

...
scanner:x:106:tizio,caio,sempronio,mevio,\
  \filano,martino,calpurnio ...

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.

30.3.5   Individuazione dello scanner locale

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 \
  \[CanoScan], chip=LM9832/3) at libusb:001:002 # Your USB scanner was (probably) detected. It may or may # not be supported by SANE. Try scanimage -L and read the # backend's manpage. # Not checking for parallel port scanners. # Most Scanners connected to the parallel port or other # proprietary ports can't be detected by this program.

scanimage -L[Invio]

device `plustek:libusb:001:002' is a Canon \
  \N670U/N676U/LiDE20 USB flatbed scanner

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 \
  \libusb:001:003 found USB scanner (vendor=0x04a9 [Canon], product=0x220d \
  \[CanoScan], chip=LM9832/3) at libusb:001:002 # Your USB scanner was (probably) detected. It may or may # not be supported by SANE. Try scanimage -L and read the # backend's manpage. # Not checking for parallel port scanners. # Most Scanners connected to the parallel port or other # proprietary ports can't be detected by this program.

scanimage -L[Invio]

device `plustek:libusb:001:002' is a Canon \
  \N670U/N676U/LiDE20 USB flatbed scanner

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.

30.3.6   Permessi

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:

...
scanner:x:106:106:Scanner test user:/:/bin/false
...

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:

...
sane stream tcp nowait saned.saned /usr/sbin/tcpd /usr/sbin/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ì:

...
sane  stream  tcp  nowait  scanner.scanner  /usr/sbin/tcpd  /usr/sbin/saned
...

30.3.7   Raggiungere uno scanner attraverso la rete

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:

#
# /etc/sane.d/net.conf
#
192.168.1.2
192.168.1.3
192.168.1.4

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 /etc/sane.d/saned.conf.

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 \
  \Canon N670U/N676U/LiDE20 USB flatbed scanner

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:

#
# /etc/sane.d/net.conf
#
127.0.0.1
...

L'accesso a uno scanner remoto potrebbe essere limitato ad alcuni utenti che devono fornire una parola d'ordine, attraverso la configurazione del file /etc/sane.d/saned.users, ma questo procedimento non viene descritto e può essere approfondito leggendo la pagina di manuale saned(8).

30.3.7.1   Problemi tra cliente e servente

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, \
  \version_code = 0xbfffe85c [net] sane_init: SANE net backend version 1.0.12 \
  \(AF-indep+IPv6) from sane-backends 1.0.14 [net] sane_init: Client has little endian byte order [net] sane_init: searching for config file [net] sane_init: trying to add 192.168.1.2 [net] add_device: adding backend 192.168.1.2 [net] add_device: backend 192.168.1.2 added [net] sane_init: done reading config [net] sane_init: evaluating environment variable \
  \SANE_NET_HOSTS [net] sane_init: done [net] sane_get_devices: local_only = 0 [net] connect_dev: trying to connect to 192.168.1.2 [net] connect_dev: [0] connection succeeded (IPv4) [net] connect_dev: sanei_w_init [net] connect_dev: net_init (user=tizio, local version=1.0.3) [net] connect_dev: freeing init reply \
  \(status=Success, remote version=1.0.3) [net] connect_dev: done [net] sane_get_devices: got \
  \192.168.1.2:plustek:libusb:001:002 [net] sane_get_devices: finished (1 devices) [net] sane_exit: exiting [net] sane_exit: closing dev 0x808bd70, ctl=21 [net] sane_exit: finished.

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 \
  \(No such file or directory) [saned] check_host: opening config file: saned.conf [saned] check_host: config file line: `#' [saned] check_host: config file line: `# saned.conf' [saned] check_host: config file line: `#' [saned] check_host: config file line: `' [saned] check_host: config file line: `192.168.0.0/16' [saned] check_host: subnet with base IP = 192.168.0.0, CIDR netmask = 16 [saned] check_host: config file line: `172.16.0.0/12' [saned] check_host: subnet with base IP = 172.16.0.0, CIDR netmask = 12 [saned] check_host: access granted from IP address 192.168.1.1 \
  \(in subnet 192.168.1.1/16) [saned] init: access granted [saned] init: access granted to tizio@::ffff:192.168.1.1 [saned] process_request: waiting for request [saned] process_request: got request 1 [saned] process_request: waiting for request [saned] process_request: got request 10 [saned] quit: exiting

30.3.8   Utilizzo di «scanimage»

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.

Tabella 30.38. Alcune opzioni generali.

Opzione Descrizione
-L
--list-devices
Questa opzione viene usata da sola per ottenere l'elenco degli scanner che il programma è in grado di individuare automaticamente.
-d dispositivo
--device-name dispositivo
Serve a specificare a quale scanner ci si vuole rivolgere. L'argomento dell'opzione è la stringa di riconoscimento dello scanner, come già mostrato, per esempio plustek:libusb:001:002.
--format pnm|tiff
Serve a specificare il formato del file da creare; se non si utilizza questa opzione, si ottiene un formato PNM.
-n
--dont-scan
Simula l'operazione, senza eseguirla veramente.
-T
--test
Esegue una serie di verifiche per accertare la compatibilità di funzionamento.
-h
--help
Mostra una guida sintetica all'uso del programma, completa delle opzioni specifiche degli scanner individuati automaticamente.

La scansione di un'immagine attraverso scanimage viene ottenuta dallo standard output di questo. Segue la descrizione di alcuni esempi.

30.3.9   Altri programmi frontali

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.

Figura 30.39. Xscanimage con la finestra dell'anteprima aperta, dove è stato selezionato un rettangolo da scandire.

Xscanimage

Xsane(8) è un altro programma, un po' più sofisticato, per il controllo della scansione delle immagini:

xsane [opzioni] [dispositivo]

Figura 30.40. Xsane con la finestra dell'anteprima aperta, dove è stato selezionato un rettangolo da scandire.

Xsane

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.

30.3.10   Pagine di manuale

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]

Tabella 30.41. Alcune pagine di manuale di SANE.

Pagina di manuale Descrizione
sane-dll(5) Descrive la configurazione generale del sistema di librerie dinamiche.
sane-find-scanner(1) Descrive l'utilizzo e il funzionamento del programma sane-find-scanner.
sane-usb(5) Contiene delle informazioni utili all'utilizzo di uno scanner USB.
sane-scsi(5) Contiene delle informazioni utili all'utilizzo di uno scanner SCSI.
saned(8) Descrive il funzionamento e l'utilizzo di saned per consentire l'accesso remoto allo scanner locale.
sane-...(5) Le pagine di manuale il cui nome inizia per sane- e termina con il nome usato per individuare la gestione di un certo gruppo di scanner (backend), descrivono le caratteristiche particolari della libreria relativa.
sane-net(5) Descrive la modalità di accesso a uno scanner remoto.

30.4   Gestione delle immagini

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.

30.4.1   Programmi specifici per la cattura dallo schermo

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).

30.4.1.1   Utilizzo di «xwd»

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]

Tabella 30.42. Alcune opzioni.

Opzione Descrizione
-nobdrs
Non include i bordi della finestra.
-frame
Include anche la cornice del gestore di finestre.
-out file
Permette di specificare un file di destinazione diverso dallo standard output.
-root
Cattura tutta la superficie grafica.

30.4.1.2   Utilizzo di «xwud»

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.

30.4.1.3   Utilizzo di «xgrab»

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.

Figura 30.43. Il programma xgrab impostato per catturare una finestra intera, completa di cornice, e generare il file screen1.dmp in formato ppm.

xgrab

30.4.2   Xloadimage

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.

30.4.2.1   Avvio del programma

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:

Tasto Funzione
[n] passa all'immagine successiva;
[barra-spaziatrice] passa all'immagine successiva;
[p] torna all'immagine precedente;
[q] fine lavoro.

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.

30.4.2.2   Opzioni globali

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.

Tabella 30.45. Finestra.

Opzione Descrizione
-fullscreen
Utilizza tutto lo schermo per visualizzare ogni immagine.
-geometry geometria
Questa opzione funziona nel modo solito: determina le dimensioni della finestra.
-onroot
Colloca l'immagine nella finestra principale, utilizzandola come fondale. Quando Xloadimage viene avviato con lo pseudonimo xsetbg, questa opzione è predefinita.
-view
Visualizza le immagini in una finestra, invece che utilizzare la finestra principale. Questa opzione è attiva in modo predefinito nel caso in cui il programma venga avviato con il suo nome o anche con lo pseudonimo xview.

Tabella 30.46. Colori.

Opzione Descrizione
-border colore
Definisce il colore di fondo delle zone che non sono coperte dall'immagine da visualizzare.
-visual tipo_visualizzazione
Permette di specificare in modo esplicito il tipo di visualizzazione desiderato. I tipi disponibili sono: DirectColor, TrueColor, PseudoColor, StaticColor, GrayScale, StaticGray.

Tabella 30.47. Formati.

Opzione Descrizione
-dump formato[,opzione] \
  \file_da_generare
Permette di generare un file contenente l'immagine nel formato specificato. Le opzioni di formato dipendono dal tipo di questo e possono esserne indicate diverse, separandole con una virgola (senza spazi). A seconda del tipo di formato di immagine e del tipo di opzione, potrebbe essere necessario aggiungere un attributo a questa, nella forma opzione=valore. La tabella 30.56 mostra i tipi di formato leggibili e quelli in cui è possibile salvare.
-type tipo_immagine
Forza Xloadimage a utilizzare un formato determinato per caricare un'immagine. Normalmente è il programma stesso a determinare autonomamente di quale tipo si tratti

Tabella 30.48. Informazioni.

Opzione Descrizione
-configuration
Mostra la configurazione di Xloadimage. La configurazione viene descritta più avanti.
-supported
Emette, attraverso lo standard output, un elenco di formati di immagini gestiti.
-help [opzione...]
Permette di ottenere informazioni su una o più opzioni. Se non ne vengono specificate, inizia una modalità interattiva, attraverso la quale è possibile ottenere brevi guide alle opzioni indicate durante tale sessione.
-identify
Invece di visualizzare le immagini, si ottiene solo la loro identificazione, con una serie di messaggi emessi attraverso lo standard output.

Tabella 30.49. Varie.

Opzione Descrizione
-delay secondi
Determina una durata di permanenza di ogni immagine. Serve per permettere uno scorrimento automatico delle immagini indicate come argomento, come una sequenza di diapositive. Senza l'indicazione di questo valore, è l'utente che deve agire per visualizzare l'immagine successiva.
-fork
Fa in modo di dissociare Xloadimage dalla shell dalla quale è stato eseguito. In pratica, con questa opzione, il processo elaborativo diventa un figlio del processo iniziale (Init), disimpegnandosi dalla shell che lo ha generato.
-verbose
Fa in modo che Xloadimage dia delle informazioni, attraverso lo standard output, sulle caratteristiche dell'immagine. Questa opzione è attiva in modo predefinito nel caso l'eseguibile venga avviato con il suo nome normale o anche con lo pseudonimo xview.

Segue la descrizione di alcuni esempi.

30.4.2.3   Opzioni particolari

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.

Tabella 30.50. Validità delle opzioni.

Opzione Descrizione
-global
Inizia una serie di opzioni (successive) riferite a tutti i file di immagini che seguono nella riga di comando, eventualmente fino al raggiungimento di un'opzione -newoptions. Eventuali opzioni particolari inserite davanti a un'immagine particolare, possono servire per alterare temporaneamente queste impostazioni globali.
-newoptions
Azzera le opzioni fissate globalmente.

Tabella 30.51. Bianco e nero: e immagini che hanno solo due colori, solitamente bianco e nero, possono essere alterate in modo da sostituire tali colori.

Opzione Descrizione
-background colore
Con questa opzione si sostituisce il «bianco» delle immagini a due colori.
-foreground colore
Con questa opzione si sostituisce il «nero» delle immagini a due colori.
-invert
Inverte i colori di un'immagine a due colori.

Tabella 30.52. Effetti.

Opzione Descrizione
-brighten percentuale_luminosità
Permette di definire la percentuale della luminosità dell'immagine. 100 equivale a lasciare inalterata l'immagine.
-colors numero_colori
Permette di fissare il numero massimo di colori. È un mezzo per ridurre i colori di un'immagine.
-halftone
Trasforma l'immagine in una monocromatica (due colori) utilizzando una tecnica molto semplice, che di solito espande notevolmente l'immagine.
-dither
Trasforma l'immagine in una monocromatica (due colori) utilizzando l'algoritmo Floyd-Steinberg che offre un effetto decisamente migliore di quanto si ottiene con l'opzione -halftone.
-gamma valore
Permette di effettuare una correzione di gamma in funzione delle caratteristiche del monitor che si utilizza. Il valore predefinito, quando questa opzione non viene utilizzata, è 1.0, mentre un monitor tipico può richiedere valori da 2.0 a 2.5.
-gray
-grey
Converte i colori di un'immagine in modo che si utilizzino solo dei grigi.
-smooth
Ammorbidisce l'immagine, un po' come se fosse sfuocata. Serve in particolare per addolcire l'effetto che si ottiene quando un'immagine viene ingrandita. Questa opzione può essere indicata più volte in modo da ottenere più passaggi.

Tabella 30.53. Tagliare, copiare e incollare.

Opzione Descrizione
-clip x,y,larghezza,altezza
Preleva solo una porzione dell'immagine. Si parte dalle coordinate x,y e da lì si preleva un rettangolo della larghezza e altezza indicati (verso destra e verso il basso). Se la larghezza o l'altezza sono lasciati a zero, si intende tutta l'estensione rimanente dell'immagine.
-at x,y
Questa opzione è riferita particolarmente a un'immagine successiva alla prima. La prima immagine viene indicata come immagine base e su di essa è possibile sovrapporne un'altra a partire dalla posizione indicata dalle coordinate di questa opzione.
-merge
Permette di fondere l'immagine, dopo un'eventuale rielaborazione, sull'immagine base. Questa opzione viene utilizzata normalmente in combinazione a -at e -clip.

Tabella 30.54. Rotazioni e ridimensionamento.

Opzione Descrizione
-rotate gradi
Ruota l'immagine della quantità di gradi indicata. Si possono utilizzare solo multipli di 90.
-zoom percentuale
Ridimensiona l'immagine della percentuale indicata. Il valore 100 rappresenta la dimensione normale.
-xzoom percentuale
Ridimensiona l'immagine in orizzontale: la allarga o la restringe.
-yzoom percentuale
Ridimensiona l'immagine in verticale: la allunga o la accorcia.

Segue la descrizione di alcuni esempi.

30.4.2.4   Opzioni del tipo di immagine

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.

Tabella 30.55. Dichiarazione di alcuni formati.

Modello del formato Descrizione
jpeg
Formato JPEG.
jpeg,arithmetic
Codifica aritmetica.
jpeg,grayscale
Trasforma un'immagine a colori in una a scala di grigi.
jpeg,nointerleave
Crea un file non interfogliato (non-interleaved).
jpeg,entropy
Abilita l'ottimizzazione del parametro entropy
jpeg,quality=percentuale_qualità
Regola la qualità dell'immagine da creare. Il valore predefinito è 75; valori inferiori creano immagini più povere.
jpeg,smooth=fattore_di_sfumatura
Permette di regolare il fattore di sfumatura. Sono ammissibili tutti i valori da 0 a 100, estremi inclusi.
bmp
Formato BMP.
bpm,normal
Utilizza il formato normale.
bpm,raw
Utilizza il formato grezzo. È la modalità predefinita quando si utilizza il tipo BPM.
tiff
Formato TIFF.
tiff,compression=lzw
Compressione predefinita: Limpel-Ziv-Welsh.
tiff,compression=none
Nessuna compressione.
tiff,compression=rle
Compressione CCITT RLE.
tiff,compression=g3fax
Compressione CCITT Group 3 FAX.
tiff,compression=g4fax
Compressione CCITT Group 4 FAX.
tiff,compression=rlew
Compressione CCITT RLEW.
tiff,compression=mac
Compressione Macintosh PackBits;
tiff,compression=packbits
Compressione Macintosh PackBits;
tiff,compression=thunderscan
Compressione ThunderScan.

Tabella 30.56. Formati di immagini gestiti da Xloadimage. Solo alcuni formati possono essere usati per generare nuovi file attraverso l'opzione -dump. Questo elenco può essere ottenuto attraverso l'opzione -support.

Formato -dump Descrizione
niff Native Image File Format (NIFF)
sunraster No Sun Rasterfile
gif No GIF Image
jpeg JFIF-style JPEG Image
fbm No FBM Image
cmuraster No CMU WM Raster
pbm Portable Bit Map (PBM, PGM, PPM)
faces No Faces Project
rle No Utah RLE Image
xwd No X Window Dump
vff No Sun Visualization File Format
mcidas No McIDAS areafile
vicar No VICAR Image
pcx No PC Paintbrush Image
gem No GEM Bit Image
macpaint No MacPaint Image
xpm No X Pixmap
xbm No X Bitmap

30.4.2.5   Configurazione

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.

Tabella 30.57. Sezioni.

Direttiva Descrizione
path = percorso_di_ricerca ...
Con questa dichiarazione può essere indicato un elenco di percorsi all'interno dei quali cercare i file delle immagini. L'elenco è formato dai vari percorsi separati da uno o più spazi, caratteri di tabulazione o codici di interruzione di riga.
extention = estensione ...
Permette di indicare una serie di estensioni possibili da aggiungere ai nomi delle immagini per ottenere la corrispondenza con i nomi dei file. I file vengono cercati tentando le varie estensioni, nell'ordine in cui sono state specificate. L'elenco di estensioni è separato attraverso uno o più spazi, caratteri di tabulazione o codici di interruzione di riga.
filter = programma estensione
Specifica il programma attraverso il quale deve essere filtrato il file dell'immagine se questo termina con l'estensione indicata. Questo permette di accedere facilmente a file compressi. Le estensioni .Z e .gz sono già riconosciute e trattate correttamente attraverso il programma adatto.

Segue un esempio del file di configurazione contenente la descrizione delle direttive usate, in forma di commento:

# Percorsi da scandire alla ricerca di file di immagini
path = /usr/local/immagini
       ~/immagini

# Estensioni predefinite
extention = .gif .jpg

# Utilizza gzip se vengono trovate estensioni .gz .z .zip
filter = "gzip -cd" .gz .z .zip

30.4.3   XPaint

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.

Tabella 30.59. Alcune opzioni.

Opzione Descrizione
-size larghezzaxaltezza
Permette di definire la dimensione predefinita per la creazione di finestre vuote per il disegno.
-rcFile file
Definisce il nome e la collocazione di un file di configurazione diverso da quello predefinito, che altrimenti è ~/.XPaintrc.
-popped
Prepara una finestra vuota per il disegno all'avvio, senza bisogno di doverla richiedere espressamente durante il funzionamento del programma.
-nowarn
Senza utilizzare questa opzione, il programma avvisa ogni volta, attraverso lo standard error, della possibile perdita di informazioni quando si elaborano immagini con schermi di capacità limitate. In pratica, con questa opzione si vuole evitare di vedere ogni volta il messaggio della figura 30.60.

Figura 30.60. Avvertimento di XPaint quando la profondità di colori è limitata.

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!

Risorsa Descrizione
XPaint.patternsize: pixel
Permette di definire la dimensione in punti grafici (pixel) dei quadratini colorati che compongono la tavolozza dei colori di ogni finestra di disegno. Le dimensioni possibili vanno da 4 a 64 punti, mentre il valore predefinito è 24.

Segue la descrizione di alcuni esempi.

Figura 30.62. La finestra degli attrezzi di XPaint.

xpaint-attrezzi

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.

Figura 30.63. XPaint utilizza una finestra di disegno per ogni immagine.

xpaint-disegno

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.

Figura 30.64. Alcuni esempi delle possibilità di fotoritocco di XPaint.

xpaint-disegno-ritoccato

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.

30.4.4   Gimp

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.

Opzione Descrizione
--display schermo
Permette di specificare le coordinate dello schermo su cui devono apparire le finestre di Gimp.

La figura 30.66 mostra le finestre degli strumenti di Gimp.

Figura 30.66. Le finestre degli strumenti di Gimp.

gimp-strumenti

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.

Figura 30.67. Gimp utilizza una finestra di disegno per ogni immagine.

gimp-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.

30.4.5   ImageMagick

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.

Tabella 30.68. Alcune opzioni tipiche.

Opzione Descrizione
-display coordinate_del_display
Si tratta di un'opzione convenzionale utilizzata da quasi tutti i programmi che funzionano con il sistema grafico X. Come al solito serve per specificare il servente grafico e lo schermo dove deve apparire la finestra dell'applicazione. Le coordinate hanno generalmente la sintassi [nodo]:servente[.schermo].
-geometry [larghezza[%]xaltezza[%]]\
  \[+|-posizione_orizz]\
  \[+|-posizione_vert][!]
Questa opzione si rifà a quella omonima utilizzata dai programmi comuni per X. Tuttavia utilizza una sintassi più ricca, che permette di indicare anche il ridimensionamento relativo delle immagini. Questa opzione viene usata sia dai programmi che si occupano di visualizzare un'immagine, sia da quelli che si limitano a rielaborarla. Quando l'immagine non deve essere visualizzata non hanno senso le indicazioni che specificano la posizione della finestra sullo schermo.
-geometry larghezzaxaltezza[!]
In questo caso si definisce la dimensione dell'immagine in punti. In condizioni normali le proporzioni vengono mantenute, riducendo automaticamente la larghezza o l'altezza, a meno che venga aggiunto un punto esclamativo finale con cui si impone la deformazione.
-geometry larghezza%xaltezza%
In questo caso si modificano le proporzioni dell'immagine indicando valori di larghezza e altezza percentuali: 100 indica la dimensione normale (100 %).
-geometry [dimensioni]\
  \[+|-posizione_orizz]\
  \[+|-posizione_vert]
Dopo le dimensioni (effettive o relative) si può indicare la posizione in cui deve apparire la finestra dell'immagine, secondo il modo normale utilizzato dalle applicazioni per X.
-colors n_colori
In una trasformazione permette di indicare il numero massimo di colori contenuto nelle immagini.
-monochrome
Trasforma l'immagine in modo da utilizzare solo bianco e nero.

30.4.5.1   Utilizzo di «convert»

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.

Tabella 30.69. Alcune opzioni specifiche.

Opzione Descrizione
-delay centesimi_di_secondo
Questa opzione è utile solo nel caso si stia generando un'animazione GIF, per stabilire la durata di visualizzazione tra un'immagine e la successiva.
-flip
Ribalta specularmente l'immagine in modo verticale.
-flop
Ribalta specularmente l'immagine in modo orizzontale.
-quality n_livello
Permette di stabilire il livello qualitativo di un'immagine che utilizza una compressione con perdita: JPEG, MIFF e PNG. Il valore zero rappresenta la qualità peggiore, mentre 100 rappresenta la qualità migliore. Il valore predefinito è 75.
-rotate n_gradi
Ruota l'immagine del numero di gradi indicato.
-sharpen n_fattore
Mette a fuoco l'immagine specificando il fattore che è un numero tra 0,0 e 99,9. Il valore più alto porta al massimo l'effetto di messa a fuoco.

Segue la descrizione di alcuni esempi.

30.4.5.2   Utilizzo di «mogrify»

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...
Opzione Descrizione
-format nome_formato
Permette di definire la trasformazione in un formato differente da quello originale. Utilizzando questa opzione, le modifiche non si riflettono nel file di origine, ma in una copia che prende l'estensione del nome utilizzato per definire il formato.

Segue la descrizione di alcuni esempi.

30.4.5.3   Utilizzo di «animate»

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.

Opzione Descrizione
-delay centesimi_di_secondo
Questa opzione permette di definire la durata di visualizzazione tra un'immagine e la successiva.

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]

30.4.5.4   Utilizzo di «montage»

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]

30.4.5.5   Utilizzo di «import»

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
Opzione Descrizione
-window n_finestra
-window nome_finestra
Permette di specificare esplicitamente la finestra dalla quale prelevare l'immagine. In generale è poco probabile che venga inserito il numero di identificazione di una finestra, dal momento che si tratta di un numero esadecimale un po' lungo; per quanto riguarda la possibilità di indicare il nome, ci si limita normalmente a fare riferimento della finestra principale attraverso la denominazione root.

Segue la descrizione di alcuni esempi.

30.4.5.6   Utilizzo di «display»

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.

Figura 30.73. Quando si avvia display senza l'indicazione di file da visualizzare, si viene invitati a indicarne almeno uno.

imagemagick-display-select

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).

Figura 30.74. A sinistra il menù rapido che si ottiene con il tasto destro del mouse; a destra il menù normale.

imagemagick-display-shortcut      imagemagick-display-menu

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.

30.4.6   GraphicsMagick

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.

30.4.7   Kolourpaint

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]

Figura 30.75. Aspetto di Kolourpaint durante il funzionamento.

kolourpaint

30.4.8   Gpaint

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.

Figura 30.76. Aspetto di Gpaint durante il funzionamento.

gpaint con j

30.4.9   Tuxpaint

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.

Figura 30.77. Aspetto di Tuxpaint durante il funzionamento.

tuxpaint al lavoro

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.

30.4.10   Geeqie, ex GQview

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.

Figura 30.78. Geeqie mentre scorre un elenco di immagini.

gqview

30.5   Concetti generali su audio e sui formati audio digitali

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.

30.5.1   Numero ISRC

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.

30.5.2   Composizione del suono

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.

Figura 30.79. Se l'asse orizzontale rappresenta il tempo in millesimi di secondo (simbolo: «ms»), il disegno rappresenta un'oscillazione alla frequenza di 2 000 cicli al secondo, ovvero 2 000 Hz.

sin(2*x*2*pi)

Figura 30.80. Comparazione tra due vibrazioni: la prima alla frequenza di 2 000 Hz, la seconda alla frequenza di 7 000 Hz, con un'ampiezza pari alla metà del prima.

sin(2*x*2*pi) 0.5*sin(7*x*2*pi)

Figura 30.81. Suono composto da due vibrazioni: la prima alla frequenza di 2 000 Hz, la seconda alla frequenza di 7 000 Hz, con un'ampiezza pari alla metà del prima.

sin(2*x*2*pi)+0.5*sin(7*x*2*pi)

30.5.3   Rappresentazione digitale del suono

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.

Figura 30.82. A sinistra: campionatura con valori numerici che possono essere sia positivi, sia negativi. A destra: campionatura con valori numerici che possono essere solo positivi.

campionatura campionatura

30.5.4   Formati audio non compressi

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.

Tabella 30.83. Caratteristiche di un file audio.

Caratteristica Descrizione
dimensione del campione La grandezza del campione, che di solito è in multipli di byte. Maggiore è la grandezza del campione, migliore è la qualità del suono memorizzato.
ordine dei byte Il contenuto del campione va interpretato tenendo conto dell'ordine in cui vanno presi i byte, che possono essere nella sequenza normale (big endian) o a coppie scambiate (little endian).
codifica Ogni campione rappresenta un numero, che può essere intero o a virgola mobile, da intendersi linearmente o come argomento di una funzione non lineare.
frequenza di campionamento Il campionamento avviene a una frequenza regolare: maggiore è questa frequenza, migliore è la qualità del suono memorizzato.
numero di canali Generalmente si memorizzano uno o due canali, per una registrazione monofonica o stereofonica, tuttavia questi possono essere anche di più. Per ogni canale viene memorizzato un campione separato a ogni ciclo della frequenza di campionamento.
intestazione Un file audio può essere grezzo o con intestazione, a seconda che contenga semplicemente la sequenza dei campioni o che prima di questa contenga la descrizione del suo formato.

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.

30.5.5   Formati audio compressi

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.

30.5.6   Informazioni di un contenitore MP3

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.

Tabella 30.84. Informazioni comuni che possono essere inserite in un file MP3.

Informazione Tipo Significato
originale booleano Indica se il contenuto è originale.
copyright booleano Indica se il contenuto è coperto da copyright.
titolo testo Titolo della canzone o di ciò che è contenuto nel file.
artista testo Nome dell'artista o degli artisti.
album testo Nome dell'album di cui fa parte il contenuto del file.
anno testo Anno di edizione.
commento testo Commento aggiuntivo.
traccia numero Numero della traccia nel CD a cui si fa riferimento.
genere numero Genere, definito da un codice numerico prestabilito.

Tabella 30.85. Genere, secondo lo standard ID3.

Genere Definizione Genere Definizione
0 Blues 1 Classic Rock
2 Country 3 Dance
4 Disco 5 Funk
6 Grunge 7 Hip-Hop
8 Jazz 9 Metal
10 New Age 11 Oldies
12 Other 13 Pop
14 R&B 15 Rap
16 Reggae 17 Rock
18 Techno 19 Industrial
20 Alternative 21 Ska
22 Death Metal 23 Pranks
24 Soundtrack 25 Euro-Techno
26 Ambient 27 Trip-Hop
28 Vocal 29 Jazz+Funk
30 Fusion 31 Trance
32 Classical 33 Instrumental
34 Acid 35 House
36 Game 37 Sound Clip
38 Gospel 39 Noise
40 Alt. Rock 41 Bass
42 Soul 43 Punk
44 Space 45 Meditative
46 Instrumental Pop 47 Instrumental Rock
48 Ethnic 49 Gothic
50 Darkwave 51 Techno-Industrial
52 Electronic 53 Pop-Folk
54 Eurodance 55 Dream
56 Southern Rock 57 Comedy
58 Cult 59 Gangsta Rap
60 Top 40 61 Christian Rap
62 Pop/Funk 63 Jungle
64 Native American 65 Cabaret
66 New Wave 67 Psychedelic
68 Rave 69 Showtunes
70 Trailer 71 Lo-Fi
72 Tribal 73 Acid Punk
74 Acid Jazz 75 Polka
76 Retro 77 Musical
78 Rock & Roll 79 Hard Rock
80 Folk 81 Folk/Rock
82 National Folk 83 Swing
84 Fast-Fusion 85 Bebob
86 Latin 87 Revival
88 Celtic 89 Bluegrass
90 Avantgarde 91 Gothic Rock
92 Progressive Rock 93 Psychedelic Rock
94 Symphonic Rock 95 Slow Rock
96 Big Band 97 Chorus
98 Easy Listening 99 Acoustic
100 Humour 101 Speech
102 Chanson 103 Opera
104 Chamber Music 105 Sonata
106 Symphony 107 Booty Bass
108 Primus 109 Porn Groove
110 Satire 111 Slow Jam
112 Club 113 Tango
114 Samba 115 Folklore
116 Ballad 117 Power Ballad
118 Rhythmic Soul 119 Freestyle
120 Duet 121 Punk Rock
122 Drum Solo 123 A Cappella
124 Euro-House 125 Dance Hall
126 Goa 127 Drum & Bass
128 Club-House 129 Hardcore
130 Terror 131 Indie
132 BritPop 133 Negerpunk
134 Polsk Punk 135 Beat
136 Christian Gangsta Rap 137 Heavy Metal
138 Black Metal 139 Crossover
140 Contemporary Christian 141 Christian Rock
142 Merengue 143 Salsa
144 Thrash Metal 145 Anime
146 JPop 147 Synthpop

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.

30.5.7   Informazioni di un contenitore Ogg

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:

Campo Utilizzo
TITLE
titolo della traccia o dell'opera;
ALBUM
titolo della raccolta a cui appartiene la traccia;
TRACKNUMBER
numero della traccia, se si tratta di una raccolta;
ARTIST
artista esecutore o compositore dell'opera;
COPYRIGHT
informazioni sul diritto di autore relativo all'opera;
LICENSE
condizioni di utilizzo dell'opera;
GENRE
descrizione del genere dell'opera;
ISRC
numero ISRC di identificazione dell'opera (sezione 30.5.1).

Si può osservare in questo caso che non è stata prevista una classificazione preliminare dei generi.

30.6   Lettore CD audio

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.

Figura 30.87. La classica uscita per cuffia che si trova al lato sinistro dei lettori CD, con regolazione manuale del livello sonoro.

uscita cuffia

Figura 30.88. Schema del lato posteriore di un lettore CD/DVD ATAPI tradizionale.

connettori, lato posteriore CD-ROM

Figura 30.89. Cavetto di collegamento audio da un lettore CD/DVD a una scheda audio. Il filo rosso riguarda il canale destro, mentre il filo bianco quello sinistro; il connettore di colore bianco può essere usato per collegare una scheda audio poco comune.

cavetto CD audio

Figura 30.90. Connessioni audio su una scheda madre tipica. Si può osservare che il connettore centrale è adibito esplicitamente all'ingresso audio proveniente da un lettore CD/DVD, dove il canale destro corrisponde al piedino del lato destro, guardando la figura.

scheda audio connettori interni

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.

30.6.1   Dcd

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:

Parola chiave Descrizione
stop
ferma l'esecuzione (se non funziona basta selezionare la prima traccia e quindi usare il comando prev);
restart
riavvia la traccia che si sta ascoltando;
next
passa alla traccia successiva;
prev
passa alla traccia precedente;
info
restituisce alcune informazioni sulla traccia attuale;
dir
elenca le tracce contenute nel CD;
loop [n...]
esegue la sequenza ripetendo quando raggiunge la fine della sequenza (in tal caso dcd impegna la shell).

Segue la descrizione di alcuni esempi.

30.6.2   TCD

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 /dev/cdrom, perché non prevede la possibilità di specificare un file di dispositivo differente per raggiungere l'unità CD.

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.

Figura 30.92. Esempio del funzionamento di TCD nella versione per terminali a caratteri.

.-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                               |
`-------------------------------------------------------------------'

Figura 30.93. Esempio del funzionamento di TCD nella versione grafica.

tcd-esempio

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.

30.6.3   Cdcd

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.

Tabella 30.101. Comandi principali di Alcune opzioni della riga di comando di Cdcd.

Comando Descrizione
play
Avvia l'esecuzione, dall'inizio o da una certa traccia.
open
eject
Termina l'esecuzione ed espelle il CD dal lettore.
pause
Mette in pausa l'esecuzione del CD.
resume
Riprende l'esecuzione dopo una pausa.
stop
Termina l'esecuzione del CD.
ff
rew
Fa avanzare o retrocedere rapidamente nell'ambito del brano che si sta ascoltando.
next
prev
Fa avanzare alla traccia successiva o retrocedere alla traccia precedente.
status
Visualizza la situazione del CD.
info
tracks
ext
Visualizza informazioni ottenibili attraverso CDDB.
quit
Termina il funzionamento di Cdcd quando questo funzionava in modalità interattiva.

30.6.4   AsCD

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]

Figura 30.102. Aspetto di AsCD durante il funzionamento.

AsCD

30.6.5   Gcd

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.

Figura 30.103. Pannello normale di Gcd.

gcd-pannello-normale

Figura 30.104. Pannello di Gcd con il dettaglio delle tracce.

gcd-pannello-tracce

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.

30.6.6   CDDB

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:

SERVER=cddbp://freedb.freedb.org:888/
ACCESS=REMOTE

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.

Figura 30.106. Finestra di accesso alle informazioni sulle tracce del CD musicale.

Gnome-track-editor

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.

30.7   Tracce CDDA

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.

30.7.1   Cdparanoia

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.

Opzione Descrizione
-d unità_cd
--force-cdrom-device unità_cd
Stabilisce quale unità usare attraverso l'indicazione del file di dispositivo.
-w
--output-wav
Genera un formato WAV-RIFF.
-B
--batch
Genera una serie di file, uno per ogni traccia.
-Z
--disable-paranoia
Disabilita il processo di rilettura e correzione degli errori.

Segue la descrizione di alcuni esempi.

30.7.2   Grip

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.

Figura 30.109. Configurazione del prelievo delle tracce audio attraverso Grip.

grip-configurazione-rip

Figura 30.110. Configurazione della conversione delle tracce prelevate in MP3.

grip-configurazione-mp3

Figura 30.111. Configurazione della conversione delle tracce prelevate in Ogg Vorbis.

grip-configurazione-ogg

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.

Riquadro 30.112. Come usare Toolame al posto di LAME.

Al posto di LAME, può essere conveniente l'uso del programma Toolame, che si limita a produrre un formato «MPEG-1 layer II», con il vantaggio di non incorrere nei brevetti che soffocano lo strato III.

Per ottenere questo risultato, si può configurare Grip, come se si utilizzasse LAME (figura 30.110), indicando però il percorso per Toolame (che dovrebbe essere /usr/bin/toolame) e modificando leggermente le opzioni della riga di comando, dato che per Toolame l'opzione -h richiama soltanto una guida rapida: -q 2 -b %b %w %m; in pratica si sostituisce -h con -q 2, che sarebbe un'alternativa valida anche per LAME stesso.

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>.

Figura 30.113. Selezione delle tracce.

grip-selezione-tracce

Figura 30.114. Prelievo delle tracce.

grip-rip-mp3

30.8   Etichette e copertine

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.

30.8.1   Disc-Cover

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.

Tabella 30.115. Alcune opzioni.

Opzione Descrizione
-a "testo"
-additional "testo"
Consente di specificare del testo addizionale da mostrare nella copertina, al posto di altre eventuali informazioni, che però non sono sempre presenti.
-c jewel|slim|x-slim|tevion-slim\
  \|letter-slim
-casetype jewel|slim|x-slim\
  \|tevion-slim|letter-slim
Permette di stabilire le caratteristiche del cofanetto nel quale vanno inserite le copertine che si vogliono generare.
-D file_di_dispositivo
-Device file_di_dispositivo
Permette di stabilire il file di dispositivo da usare per accedere al lettore CD.
-e
-extended
Permette di aggiungere informazioni ulteriori se disponibili.
-o file
-output file
Specifica il nome del file da creare.
-S
-Server
Richiede di creare un file ~/.cdserverrc mancante.
-t txt|tex|dvi|ps|pdf|cddb\
  \|lbl|html
-type txt|tex|dvi|ps|pdf|cddb\
  \|lbl|html
Permette di stabilire il formato del file da generare. Per i dettagli sui vari formati si consulti la pagina di manuale disc-cover(1).

Segue la descrizione di alcuni esempi.

Figura 30.116. A sinistra: Eagles, Hotel California, Asylum; a destra: Ensemble Sreteniye, Ancient Church Singing of Byzantine, Georgia and Rus.

Eagles: Hotel California Ensemble Sreteniye

30.8.2   Cdlabelgen

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.

Tabella 30.117. Alcune opzioni.

Opzione Descrizione
-c categoria
--category categoria
Attribuisce un titolo al disco.
-s sottocategoria
--subcategory sottocategoria
Attribuisce un sottotitolo al disco.
-i voci
--items voci
Descrive il contenuto del disco. Il testo che si fornisce come argomento dell'opzione, può contenere il carattere % per separare le varie voci tra di loro.
-d data
--date data
Permette di specificare una data differente da quella ottenuta dall'orologio del sistema.
-D
--no-date
Non inserisce la data.
-o file
--output-file file
Permette di definire il nome del file PostScript da generare; senza questa opzione, il file viene emesso attraverso lo standard output.
-m
--create-slim-cover
Richiede una forma differente per il disegno del cartoncino, adatto a contenitori sottili.
-M
--create-envelope
Richiede una forma differente per il disegno del cartoncino, adatto a realizzare una bustina.
--create-dvd-inside
Richiede una forma differente, adatta per l'inserimento all'interno dei contenitori usati solitamente per i DVD.
--create-dvd-outside
Richiede una forma differente, adatta per l'inserimento all'esterno dei contenitori usati solitamente per i DVD.

Segue la descrizione di alcuni esempi.

Figura 30.118. A sinistra: Eagles, Hotel California, Asylum; a destra: nanoLinux III.

Hotel California nanoLinux

30.9   Audio con i sistemi GNU/Linux

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 \
  \2004 i686 Config options: 0 Installed drivers: Type 10: ALSA emulation Card config: Sound Blaster Live! (rev.8) at 0xdc00, irq 5 Audio devices: 0: EMU10K1 (DUPLEX) Synth devices: NOT ENABLED IN CONFIG Midi devices: 0: EMU10K1 MPU-401 (UART) Timers: 7: system timer Mixers: 0: TriTech TR28602

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/.

30.9.1   File di dispositivo

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:

 14 char        Open Sound System (OSS)
                  0 = /dev/mixer        Mixer control
                  1 = /dev/sequencer    Audio sequencer
                  2 = /dev/midi00       First MIDI port
                  3 = /dev/dsp          Digital audio
                  4 = /dev/audio        Sun-compatible digital audio
                  6 = /dev/sndstat      Sound card status information {2.6}
                  7 = /dev/audioctl     SPARC audio control device
                  8 = /dev/sequencer2   Sequencer -- alternate device
                 16 = /dev/mixer1       Second soundcard mixer control
                 17 = /dev/patmgr0      Sequencer patch manager
                 18 = /dev/midi01       Second MIDI port
                 19 = /dev/dsp1         Second soundcard digital audio
                 20 = /dev/audio1       Second soundcard Sun digital audio
                 33 = /dev/patmgr1      Sequencer patch manager
                 34 = /dev/midi02       Third MIDI port
                 50 = /dev/midi03       Fourth MIDI port

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.

30.10   Gestione della scheda audio

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]

Figura 30.121. Schematizzazione delle connessioni esterne tipiche di una scheda audio.

connessioni scheda audio

30.10.1   Aumix

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.

30.10.1.1   Funzionamento interattivo di Aumix

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.

Figura 30.122. Esempio del funzionamento di Aumix in modalità interattiva.

aumix  ++++++++++++++++++++++O+++<Vol      ++++++++O++++++++
       ++++++++++++++++++++++O+++ Bass     ++++++++O++++++++
Quit   ++++++++++++++++++++++O+++ Trebl    ++++++++O++++++++
Load  PO+++++++++++++++++++++++++ Synth    ++++++++O++++++++
Save   ++++++++++++++++++++++O+++ Pcm      ++++++++O++++++++
Keys   O+++++++++++++++++++++++++ Spkr
Mute  PO+++++++++++++++++++++++++ Line     ++++++++O++++++++
      RO+++++++++++++++++++++++++ Mic
      PO+++++++++++++++++++++++++ CD       ++++++++O++++++++
       O+++++++++++++++++++++++++ Mix
       O+++++++++++++++++++++++++ IGain    ++++++++O++++++++
       ++++++++++O+++++++++++++++ OGain    ++++++++O++++++++
       0          Level           100      L    Balance    R

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.

Figura 30.123. Aumix con una vecchia scheda a 8 bit.

aumix  ++++++++++++++++++++++O+++<Vol      ++++++++O++++++++
      PO+++++++++++++++++++++++++ Synth    ++++++++O++++++++
Quit   ++++++++++++++++++++++O+++ Pcm      ++++++++O++++++++
Load  PO+++++++++++++++++++++++++ Line     ++++++++O++++++++
Save  RO+++++++++++++++++++++++++ Mic
Keys  PO+++++++++++++++++++++++++ CD       ++++++++O++++++++
Mute   0           Level          100      L    Balance    R

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).

Tabella 30.124. Alcuni comandi utili per l'uso di Aumix in modo interattivo.

Tastiera Descrizione
[pagina-su]
[freccia-su]
Passa al canale precedente.
[pagina-giù]
[freccia-giù]
Passa al canale successivo.
[Tab]
[Invio]
[>]
[<]
Scambia tra la regolazione del livello e del bilanciamento.
[+]
[freccia-destra]
Sposta il cursore a destra.
[-]
[freccia-sinistra]
Sposta il cursore a sinistra.
[|] Centra il bilanciamento.
[Spazio] Scambia la modalità di registrazione e di esecuzione.
[S]
[s]
Salva le impostazioni nel file di configurazione (se la configurazione locale è per la lingua inglese).
[L]
[l]
Carica le impostazioni dal file di configurazione (se la configurazione locale è per la lingua inglese).
[K]
[k]
Mostra un guida sull'uso della tastiera (se la configurazione locale è per la lingua inglese).
[M]
[m]
Azzera o ripristina il volume generale (se la configurazione locale è per la lingua inglese).
[Esc]
[Q]
[q]
Termina il funzionamento.

30.10.1.2   Avvio di Aumix

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]

Tabella 30.125. Alcune opzioni di canale.

Opzione Significato mnemonico Descrizione
-v percentuale
-v q[uery]
volume Definisce o richiede di conoscere il valore del volume generale, espresso in forma percentuale rispetto al massimo.
-s percentuale
-s q[uery]
synthesizer Definisce o richiede di conoscere il valore del volume del sintetizzatore, espresso in forma percentuale rispetto al massimo.
-w percentuale
-w q[uery]
Definisce o richiede di conoscere il valore del volume di una riproduzione digitale (PCM), espresso in forma percentuale rispetto al massimo. Si tratta del volume dell'esecuzione di un brano contenuto in un file.
-l percentuale
-l q[uery]
-l R
-l P
line Definisce o richiede di conoscere il valore del volume della linea di ingresso esterna, espresso in forma percentuale rispetto al massimo. Se si utilizza la lettere R o la lettera P, si intende passare alla modalità di registrazione o a quella di esecuzione.
-m percentuale
-m q[uery]
-m R
-m P
microphone Definisce o richiede di conoscere il valore del volume del microfono, espresso in forma percentuale rispetto al massimo. Se si utilizza la lettere R o la lettera P, si intende passare alla modalità di registrazione o a quella di esecuzione.
-c percentuale
-c q[uery]
-c R
-c P
cd Definisce o richiede di conoscere il valore del volume del canale relativo al lettore CD, espresso in forma percentuale rispetto al massimo. Se si utilizza la lettere R o la lettera P, si intende passare alla modalità di registrazione o a quella di esecuzione.

Tabella 30.126. Altre opzioni generali.

Opzione Significato mnemonico Descrizione
-f file
file Specifica il file da usare per salvare e recuperare la configurazione.
-L
load Carica le impostazioni dal file di configurazione ~/.aumixrc o in sua mancanza dal file /etc/aumixrc.
-q
query Interroga lo stato di tutti i canali esistenti e mostra il risultato attraverso lo standard output.
-S
save Salva le impostazioni nel file ~/.aumixrc.

Segue la descrizione di alcuni esempi.

30.10.1.3   Configurazione

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.

vol:76:76:P
synth:0:0:P
pcm:0:0:P
line:0:0:P
mic:0:0:R
cd:0:0:P

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.

30.10.2   Alsamixer

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]

Tabella 30.128. Alcune opzioni.

Opzione Descrizione
-c n
Seleziona la scheda, se ne è presente più di una. Alla prima scheda audio corrisponde il numero zero.
-g
Non utilizza i colori, in modo da essere visibile con uno schermo monocromatico (viene ignorato da Alsamixergui).
-s
Riduce al minimo la finestra, in modo da visualizzare un solo cursore a slitta alla volta (viene ignorato da Alsamixergui).

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.

Figura 30.129. Alsamixer durante il funzionamento in una finestra di terminale, piuttosto allargata.

Alsamixer

Figura 30.130. Alsamixergui durante il funzionamento.

Alsamixergui

30.10.3   Gnome-volume-control

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]

Figura 30.131. Gnome-volume-control durante il funzionamento.

Gnome-volume-control

30.10.4   Esecuzione e registrazione di brani campionati

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]

Riquadro 30.132. La registrazione e i livelli sonori.

Quando si vogliono usare strumenti per la registrazione sonora, occorre intervenire correttamente nel mixer: si deve regolare il volume della sorgente sonora da registrare; si deve attivare la registrazione da quella sorgente sonora; se è presente, occorre regolare anche il livello del guadagno in ingresso.

Per esempio, volendo registrare dalla linea di ingresso esterna (line-in), con una certa scheda audio, attraverso Aumix, occorre verificare in particolare i cursori e le voci che appaiono evidenziati in questo esempio:

aumix P++++++++++O+++++++ Vol        +++++++++O+++++++++
       ++++++++++O+++++++ Pcm        +++++++++O+++++++++
Quit  R++++++++++O+++++++ Line       +++++++++O+++++++++
Load  PO+++++++++++++++++ Mic
Save  PO+++++++++++++++++ CD         +++++++++O+++++++++
Keys   +++O++++++++++++++ IGain      +++++++++O+++++++++
Mute  PO+++++++++++++++++ Line1      +++++++++O+++++++++
Only   O+++++++++++++++++ Digital1
Undo  PO+++++++++++++++++ PhoneIn
      PO+++++++++++++++++ PhoneOut
      PO+++++++++++++++++ Video
       0      Level       100        L     Balance     R

30.10.5   Wavtools

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.

Tabella 30.134. Alcune opzioni di wavr e gwavr.

Opzione Descrizione
-f file_wav
Specifica il file da registrare.
-r frequenza_campionamento
Specifica la frequenza di campionamento. Alcuni valori comuni sono: 44 100, 22 050, 11 025 e 8 000.
-d dimensione_campione
Definisce la dimensione del campione in bit. Di solito si usano i valori 8 o 16.
-c 1|2
Definisce il numero dei canali: uno per una registrazione monofonica, due per una registrazione stereofonica.
-l n_secondi
Programma la durata della registrazione.

30.10.6   Sound-recorder

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.

Tabella 30.135. Alcune opzioni usate dagli eseguibili che compongono Sound-recorder. Si osservi che non tutte le opzioni sono valide per tutti gli eseguibili.

Opzione Descrizione
-f formato
Consente di specificare il formato del file da registrare o da eseguire. In mancanza di indicazioni, viene registrato un file WAV-RIFF, corrispondente alla sigla wav, da usare con questa opzione.
-c n
Definisce la quantità di canali da registrare o da eseguire. Il valore uno indica una registrazione o un'esecuzione monofonica, mentre il valore due richiede una registrazione o un'esecuzione stereofonica.
-s frequenza
Permette di specificare la frequenza di campionamento per la registrazione o per l'esecuzione. I valori comuni sono: 8 000, 11 025, 12 000, 16 000, 22 050, 32 000, 44 100, 48 000.
-S mm:ss
In fase di registrazione, consente di indicare la durata che questa deve avere.
-q
Richiede un funzionamento «silenzioso» (quiet).
-t n
-p n
-l elenco
Queste opzioni riguardano soltanto cdsound-recorder e servono a specificare la prima traccia del CD (opzione -t), l'ultima traccia (opzione -p), oppure un elenco di tracce (opzione -l).

Segue la descrizione di alcuni esempi.

30.10.7   Aplay e Arecord

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.

Tabella 30.136. Alcune opzioni.

Opzione Descrizione
-d n
--duration=n
Specifica la durata della registrazione o dell'esecuzione. Il numero che si indica come argomento dell'opzione rappresenta una quantità in secondi (simbolo: «s»).
-t tipo
--file-type=tipo
Permette di specificare il tipo di file da registrare o da eseguire. Si possono usare le sigle: voc, wav, raw, au.
-c 1|2
--channels=1|2
Permette di specificare la quantità di canali (uno per monofonia, due per stereofonia).
-f formato
--format=formato
Permette di specificare il formato dei dati. Generalmente si indica il formato S16_LE, che indica 16 bit con segno, little endian.
-r n
--rate=n
Specifica la frequenza di campionamento espressa in hertz (simbolo: «Hz»).
-f cd
È l'abbreviazione di: -f S16_LE -c 2 -r 44100.
-f dat
È l'abbreviazione di: -f S16_LE -c 2 -r 48000.

Segue la descrizione di alcuni esempi.

30.10.8   Sox

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).

Tabella 30.137. Alcuni dei formati audio gestiti da Sox.

Estensione/tipo Descrizione
.8svx
Amiga 8SVX.
.au
AU della Sun Microsystems.
.dat
Audio espresso in formato testo.
.smp
TurtleBeach MediaVision.
.voc
SoundBlaster VOC.
.wav
MS-Windows WAV-RIFF.
ossdsp
Formato del dispositivo /dev/dsp.

30.10.8.1   Avvio dell'eseguibile

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] \
  \file_in_ingresso [opzioni_di_formato] \
  \file_in_uscita [effetti]
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.

Tabella 30.138. Alcune opzioni generali.

Opzione Descrizione
-V
Emette una serie di informazioni sulle fasi del processo di elaborazione. Serve per avere un rapporto chiaro delle trasformazioni che sta applicando Sox.
-v volume
Permette di cambiare il volume del segnale. Il valore 1.0 rappresenta il livello iniziale: valori inferiori diminuiscono il volume, mentre valori superiori lo aumentano.

Tabella 30.139. Alcune opzioni di formato.

Opzione Descrizione
-t tipo_di_file
Permette di specificare il formato del file successivo (in ingresso o in uscita), attraverso una stringa che rappresenta l'estensione normale di questo (.au, .wav,... come si vede nella tabella 30.137).
-r frequenza_di_campionamento
Permette di specificare la frequenza di campionamento del file successivo (in ingresso o in uscita), attraverso l'indicazione di un numero che rappresenta la frequenza in hertz (simbolo: «Hz»). In generale, è più probabile l'utilizzo di questa opzione in riferimento a un file in uscita.
-c n_canali
Permette di specificare il numero di canali audio del file successivo (in ingresso o in uscita). Come si può intendere, uno rappresenta un file monofonico, due stereofonico e quattro quadrifonico.
-b
-w
-l
-d
Definisce la dimensione dei campioni. Si tratta rispettivamente di: 8 bit (byte); 16 bit (word); 32 bit (long word); 64 bit (double long word).
-s
-u
-U
-A
-a
-i
-g
-f
Definisce la codifica dei campioni. Si tratta rispettivamente di: signed linear; unsigned linear; mu-law; A-law; ADPCM; IMA-ADPCM; GSM; floating-point.
-x
Inverte i byte.
-e
Non produce alcun risultato, pertanto il file in uscita non viene specificato.

Tabella 30.140. Alcune opzioni che rappresentano un effetto.

Opzione Descrizione
band frequenza_centrale ampiezza
Applica un filtro passa-banda. Gli argomenti di questa opzione sono valori numerici che si riferiscono a una frequenza in hertz (simbolo: «Hz»).
highp frequenza_filtro
Applica un filtro passa-alto a partire dalla frequenza indicata come argomento. In pratica, le frequenze inferiori risultano molto attenuate.
echo guadagno_in guadagno_out  \
  \ritardo volume
Inserisce un effetto eco in cui il guadagno è espresso in rapporto all'unità (il 100 % è pari a uno), il ritardo è espresso in millisecondi (simbolo: «ms») e il volume dell'eco è riferito anch'esso all'unità, per cui si utilizzano normalmente dei valori inferiori a uno per indicare un'attenuazione relativa.
vibro velocità profondità
Inserisce un effetto vibrato. La velocità indica la frequenza della vibrazione nel volume del segnale, mentre la profondità indica il volume dell'oscillazione di questo.
reverse
Inverte il corso del brano. Potrebbe servire in particolare per scoprire dei messaggi nascosti che siano stati introdotti ad arte nel segnale audio.
resample
Si può usare solo quando la frequenza di campionamento in uscita è diversa da quella in ingresso e serve a rifare il campionamento, simulando un ingresso analogico.

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.

30.10.8.2   Riduzione del rumore

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.

  1. 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.

  2. 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:

    Channel 0: -1.274796, 0.377659, 2.028794, ... \
      \-12.432062, -11.966588, nan Channel 1: -1.274796, 0.377659, 2.028794, ... \
      \-12.432062, -11.966588, nan
  3. 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.

Tabella 30.142. Effetti per la riduzione del rumore.

Opzione Descrizione
noiseprof file
Crea il file indicato contenente il profilo del rumore, raccolto da un brano contenente soltanto del silenzio.
noisered file n
Filtra il rumore, secondo le indicazioni del file contenente il profilo, con un livello pari a n. Il valore numerico finale va inteso in forma percentuale (dove l'unità rappresenta il 100 %); tuttavia, in generale conviene indicare solo frazioni dell'unità, per non distorcere eccessivamente il suono.

30.10.8.3   Regolazione del volume

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.

Tabella 30.143. Effetti per l'analisi statistica.

Opzione Descrizione
stat
Genera una statistica sul file sonoro in ingresso.
stat -v
Si limita a indicare il livello di aggiustamento massimo del volume.

Segue la descrizione di alcuni esempi.

Il file prova.stat degli esempi mostrati, potrebbe avere l'aspetto seguente:

Samples read:          14300928
Length (seconds):    162.142041
Scaled by:         2147483647.0
Maximum amplitude:     0.877747
Minimum amplitude:    -0.949310
Midline amplitude:    -0.035782
Mean    norm:          0.083269
Mean    amplitude:     0.000014
RMS     amplitude:     0.115862
Maximum delta:         0.692749
Minimum delta:         0.000000
Mean    delta:         0.055097
RMS     delta:         0.075444
Rough   frequency:         4570
Volume adjustment:        1.053

Invece, il risultato ottenuto con l'effetto stat -v si limita al valore del campo Volume adjustment::

1.053

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:

#!/bin/sh
for a in "$@"
do
    sox $a -e stat -v 2> /tmp/vol
    VOL=`cat /tmp/vol`
    sox $a -v $VOL $a.v.wav
done

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.

30.10.8.4   Script play e rec

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.

30.10.9   Normalize

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.

Tabella 30.147. Alcune opzioni.

Opzione Descrizione
-m
--mix
Attiva la modalità «mix».
-b
--batch
Attiva la modalità «batch».

Segue la descrizione di alcuni esempi.

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.

30.10.10   Xwave

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.

Figura 30.148. Pannello principale di Xwave.

xwave-pannello-frontale

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.

30.10.11   Audacity

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.

Figura 30.149. Audacity avviato senza argomenti.

Audacity

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.

Figura 30.150. Controlli nella parte superiore della finestra di Audacity.

Audacity

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}.

Figura 30.151. File di dispositivo utilizzati e numero di canali.

Audacity

Figura 30.152. Configurazione della qualità della registrazione.

Audacity

Figura 30.153. Configurazione della qualità dei formati per l'esportazione delle registrazioni.

Audacity

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.

Figura 30.154. Registrazione di una traccia stereofonica.

Audacity

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}.

30.11   Sintesi vocale

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.

30.11.1   eSpeak

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:

30.11.1.1   Scelta del linguaggio

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]

30.11.1.2   Modifica dell'intonazione e della cadenza

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]

30.11.1.3   Controllo dell'input e dell'output

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]

30.12   MIDI

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.

30.12.1   File MIDI

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.

Figura 30.156. Visualizzazione grafica di un'esecuzione MIDI attraverso il programma Xgmc.

midi-xgmc-esempio-generale

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.

Termine Traduzione Descrizione
resolution risoluzione La frequenza della base dei tempi MIDI abbinata a una durata di un quarto (semiminima). In pratica, stabilisce la durata minima di una nota che può essere rappresentata in frazioni di 1/n di semiminima rispetto alla battuta. Il valore che si utilizza normalmente è 96, che consente di rappresentare note di una lunghezza pari a un sesto di semibiscroma.
time signature tempo Il tempo, espresso come frazione.
tempo La velocità di esecuzione, intesa come quantità di battute per minuto.
pitch tono L'altezza della nota.
bend Consente di alterare il tono di una nota. Il valore che può avere va da 0 a 127, dove lo zero rappresenta il tono più basso, mentre 127 il tono più alto, così 64 rappresenta il tono normale.
pan bilanciamento Definisce il bilanciamento stereofonico di una o di più note. Si tratta di un valore da 0 a 127, dove lo zero rappresenta la sinistra e 127 la destra, avendo così il centro a 64.
patch Lo strumento o il tipo di suono abbinato a una serie di note. Si tratta normalmente di un numero, che va da 1 a 128.
channel canale Il canale di registrazione che può contenere un solo strumento alla volta, anche se su più tracce simultanee. I valori vanno da 1 a 16.
reverb riverbero La profondità del riverbero. Si tratta di un valore che si abbina alla traccia, attribuendo un numero intero da 0 a 127.
volume volume Definisce il volume di una traccia, con valori da 0 a 127.

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.

30.12.2   Midge

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:

# Converted from bwv777.midi
# by /usr/bin/midi2mg on Sun Jan  5 20:10:21 2003

@head {
        $title "Track 0"
}
@body {
        @channel 1 "harpsichord" {
                $attack 127
                $decay 64
                $tempo 40
                $patch 7
                $time_sig 3/9
                $key e
                /l16/r /l8/e6 d+ d c+ b5 a g+ f+ /l32/g+ a
                /l16/g+ /l32/b a /l16/b /l32/g+ f+ /l16/g+
                /l32/e d+ 
                ...
                f+ /l16/g+ /l32/b a /l16/b /l32/g+ f+
                /l16/g+ /l32/b a /l16/b /l32/e6 d+ /l16/e
                b5 g+ e 
        }
        @channel 2 "harpsichord" {
                $attack 127
                $decay 64
                $tempo 40
                $patch 7
                $time_sig 3/9
                $key e
                /l8/e4 f+ g+ a b c+5 d+ /l16/e d+ c+ b4
                /l8/e5 e4 /l3:16/r /l8/e d+ d c+ b3 a g+
                f+ /l32/g+ 
                ...
                /l32/d+ c+ /l16/d+ /l32/g+ f+ /l8/g+ a b
                e /l16/r e5 b4 g+ e b g+ e b3 g+ /l4/e
                /l8/e4 
        }
}

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:

@body {
        @channel 1 "harpsichord" {
                ...
                ...
        }
        @channel 1 "harpsichord" {
                ...
                ...
        }
}

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)).

        /l16/r /l8/e6 d+ d c+ b5 a g+ f+ /l32/g+ a /l16/g+ 
        /l32/b a /l16/b /l32/g+ f+ /l16/g+ /l32/e d+ 

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:

@head {
        $title "J.S. Bach (1685-1750) - BWV 777 - Invenzioni n. 6"
        $tempo 40
        $time_sig 3/9
}
@body {
        @channel 1 "harpsichord" {
                $attack 127
                $decay 64
                $patch 7
                $key e
                /l16/r /l8/e6 d+ d c+ b5 a g+ f+ /l32/g+ a /l16/g+ 
                /l32/b a /l16/b /l32/g+ f+ /l16/g+ /l32/e d+ 
                ...
                f+ /l16/g+ /l32/b a /l16/b /l32/g+ f+ /l16/g+ 
                /l32/b a /l16/b /l32/e6 d+ /l16/e b5 g+ e 
        }
        @channel 2 "harpsichord" {
                $attack 127
                $decay 64
                $patch 7
                $key e
                /l8/e4 f+ g+ a b c+5 d+ /l16/e d+ c+ b4 /l8/e5 
                e4 /l3:16/r /l8/e d+ d c+ b3 a g+ f+ /l32/g+ 
                ...
                /l32/d+ c+ /l16/d+ /l32/g+ f+ /l8/g+ a b e /l16/r 
                e5 b4 g+ e b g+ e b3 g+ /l4/e /l8/e4 
        }
}

La tabella 30.162 riassume alcuni parametri importanti di Midge, che possono servire per ritoccare un file MIDI già disponibile.

Tabella 30.162. Alcuni parametri nel sorgente di Midge.

Parametro Descrizione
$title "titolo_dell'esecuzione"
Si utilizza nell'intestazione e attribuisce un titolo al file MIDI.
$tempo n
Si utilizza nell'intestazione oppure nei blocchi delle tracce per indicare la quantità di battute per minuto.
$time_sig m/n
Si utilizza nell'intestazione oppure nei blocchi delle tracce per indicare la frazione che esprime la lunghezza di una battuta (per esempio 3/4).
$patch {n|nome}
Si utilizza nei blocchi delle tracce per indicare il tipo di suono da utilizzare. Se si usa un nome occorre utilizzare quanto previsto espressamente da Midge (tabella 30.163).
$volume n
Si utilizza nei blocchi delle tracce per indicare il volume della traccia. Il valore assegnato va da 1 a 127 (lo zero non viene accettato).
$reverb n
Si utilizza nei blocchi delle tracce per indicare la profondità del riverbero. Il valore assegnato va da 0 a 127.
$chorus n
Si utilizza nei blocchi delle tracce per indicare un effetto simile al riverbero. Il valore assegnato va da 0 a 127.
$pan n
Si utilizza nei blocchi delle tracce per indicare il bilanciamento stereofonico. Il valore assegnato va da 0 (completamente a sinistra) a 127 (completamente a destra).

Tabella 30.163. Classificazione dei suoni secondo Midge, per l'utilizzo nel parametro $patch.

Numero Nome alternativo
per Midge
Denominazione completa
1 piano_grand_ac Acoustic Grand Piano
2 piano_br Bright Acoustic Piano
3 piano_grand_el Electric Grand Piano
4 piano_ht Honky-Tonk Piano
5 piano_el_1 Electric Piano 1
6 piano_el_2 Electric Piano 2
7 harpsichord Harpsichord
8 clavinet Clavinet
9 celesta Celesta
10 glockenspiel Glockenspiel
11 music_box Music Box
12 vibraphone Vibraphone
13 marimba Marimba
14 xylophone Xylophone
15 tubular_bells Tubular Bells
16 dulcimer Dulcimer
17 organ_dbar Drawbar Organ
18 organ_perc Percussive Organ
19 organ_rock Rock Organ
20 organ_church Church Organ
21 organ_reed Reed Organ
22 accordian Accordian
23 harmonica Harmonica
24 accordian_tango Tango Accordian
25 guitar_nylon Nylon String Guitar
26 guitar_steel Steel String Guitar
27 guitar_jazz Electric Jazz Guitar
28 guitar_clean Electric Clean Guitar
29 guitar_muted Electric Muted Guitar
30 guitar_od Overdriven Guitar
31 guitar_dist Distortion Guitar
32 guitar_harm Guitar Harmonics
33 bass_ac Acoustic Bass
34 bass_fg Electric Bass(finger)
35 bass_pick Electric Bass(pick)
36 bass_fless Fretless Bass
37 bass_slap_1 Slap Bass 1
38 bass_slap_2 Slap Bass 2
39 bass_syn_1 Synth Bass 1
40 bass_syn_2 Synth Bass 2
41 violin Violin
42 viola Viola
43 cello Cello
44 contrabass Contrabass
45 str_trem Tremolo Strings
46 str_pizz Pizzicato Strings
47 str_orch Orchestral Strings
48 timpani Timpani
49 str_ens_1 String Ensemble 1
50 str_ens_2 String Ensemble 2
51 str_syn_1 SynthStrings 1
52 str_syn_2 SynthStrings 2
53 choir_aahs Choir Aahs
54 voice_oohs Voice Oohs
55 voice_syn Synth Voice
56 orch_hit Orchestra Hit
57 trumpet Trumpet
58 trombone Trombone
59 tuba Tuba
60 trumpet_muted Muted Trumpet
61 horn_fr French Horn
62 brass Brass Section
63 brass_syn_1 SynthBrass 1
64 brass_syn_2 SynthBrass 2
65 sax_sop Soprano Sax
66 sax_alt Alto Sax
67 sax_ten Tenor Sax
68 sax_bar Baritone Sax
69 oboe Oboe
70 horn_en English Horn
71 bassoon Bassoon
72 clarinet Clarinet
73 piccolo Piccolo
74 flute Flute
75 recorder Recorder
76 flute_pan Pan Flute
77 bottle Blown Bottle
78 skakuhachi Skakuhachi
79 whistle Whistle
80 ocarina Ocarina
81 lead_sq Lead 1 (square)
82 lead_saw Lead 2 (sawtooth)
83 lead_calliope Lead 3 (calliope)
84 lead_chiff Lead 4 (chiff)
85 lead_charang Lead 5 (charang)
86 lead_voice Lead 6 (voice)
87 lead_fifth Lead 7 (fifths)
88 lead_basslead Lead 8 (bass+lead)
89 pad_new_age Pad 1 (new age)
90 pad_warm Pad 2 (warm)
91 polysynth Pad 3 (polysynth)
92 pad_choir Pad 4 (choir)
93 pad_bowed Pad 5 (bowed)
94 pad_metal Pad 6 (metallic)
95 pad_halo Pad 7 (halo)
96 pad_sweep Pad 8 (sweep)
97 fx_rain FX 1 (rain)
98 fx_strack FX 2 (soundtrack)
99 fx_crystal FX 3 (crystal)
100 fx_atmos FX 4 (atmosphere)
101 fx_bright FX 5 (brightness)
102 fx_goblin FX 6 (goblins)
103 fx_echo FX 7 (echoes)
104 fx_scifi FX 8 (sci-fi)
105 sitar Sitar
106 banjo Banjo
107 shamisen Shamisen
108 koto Koto
109 kalimba Kalimba
110 bagpipe Bagpipe
111 fiddle Fiddle
112 shanai Shanai
113 bell_tinkle Tinkle Bell
114 agogo Agogo
115 drum_steel Steel Drums
116 woodblock Woodblock
117 drum_taiko Taiko Drum
118 tom_melodic Melodic Tom
119 drum_syn Synth Drum
120 cymbal_rev Reverse Cymbal
121 fx_fret Guitar Fret Noise
122 fx_breath Breath Noise
123 fx_sea Seashore
124 fx_tweet Bird Tweet
125 fx_phone Telephone Ring
126 fx_copter Helicopter
12f x_applause Applause
128 fx_gun Gunshot

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.

30.12.3   Timidity++

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ì:

dir /opt/eawpats/
source gravis.cfg
source gsdrums.cfg
source gssfx.cfg
source xgmap2.cfg

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.

Tabella 30.165. Opzioni essenziali della riga di comando di timidity.

Opzione Descrizione
-iinterfaccia[opzioni]
Definisce l'interfaccia visiva, ovvero il modo in cui si interagisce con Timidity++. Possono essere disponibili anche delle modalità di funzionamento grafiche, a seconda di come sono stati compilati i sorgenti.
-id[opzioni]
Si avvia in modo normale, non interattivo (è la modalità di funzionamento predefinita).
-in[opzioni]
Si avvia in modo interattivo, occupando tutto lo schermo (schermo a caratteri).
-iinterfaccias
Riordina i file prima di iniziare l'esecuzione.
-iinterfacciar
Esegue i file utilizzando una sequenza casuale.
-Omodalità
Questa opzione determina il tipo di conversione che si intende ottenere.
-Od
Converte e invia al dispositivo per la riproduzione audio (è la modalità di funzionamento predefinita).
-Ow
Converte in formato WAV-RIFF. Si usa normalmente in abbinamento all'opzione -o.
-o file
Invia il risultato della conversione al file indicato.

Come si vede, in condizioni normali si usa l'eseguibile timidity senza opzioni, o al massimo con -in (oppure selezionando un'altra interfaccia preferita).

30.13   Programmi per la gestione di formati audio compressi

È 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.

30.13.1   MP3info

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.

Tabella 30.166. Alcune sequenze di escape utilizzabili come argomento dell'opzione -f.

Stringa Effetto
%%
%
%t
Titolo
%a
Artista
%l
Album
%y
Anno
%c
Commento
%g
Genere in forma testuale
%#
Genere in forma numerica
%v
Versione MPEG in forma numerica
%V
Versione MPEG in forma testuale
%L
Strato MPEG (layer) in numero romano
%A
Strato MPEG (layer) in numero arabo
%C
Protezione dagli errori (restituisce zero o uno)
%b
Quantità di bit utilizzati al secondo
%F
Frequenza di campionamento
%M
Modalità: mono, stereo, ecc.
%O
Copyright (restituisce zero o uno)
%o
Originale (restituisce zero o uno)
%m
Lunghezza espressa in minuti
%s
Lunghezza rimanente in secondi
%S
Lunghezza complessiva in secondi
%N
Interruzione di riga
%f
Nome del file, come indicato nella riga di comando
%B
Nome del file senza percorso
%i
Dimensione del file in byte

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:

#!/bin/sh

mp3info -f "file:          %f"          $1
mp3info -f "dimensione:    %i"          $1
mp3info -f "formato:       %V layer %L" $1
mp3info -f "CRC:           %C"          $1
mp3info -f "bitrate:       %b Kibit/s"  $1
mp3info -f "campionamento: %F Hz"       $1
mp3info -f "modalità:      %M"          $1
mp3info -f "durata:        %m:%s"       $1
mp3info -f "copyright:     %O"          $1
mp3info -f "originale:     %o"          $1
mp3info -f "titolo:        %t"          $1
mp3info -f "artista:       %a"          $1
mp3info -f "album:         %l"          $1
mp3info -f "anno:          %y"          $1
mp3info -f "annotazioni:   %c"          $1
mp3info -f "genere:        %# %g"       $1

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.

Tabella 30.169. Alcune opzioni.

Opzione Descrizione
-f stringa_di_formato
Mostra le informazioni secondo la stringa di formato indicata come argomento. Si utilizzano le sequenze di escape della tabella 30.166.
-F n
Mostra le informazioni secondo un formato prestabilito, rappresentato da un numero intero positivo. Basta provare per rendersi conto di come possono essere rappresentate le informazioni in questo modo. Si tratta evidentemente di una semplificazione per chi non vuole usare l'opzione -f.
-w
Richiede espressamente la scrittura di informazioni aggiornate. In generale non serve indicare espressamente questa opzione, perché viene richiamata automaticamente in presenza di opzioni che implicano la modifica di qualche informazione.
-W
Cancella le informazioni descrittive (titolo, artista, ecc.) contenute nel file.
-t titolo
Imposta il titolo. L'uso di questa opzione implica automaticamente la scrittura, senza bisogno di specificare l'opzione -w.
-a artista
Imposta l'artista. L'uso di questa opzione implica automaticamente la scrittura, senza bisogno di specificare l'opzione -w.
-l album
Imposta l'album. L'uso di questa opzione implica automaticamente la scrittura, senza bisogno di specificare l'opzione -w.
-y anno
Imposta l'anno. L'uso di questa opzione implica automaticamente la scrittura, senza bisogno di specificare l'opzione -w.
-c commento
Imposta il commento. L'uso di questa opzione implica automaticamente la scrittura, senza bisogno di specificare l'opzione -w.
-g n
-G genere_testuale
Imposta il genere, in forma di numero o in modo testuale. L'uso di questa opzione implica automaticamente la scrittura, senza bisogno di specificare l'opzione -w. Si osservi che l'impostazione del genere in forma testuale deve avvenire usando la definizione prevista.
-p[n]
Elenca i generi in ordine numerico, utilizzando n colonne.

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.

30.13.2   LAME

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.

Tabella 30.170. Alcune opzioni.

Opzione Descrizione
-r
Il file in ingresso è di tipo PCM grezzo.
-x
Forza lo scambio dei byte in ingresso.
-s freq_di_campionamento
Definisce la frequenza di campionamento in ingresso, espressa in kilohertz. Il valore predefinito è di 44,1 kHz, che si esprime come 44.1.
--mp1input
Indica che il file in ingresso è di tipo «MPEG layer I».
--mp2input
Indica che il file in ingresso è di tipo «MPEG layer II».
--mp3input
Indica che il file in ingresso è di tipo «MPEG layer III».
--ogginput
Indica che il file in ingresso è di tipo «Ogg Vorbis».
-m modalità
Consente di specificare la modalità di registrazione, attraverso l'indicazione di una lettera. Quelle fondamentali sono:
s   stereo;
j   stereo congiunto (predefinito);
m   mono.
Le modalità di registrazione effettivamente disponibili dipendono anche dal tipo di codifica usato.
-a
Mescola i canali del file in ingresso per generare un file monofonico.
--decode
Decodifica un file MP3 generando un file WAV-RIFF. In questo modo, il primo file indicato nella riga di comando deve essere in formato MP3, mentre ciò che si genera è un file WAV-RIFF.
-q n
Qualità della registrazione: il valore va da zero a nove, dove zero rappresenta la qualità migliore e nove quella peggiore.
-h
Equivale a -q 2.
-f
Equivale a -q 7 e rappresenta in pratica la richiesta di utilizzare una compressione rapida, ma di bassa qualità.
-c
Attiva l'indicatore relativo al copyright.
-o
Indica come non originale.
-p
Aggiunge 16 bit di controllo alla fine di ogni frame.
-tt titolo
Aggiunge il titolo.
-ta artista
Aggiunge l'indicazione dell'artista o degli artisti.
-tl album
Aggiunge il titolo dell'album a cui appartiene il contenuto del file.
-ty anno
Aggiunge l'anno.
-tc commento
Aggiunge un commento libero.
-tn n
Specifica il numero di traccia del CD originale, con un numero che va da 1 a 255.
-tg genere
Specifica il genere, espresso per nome o attraverso un numero.
--genre-list
Elenca i generi secondo lo standard ID3. Da questo elenco si può trarre il numero da usare con l'opzione -tg n.

Segue la descrizione di alcuni esempi.

30.13.3   Toolame

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.

Tabella 30.171. Alcune opzioni.

Opzione Descrizione
-x
Forza lo scambio dei byte in ingresso.
-s freq_di_campionamento
Definisce la frequenza di campionamento in ingresso, espressa in kilohertz. Il valore predefinito è di 44,1 kHz, che si esprime come 44.1.
-m modalità
Consente di specificare la modalità di registrazione, attraverso l'indicazione di una lettera. Quelle fondamentali sono:
s   stereo;
j   stereo congiunto (predefinito);
m   mono.
Le modalità di registrazione effettivamente disponibili dipendono anche dal tipo di codifica usato.
-a
Mescola i canali del file in ingresso per generare un file monofonico.
-c
Attiva l'indicatore relativo al copyright.
-o
Indica come non originale.

Segue la descrizione di alcuni esempi.

30.13.4   Vorbis Tools

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.

Tabella 30.172. Alcune opzioni per l'utilizzo di oggenc.

Opzione Descrizione
-o file
--output=file
Permette di specificare il nome del file compresso da generare. L'uso di questa opzione diventa utile, particolarmente, quando il file da comprimere viene fornito attraverso lo standard input indicando un trattino (-) al posto del nome del file.
-q n
--quality=n
Consente di specificare la qualità del file da generare, attraverso un numero che va da 0 a 10. Il valore predefinito è 3.
-n modello
--names=modello
Consente di specificare il modo in cui generare i nomi dei file, attraverso un modello che riconosce alcune sequenze di escape: %a, %t, %l e %G, che rappresentano le informazioni fornite con le opzioni che hanno la stessa lettera (-a, -t, -l e -G).
-a artista
--artist=artista
Consente di annotare il nome di un artista.
-t titolo
--title=titolo
Consente di annotare il titolo della registrazione.
-l album
--album=album
Consente di annotare il titolo della raccolta.
-G genere
--genre=genere
Consente di annotare il genere.

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.

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:

title=Track 02
artist=NoArtist
album=Unknown Disc

Per modificare questi dati nel file Ogg Vorbis, si può intervenire nello stesso file di testo appena generato, cambiandolo per esempio così:

title=Concerto n. 8, La cetra, RV238
artist=Antonio Vivaldi
album=Opera 9

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).

30.13.5   Flac

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.

Tabella 30.176. Alcune opzioni che rappresentano l'azione da compiere.

Opzione Descrizione
La mancanza di una di queste opzioni richiede la compressione del file.
-d
--decode
Richiede l'estrazione del file.
-t
--test
Richiede la verifica dell'integrità del file.

Tabella 30.177. Altre opzioni.

Opzione Descrizione
-c
--stdout
Invia il risultato dell'elaborazione attraverso lo standard output.
-o file
--output=file
Invia il risultato dell'elaborazione al file indicato come argomento dell'opzione.
-f
--force
Richiede espressamente la sovrascrittura del file che si genera, se questo esiste già.
--ogg
Dichiara il formato del file da comprimere, o da estrarre, come Ogg FLAC, mentre in condizioni normali si fa riferimento al formato FLAC puro e semplice.

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.

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]

30.13.6   Mpg321

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.

Tabella 30.180. Alcune opzioni.

Opzione Descrizione
-z
--shuffle
Esegue una volta sola, in ordine casuale, i file indicati alla fine della riga di comando.
-Z
--random
Esegue indefinitamente, in ordine casuale, i file indicati alla fine della riga di comando.
-w file
--wav file
Invece di utilizzare l'adattatore audio per la riproduzione sonora, genera un file WAV.
--stereo
Genera un'uscita stereofonica, anche se l'origine è monofonica.
-v
--verbose
Mostra il procedere dell'esecuzione o della conversione.

Segue la descrizione di alcuni esempi.

30.13.7   MP3blaster

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.

Figura 30.181. Pannello principale di MP3blaster.

.-----------------------------------------------------------------------( - ).
|[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.

Tabella 30.182. Comandi utili in fase di esecuzione dei brani.

Tasto Effetto
[1] Salta al brano precedente.
[2] Torna indietro nel brano in corso di esecuzione.
[3] Avvia l'esecuzione del brano corrente.
[4] Avanza nel brano in corso di esecuzione.
[5] Salta al brano successivo.
[6] Pausa.
[7] Stop.
[F6] Attiva o disattiva la richiesta di ripetizione del brano in corso di esecuzione.
[F7] Attiva o disattiva la richiesta di un'esecuzione secondo una sequenza casuale.
[t] Seleziona una linea di amplificazione differente, da controllare poi con i tasti [<] e [>].
[<]
[>]
Abbassa o alza il livello di amplificazione relativo alla linea selezionata con il tasto [t].
[q] Conclude la modalità di esecuzione.

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]

30.13.8   Xmms

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.

Figura 30.183. Pannello principale di Xmms al primo avvio.

xmms-pannello-frontale

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.

Figura 30.184. Pannello completo di Xmms.

xmms-mixer-playlist

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:

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]

30.13.9   FreeAmp

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.

Figura 30.185. Pannello frontale di FreeAmp.

freeamp-pannello-frontale

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.

Figura 30.186. Gestore di file audio incorporato in FreeAmp.

freeamp-mymusic

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.

Figura 30.187. Modifica delle informazioni ID3.

freeamp-id3

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.

Figura 30.188. Pannello frontale di FreeAmp collegato a un flusso HTTP.

freeamp-pannello-frontale-stream

30.13.10   Zinf

Zinf, (56) è una sorta di rivisitazione di FreeAmp: «Zinf is not FreeAmp».

zinf [file]
zinf [uri]

Figura 30.189. Pannello frontale di Zinf.

Zinf

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]

Title  : Mozart - Oboe Concerto in C Major KV 314           
Artist :                                                    
Album  :                                                    
Year   :                                                    
Genre  :                                                    
Track  :                                                    
Comment:                                                    
                                                            
                                                            
                                                            
                                                            
                                                     96 kbps
                                               44 kHz stereo
 press h for keystroke help                   MPEG-1 layer 3
                                                            
00:00:24                                            00:00:-1
############################################################

30.14   Audio attraverso la rete

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à.

Figura 30.191. Idea generale del funzionamento di un sistema di diffusione di audio attraverso la rete, per mezzo di un servente con funzione di ripetitore.

diffusione audio

30.14.1   Icecast 1

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:

HTTP/1.0 200 OK
Server: icecast/1.0.0
Content-type: audio/mpeg

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:

#!/bin/sh
# init.d/icecast {start|stop|restart}

# Importazione della configurazione di Icecast
. /etc/defaults/icecast

# Analisi dell'argomento usato nella chiamata.
case "$1" in
  start)
        printf "Avvio del servizio Icecast: "
        /usr/sbin/icecast $OPZIONI &
        echo
        ;;
  stop)
        printf "Disattivazione del servizio Icecast: "
        killall icecast
        echo
        ;;
  *)
        echo "Utilizzo: pippo {start|stop}"
        exit 1
esac

exit 0

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:

PASSWORD=D.BOQjOm40WtQ

OPZIONI="-p $PASSWORD"

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.

30.14.1.1   Trasmissione al ripetitore

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.

Tabella 30.196. Opzioni principali di shout.

Opzione Descrizione
-P stringa
Parola d'ordine da trasmettere al servente.
-e n
Accede al servente attraverso la porta indicata.
-l
Continua la trasmissione all'infinito.
-p file_elenco
Indica i file da trasmettere attraverso l'elenco contenuto nel file.
-r
Sequenza casuale nella trasmissione dei file audio.

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.

30.14.1.2   Ricezione del flusso audio digitale

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.

30.14.2   Ricezione di radio attraverso Internet

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.

30.14.2.1   Applicativi comuni per la ricezione di stazioni radio via Internet

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.

Figura 30.197. Rhythmbox durante l'ascolto di una stazione radio.

rhythmbox-front

Figura 30.198. Configurazione di una stazione radio con Rhythmbox.

rhythmbox-config-radio

30.14.2.2   Indirizzi di accesso a stazioni radio via Internet

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:

[playlist]
NumberOfEntries=4
File1=http://64.236.34.196:80/stream/1006
Title1=S K Y . F M - Mostly Classical - Relax...
Length1=-1
File2=http://64.236.34.4:80/stream/1006
Title2=S K Y . F M - Mostly Classical - Relax...
Length2=-1
File3=http://64.236.34.196:80/stream/1006
Title3=S K Y . F M - Mostly Classical - Relax...
Length3=-1
File4=http://64.236.34.4:5190/stream/1006
Title4=S K Y . F M - Mostly Classical - Relax...
Length4=-1
Version=2

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.

30.14.2.3   Streamtuner

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.

Figura 30.200. Streamtuner durante il funzionamento. Si vede in primo piano anche XMMS, avviato da Streamtuner per l'ascolto della stazione radio selezionata dall'elenco.

Streamtuner e XMMS

30.14.2.4   Streamripper

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

30.15   Concetti generali sui formati video digitali

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.

30.15.1   Composizione di un'immagine fissa

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.

30.15.2   Dall'immagine fissa al filmato

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).

30.15.3   Digitalizzazione di un filmato

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).

30.15.4   Confezionamento di un filmato

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.

30.15.5   Contenitore multimediale

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).

30.15.6   Trasformazione in teoria

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:

FRAME_RATE (VIDEO_SRC, A_SRC, Z_SRC, FPS_SRC,
            VIDEO_DST, A_DST, FPS_DST)

    LOCAL FRAME_TIME_SRC FLOAT
    LOCAL FRAME_TIME_DST FLOAT
    LOCAL VIDEO_TIME     FLOAT
    LOCAL FRAME_SRC      INTEGER
    LOCAL FRAME_DST      INTEGER
    LOCAL I_SRC          INTEGER
    LOCAL I_DST          INTEGER
    LOCAL Z_DST          INTEGER

    FRAME_TIME_SRC := (1 / FPS_SRC)
    FRAME_TIME_DST := (1 / FPS_DST)

    FRAME_DST := 0
    
    WHILE TRUE

        VIDEO_TIME    := (FRAME_DST * FRAME_TIME_DST)
        FRAME_SRC     := (VIDEO_TIME / FRAME_TIME_SRC + 0.5)
        I_SRC         := (A_SRC + FRAME_SRC)
        I_DST         := (A_DST + FRAME_DST)

        IF I_SRC <= Z_SRC
            THEN
                VIDEO_DST[I_DST] := VIDEO_SRC[I_SRC]
            ELSE
                BREAK
        END IF
        
        FRAME_DST++
    
    END WHILE

    Z_DST := (I_DST - 1)

    RETURN (VIDEO_DST, A_DST, Z_DST)

END FRAME_RATE

In pratica, la funzione FRAME_RATE() riceve come argomenti:

Nome Descrizione
VIDEO_SRC il riferimento a un array monodimensionale contenente la sequenza dei quadri, in un intervallo di celle ben determinato;
A_SRC l'indice del primo quadro da prendere in considerazione nell'array originale;
Z_SRC l'indice dell'ultimo quadro da prendere in considerazione nell'array originale;
FPS_SRC la frequenza di quadro originale in hertz (simbolo: «Hz»);
VIDEO_DST il riferimento a un array monodimensionale che deve contenente la sequenza finale dei quadri;
A_DST l'indice del primo quadro da collocare nell'array finale;
FPS_DST la frequenza di quadro finale in hertz (simbolo: «Hz»).

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:

Nome Descrizione
FRAME_TIME_SRC serve a contenere la durata di tempo di ogni quadro nella sequenza originale;
FRAME_TIME_DST serve a contenere la durata di tempo di ogni quadro nella destinazione;
VIDEO_TIME serve a contenere, di volta in volta, il tempo totale accumulato durante la trasformazione dei quadri;
FRAME_SRC serve a individuare il quadro n-esimo nell'origine;
FRAME_DST serve a individuare il quadro n-esimo nella destinazione;
I_SRC serve a contenere l'indice di scansione dell'array di origine;
I_DST serve a contenere l'indice di scansione dell'array di destinazione;
Z_DST serve a contenere la dimensione massima dell'array di destinazione.

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.

30.15.7   Trasformazione di un formato «multiplex»

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.

30.16   Programmi per l'esecuzione di filmati digitali

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.

Tabella 30.206. Alcuni esempi di MRL.

MRL Descrizione
file:///home/tizio/mio_file.avi File AVI accessibile nel file system con il percorso /home/tizio/mio_file.avi.
dvd:///dev/sr0 DVD (video) inserito nell'unità corrispondente al file di dispositivo /dev/sr0.
vcd:///dev/hdc VCD (video) inserito nell'unità corrispondente al file di dispositivo /dev/hdc.
http://www.audio.dg/musica.pls Probabilmente una stazione radio accessibile attraverso il protocollo HTTP.
http://www.video.dg:8080/;stream.nsv Probabilmente una stazione televisiva accessibile attraverso il protocollo HTTP.
rtsp://www.video.dg/ Probabilmente una stazione televisiva accessibile attraverso il protocollo RTSP.

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.

Figura 30.207. VLC durante la visione di un DVD video.

vlc

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).

30.17   Programmi per la registrazione video dello schermo

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.

Tabella 30.208. Alcune opzioni importanti per l'uso di recordmydesktop.

Opzione Descrizione
--width pixel
--height pixel
Ampiezza e altezza del riquadro da riprendere, in punti grafici. In mancanza di queste opzioni, la ripresa avviene su tutto lo schermo.
-x pixel
-y pixel
Individua le coordinate iniziali, in alto a sinistra, della ripresa che si vuole fare. Il valore della coordinata viene dato in punti grafici.
--no-sound
Con l'uso di questa opzione ci si limita alla ripresa video, ignorando l'audio.
-o file
Specifica il nome del file da produrre.

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.

Altri programmi affini.

Camstudio(68) Si tratta di un programma simile a Recordmydesktop, per sistemi MS-Windows, che genera file AVI: http://camstudio.org, http://sourceforge.net/projects/camstudio.

30.18   Elaborazione di formati video

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.

30.18.1   FFmpeg

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 \
  \     [-f formato_di_uscita] [opzioni_di_elaborazione] file_uscita

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
...

Tabella 30.211. Alcune opzioni.

Opzione Significato mnemonico Descrizione
-i file
input Dichiara il file da usare in ingresso.
-f formato
format Consente di dichiarare il formato (si può usare anche per forzare l'interpretazione del formato del file in ingresso).
-hq
high quality Richiede al programma di generare un file con la qualità migliore possibile.
-b n
bit rate Richiede un tasso del flusso di dati (bit rate) di n kbit/s. Il valore predefinito è di 200 kbit/s; valori maggiori consentono una registrazione di qualità migliore.
-sameq
same quality Richiede un tasso del flusso di dati (bit rate) uguale a quello originale.
-r n
frame rate Richiede una frequenza di quadro di n Hz. Il valore predefinito è di 25 Hz.
-s mxn
size Richiede un quadro di dimensioni m per n punti grafici (m è l'ampiezza orizzontale; n è l'altezza).

Tabella 30.212. Alcuni formati da specificare con l'opzione -f.

Opzione Descrizione
-f au
Audio Sun.
-f wav
Audio WAV-RIFF.
-f mp2
-f mp3
Audio MP2 o MP3.
-f ogg
Audio Ogg Vorbis.
-f yuv4mpegpipe
Video YUV4MPEG.
-f mpeg1video
-f mpeg2video
Video MPEG-1 o MPEG-2.
-f gif
Animazione GIF.
-f swf
Animazione SWF, nota anche come Flash (video e audio).
-f asf
Contenitore multimediale ASF (video e audio).
-f avi
Contenitore multimediale AVI (video e audio).
-f mov
Contenitore multimediale MOV (video e audio).
-f mpeg
Contenitore multimediale MPEG1 (video e audio).
-f mpegts
Contenitore multimediale MPEG2 (video e audio).

Segue la descrizione di alcuni esempi.

30.18.2   Mjpegtools

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).

30.18.2.1   Utilizzo di «jpeg2yuv» e di «png2yuv»

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] \
  \       -j modello_file > file_y4m
png2yuv -f f_quadro -I interlacciamento [altre_opzioni] \
  \       -j modello_file > file_y4m

Come si vede, i modelli sintattici per l'uso di questi due programmi sono equivalenti e alcune opzioni sono obbligatorie.

Tabella 30.213. Alcune opzioni.

Opzione Significato mnemonico Descrizione
-f n
frame Definisce la frequenza di quadro, dove n rappresenta il numero di quadri per secondo.
-I p|t|b
interlace Definisce il tipo di interlacciamento: -I p richiede l'assenza di interlacciamento; -I t richiede per primo il semiquadro superiore; -I b richiede per primo il semiquadro inferiore.
-L 0|1
Attiva o disattiva l'interlacciamento: -L 0 copia la stessa immagine in due semiquadri; -L 1 indica che i campi sono interlacciati.
-l n
loop Richiede di ripetere la sequenza per n volte. Se non si specifica questa opzione, si ottiene una sola sequenza; se si indica -l -1, si ottiene un filmato di lunghezza indefinita.
-n n
Richiede di utilizzare soltanto n quadri in ingresso. In modo predefinito vengono utilizzati tutti i quadri disponibili; eventualmente si può dichiarare esplicitamente la richiesta di usarli tutti con l'opzione -n -1.
-j radice%0ndestensione
Definisce il modello del gruppo di file da utilizzare per ricostruire il filmato. Per esempio, -j prova%06.jpg fa riferimento a file del tipo prova000000.jpg, prova000001.jpg,... prova999999.jpg.

Segue la descrizione di alcuni esempi.

30.18.2.2   Utilizzo di «yuvplay»

Il programma yuvplay consente di eseguire un flusso YUV4MPEG, come quello generato dai programmi png2yuv o jpeg2yuv:

yuvplay [opzioni] < file_y4m

Tabella 30.214. Alcune opzioni.

Opzione Significato mnemonico Descrizione
-f n
frame Forza l'utilizzo di una frequenza di quadro specifica, dove n rappresenta il numero di quadri per secondo.
-s ampiezzaxaltezza
size Consente di modificare le dimensioni della riproduzione video, indicando valori in punti grafici (pixel).

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]

30.18.2.3   Utilizzo di «mpeg2enc»

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.

Tabella 30.215. Alcune opzioni.

Opzione Descrizione
-a n
--aspect n
Specifica il rapporto di riproduzione dell'immagine (aspect ratio). Se questa opzione non viene specificata, il rapporto viene determinato dalle informazioni contenute nel flusso in ingresso.
-a 1
--aspect 1
Imposta il rapporto di riproduzione a 1:1 (quadrato).
-a 2
--aspect 2
Imposta il rapporto di riproduzione a 4:3 (formato televisivo comune).
-a 3
--aspect 3
Imposta il rapporto di riproduzione a 16:9.
-a 4
--aspect 4
Imposta il rapporto di riproduzione a 2,21:1.
-b n
--video-bitrate n
Imposta il tasso del flusso di dati video a n kbit/s.
-n n|p|s
--video-norm n|p|s
Forza l'interpretazione del flusso di ingresso secondo lo standard NTSC, PAL o SECAM, rispettivamente in base all'argomento n, p o s.
-f n
--format n
Specifica il tipo di formato del file da generare, attraverso un numero intero.
-f 0
--format 0
Formato video MPEG-1 generico.
-f 3
--format 3
Formato video MPEG-2 generico.
-o file
--output file
Questa opzione appare obbligatoriamente alla fine della riga di comando e serve a dichiarare il nome del file da generare.

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.

30.18.2.4   Utilizzo di «mplex»

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.

Tabella 30.216. Alcune opzioni.

Opzione Descrizione
-f n
--format n
Specifica il tipo di formato del file da generare, attraverso un numero intero. Nelle righe successive ne vengono indicati alcuni.
-f 0
--format 0
Formato MPEG1 generico.
-f 1
--format 1
Formato VCD.
-f 3
--format 3
Formato MPEG2 generico.
-f 4
--format 4
Formato SVCD.
-f 8
--format 8
Formato DVD (VOB), adatto per Dvdauthor.
-V
--vbr
Richiede espressamente di utilizzare un tasso variabile del flusso di dati (variable bit rate).
-o file
--output file
Specifica il nome del file da generare.

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.

30.18.3   Transcode

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.

Tabella 30.217. Alcune opzioni.

Opzione Significato mnemonico Descrizione
-i file
-o file
input, output Specificano, rispettivamente, il nome del file da usare in ingresso e in uscita.
-x video[,audio]
-y video[,audio]
Specificano i moduli da usare, rispettivamente, per l'interpretazione del file in ingresso e per la creazione del file in uscita. Si distingue eventualmente tra modulo video e modulo audio (facoltativo), dove il secondo potrebbe essere determinato automaticamente dal tipo di modulo video richiesto. Tra i vari moduli esiste anche quello denominato null, per escludere esplicitamente uno dei due moduli (video o audio). Si osservi che di solito l'opzione -x viene omessa, lasciando che sia il programma a determinare il formato del file in ingresso.
-F codifica
Questa opzione dipende dal modulo specificato con l'opzione -y e serve a richiedere l'uso di una certa codifica a quel modulo particolare selezionato per il file 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.

30.18.4   Creazione di un filmato da un'immagine fissa

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.

Riquadro 30.218. Campionatura audio e frequenza di quadro.

A seconda della frequenza di quadro dello standard utilizzato (NTSC, PAL o SECAM), si deve calcolare la quantità di campioni audio per quadro, in modo da poter sincronizzare il suono correttamente. La frequenza di quadro dello standard NTSC è di 29,97 quadri per secondo, mentre quella degli standard europei (PAL e SECAM) è di 25 quadri per secondo. Conoscendo la frequenza di campionamento della fonte sonora, basta dividere quel valore per la frequenza di quadro per ottenere quanti campioni corrispondono a un quadro. Per esempio, la frequenza di campionamento di 48 kHz (ovvero 48 000 Hz), divisa per 29,97 (NTSC), dà 1 601,6 campioni per quadro; divisa per 25 (PAL o SECAM), dà 1 920 campioni per quadro. Nello stesso modo, la frequenza di campionamento di 44,1 kHz (ovvero 44 100 Hz), divisa per 29,97 (NTSC), dà 1 471,5 campioni per quadro; divisa per 25 (PAL o SECAM), dà 1 764 campioni per quadro.

Per generare una traccia audio silenziosa, in formato MPEG-1 II, con una campionatura a 48 kHz, si può usare Toolame con un comando di questo tipo:

dd if=/dev/zero bs=4 count=n_campioni \
  \| toolame -b 128 -s 48 /dev/stdin file_da_generare

In pratica, la durata della traccia audio si determina specificando la quantità di campioni da inserire nell'argomento dell'opzione count del comando dd.

30.18.5   Funzioni per l'elaborazione dei filmati quadro per quadro

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:

...
video_to_frame origine.m1v destinazione 25 720x576
...

Si può sintetizzare il lavoro di questa funzione nel modo seguente:

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:

...
frame_to_video origine destinazione.m2v 25
...

30.19   Introduzione ai DVD video

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.

30.19.1   Descrizione superficiale dell'organizzazione di un DVD video

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.

Tabella 30.221. Caratteristiche standard del formato dei filmati nei vari standard video per CD e per DVD.

Standard di memorizzazione Geometria per NTSC Geometria per PAL/SECAM Frequenza di campionamento audio
VCD 352×240 352×288 44 100 Hz
SVCD 480×480 480×576 44 100 Hz
DVD 720×480 720×576 48 000 Hz

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.

30.19.2   Copia di un DVD video normale

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:

  1. mkdir /tmp/dvd[Invio]

    viene creata la directory /tmp/dvd/ per fare la copia del contenuto del DVD video;

  2. mount -t auto /dev/sr0 /mnt/sr0[Invio]

    viene innestato il DVD video nella directory /mnt/sr0/ (che si presume essere già esistente);

  3. cp -dpRv /mnt/sr0/* /tmp/dvd[Invio]

    viene copiato il contenuto del DVD video nella directory /mnt/sr0/;

  4. 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;

  5. 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;

  6. growisofs -dvd-compat -Z /dev/sr0=/tmp/dvd.img[Invio]

    dopo aver inserito un DVD vergine nel masterizzatore (/dev/sr0), si procede all'incisione;

  7. 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.

30.19.3   Copia parziale di un DVD video normale

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à.

30.19.4   Utilizzo di Dvdbackup

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.

Tabella 30.222. Alcune opzioni.

Opzione Significato mnemonico Descrizione
-I
info Usando questa opzione si ottengono le informazioni disponibili sul disco sotto esame. In questo caso non si usa l'opzione -o.
-n nome
name Permette di fissare il nome del disco, in modo da sapere esattamente in quale sottodirectory vengono collocati i file.
-M
mirror Richiede di estrapolare una copia completa del disco.
-F
feature Richiede di estrapolare l'insieme di titoli principale.
-T nn
title set Richiede di estrapolare l'insieme di titoli n. In pratica fa una copia dei file VTS_nn_*.
-t n [-s x -e y]
title Richiede di estrapolare il titolo n. Se si indicano anche le opzioni -s e -e, si estrapolano solo i capitoli da x a y del titolo indicato.

Segue la descrizione di alcuni esempi.

30.19.5   Primi esperimenti per realizzare un DVD con contenuti propri

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:

...
audio_video_transcode filmato.avi filmato.vob 25 720x576
...

30.19.6   Inserire delle diapositive in un DVD video

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:

...
picture_transcode figura.png diapositiva.vob 25 720x576 15
...

30.19.7   Menù di un DVD video

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.

Figura 30.226. Immagine di partenza per un menù.

fondale

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.

Figura 30.227. Menù in bianco e nero, con i soli bottoni per accedere ai titoli interni.

bottoni

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]

Figura 30.228. Supponendo che il grigio rappresenti lo sfondo trasparente, quello che si vede rappresenta l'immagine che si ottiene nel file menu.black.png.

bottoni

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]

Figura 30.229. Supponendo che il grigio rappresenti lo sfondo trasparente, quello che si vede rappresenta l'immagine che si ottiene nel file menu.red.png, dove il testo appare in rosso.

bottoni

Figura 30.230. Supponendo che il grigio rappresenti lo sfondo trasparente, quello che si vede rappresenta l'immagine che si ottiene nel file menu.green.png, dove il testo appare in verde.

bottoni

Figura 30.231. Supponendo che il grigio rappresenti lo sfondo trasparente, quello che si vede rappresenta l'immagine che si ottiene nel file menu.blue.png, dove il testo appare in blu.

bottoni

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:

<subpictures>
  <stream>
    <spu start="00:00:00.00"
       image="menu.black.png"
       select="menu.green.png"
       highlight="menu.red.png"
       force="yes"
       autooutline="infer"
       outlinewidth="15"
       autoorder="rows">
    </spu>
  </stream>
</subpictures>

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:

...
dvd_menu menu.png menu.vob 25 720x576
...

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.

30.19.8   Creazione di un DVD con menù

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:

<dvdauthor dest="/tmp/dvd" jumppad="0">
  <vmgm>
    <menus>
      <pgc entry="title">
        <vob file="menu.vob" pause="inf"/>
        <button> jump title 1; </button>
        <button> jump title 2; </button>
        <button> jump title 3; </button>
        <button> jump title 4; </button>
        <post> jump vmgm menu 1; </post>
      </pgc>
    </menus>
  </vmgm>
  <titleset>
    <titles>
      <pgc>
        <vob file="filmato-1.vob"/>
        <post> call vmgm menu 1; </post>
      </pgc>
      <pgc>
        <vob file="filmato-2.vob"/>
        <post> call vmgm menu 1; </post>
      </pgc>
      <pgc>
        <vob file="filmato-3.vob"/>
        <post> call vmgm menu 1; </post>
      </pgc>
      <pgc>
        <vob file="filmato-4.vob"/>
        <post> call vmgm menu 1; </post>
      </pgc>
    </titles>
  </titleset>
</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}.

Figura 30.235. Menù in funzione con il primo titolo evidenziato.

fondale

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:

    <titles>
      <pgc>
        <vob file="filmato-1.vob"/>
        <post> jump title 2; </post>
      </pgc>
      <pgc>
        <vob file="filmato-2.vob"/>
        <post> jump title 3; </post>
      </pgc>
      <pgc>
        <vob file="filmato-3.vob"/>
        <post> jump title 4; </post>
      </pgc>
      <pgc>
        <vob file="filmato-4.vob"/>
        <post> call vmgm menu 1; </post>
      </pgc>
    </titles>

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.

<dvdauthor dest="/tmp/dvd" jumppad="0">
  <vmgm>
    <menus>
      <pgc entry="title">
        <vob file="menu.vob" pause="inf"/>
        <button> jump title 1; </button>
        <button> jump title 2; </button>
        <button> jump title 3; </button>
        <post> jump vmgm menu 1; </post>
      </pgc>
    </menus>
  </vmgm>
  <titleset>
    <titles>
      <pgc>
        <vob file="filmato-1.vob"/>
        <vob file="filmato-2.vob"/>
        <vob file="filmato-3.vob"/>
        <vob file="filmato-4.vob"/>
        <post> call vmgm menu 1; </post>
      </pgc>
      <pgc>
        <vob file="filmato-5.vob"/>
        <vob file="filmato-6.vob"/>
        <vob file="filmato-7.vob"/>
        <post> call vmgm menu 1; </post>
      </pgc>
      <pgc>
        <vob file="filmato-8.vob"/>
        <vob file="filmato-9.vob"/>
        <post> call vmgm menu 1; </post>
      </pgc>
    </titles>
  </titleset>
</dvdauthor>

30.20   DVDStyler

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.

30.20.1   Avvio di DVDStyler

DVDStyler si avvia attraverso l'eseguibile dvdstyler, senza l'indicazione di opzioni e argomenti:

dvdstyler

Figura 30.238. DVDStyler dopo l'avvio, prima di iniziare il progetto di un DVD video.

dvdstyler

30.20.2   Configurazione dello standard video

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}.

Figura 30.239. Configurazione dello standard video.

dvdstyler

30.20.3   Costruzione del menù

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ù.

Figura 30.240. Selezione di un'immagine per lo sfondo.

dvdstyler

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.

Figura 30.241. Menù già preparato con tre titoli.

dvdstyler

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).

Figura 30.242. Configurazione della terza voce del menù.

dvdstyler

30.20.4   Inserimento dei filmati

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.

Figura 30.243. Inserimento dei filmati.

dvdstyler

Così facendo, ogni file costituisce un titolo differente.

30.20.5   Creazione del DVD video

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}.

Figura 30.244. Conferma nella fase di creazione del DVD.

dvdstyler

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: dvd:///home/tizio/dvd.iso. Per esempio, Xine andrebbe avviato così:

xine dvd:///home/tizio/dvd.iso[Invio]

30.21   Riferimenti


1) Exiftool   stesse condizioni di Perl

2) LibExif   GNU LGPL

3) Exiv2   GNU GPL

4) SANE API and network protocol   dominio pubblico

5) SANE backend libraries   GNU GPL con alcune eccezioni

6) Scanimage   GNU GPL

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

15) Gimp   GNU GPL

16) ImageMagick   software libero con licenza speciale

17) GraphicsMagick   software libero con licenza speciale

18) Kolourpaint   GNU GPL

19) Gpaint   GNU GPL

20) Tuxpaint   GNU GPL

21) GQview   GNU GPL

22) Dcd   GNU GPL

23) TCD   GNU GPL

24) Cdcd   GNU GPL

25) AsCD   GNU GPL

26) Gcd   GNU GPL

27) Cdparanoia   GNU GPL

28) Grip   GNU GPL

29) Disc-Cover   GNU GPL

30) Cdlabelgen   software libero con licenza speciale

31) Aumix   GNU GPL

32) Alsamixer   GNU GPL

33) Alsamixergui   GNU GPL

34) Gnome-media   GNU GPL e GNU LGPL

35) Wavtools   GNU GPL

36) Sound-recorder   GNU GPL

37) Alsa-utils   GNU GPL

38) Sox   software libero con licenza speciale

39) Normalize   GNU GPL

40) Xwave   GNU GPL

41) Audacity   GNU GPL

42) eSpeak   GNU GPL

43) Midge   GNU GPL

44) MIDI-Perl   GNU GPL o Artistic

45) Timidity++   GNU GPL

46) Eawpatches   dominio pubblico, salvo alcuni file

47) MP3info   GNU GPL

48) LAME   GNU LGPL

49) Toolame   GNU GPL

50) Vorbis Tools   GNU GPL

51) Flac   GNU GPL

52) Mpg321   GNU GPL

53) MP3blaster   GNU GPL

54) Xmms   GNU GPL

55) FreeAmp   GNU GPL

56) Zinf   GNU GPL

57) Icecast   GNU GPL

58) Makepasswd   GNU GPL

59) Xmms   GNU GPL

60) Rhythmbox   GNU GPL

61) FreeAmp   GNU GPL

62) Zinf   GNU GPL

63) Streamtuner   simile a BSD

64) Streamripper   GNU GPL

65) Mplayer   GNU GPL

66) VideoLAN   GNU GPL

67) Recordmydesktop   GNU GPL

68) Camstudio   GNU GPL

69) FFmpeg   GNU GPL

70) Mjpegtools   GNU GPL

71) Transcode   GNU GPL

72) Dvdauthor   GNU GPL

73) Dvdbackup   GNU GPL

74) DVDStyler   GNU GPL

«a2» 2013.11.11 --- Copyright © Daniele Giacomini -- appunti2@gmail.com http://informaticalibera.net