14.6 chunk -- Leggere spezzoni di dati IFF

Questo modulo fornisce un'interfaccia per leggere i file che usano spezzoni.14.1 Questo formato viene usato nei file con formato Audio Interchange File Format (AIFF/AIFF-C) e nel formato Real Media File Format (RMFF). Il formato audio WAVE � strettamente correlato e si pu� leggere usando questo modulo.

Uno spezzone ha la seguente struttura:

Offset  Lunghezza  Contenuto 
0 4 Chunk ID
4 4 Dimensione dello spezzone nell'ordine big-endian, non include l'header
8 n Dati in bytes, dove n � la dimensione fornita nel precedente campo
8 + n 0 o 1 Blocco di byte necessario se n � dispari e viene usato l'allineamento degli spezzoni

L'ID � una stringa di 4 byte che identifica il tipo di spezzone.

La dimensione del campo (un valore a 32 bit, codificato usando big-endian) fornisce la dimensione dei dati dello spezzone, esclusi gli 8 byte dell'intestazione.

Di solito un file di tipo IFF si compone di uno o pi� chunk. L'uso proposto della classe Chunk qui definita � istanziare un'istanza all'avvio di ogni spezzone e leggere dall'istanza prima che raggiunga la fine, fatto questo, pu� essere creata una nuova istanza. Giunti alla fine del file, la creazione di una nuova istanza fallir�, sollevando l'eccezione EOFError.

class Chunk( file[, align, bigendian, inclheader])
Classe che rappresenta uno spezzone. L'argomento file viene atteso come un oggetto simile a file. Un'istanza di questa classe � specificatamente permessa. Il solo metodo richiesto � read(). Se i metodi seek() e tell() sono presenti e non sollevano eccezioni, allora significa che si aspettano di non dovere alterare l'oggetto. Se l'argomento facoltativo align � vero, si presuppone che gli spezzoni siano allineati sul limite dei 2 byte. Se align � falso, non si presuppone alcun allineamento. Il valore predefinito � vero. Se l'argomento facoltativo bigendian � falso, si assume che la dimensione dello spezzone sia ordinata in little-endian. Questo � necessario per i file audio WAVE. Il valore predefinito � vero. Se l'argomento facoltativo inclheader � vero, la dimensione fornita nell'intestazione dello spezzone include la misura dell'intestazione. Il valore predefinito � falso.

Un oggetto Chunk supporta i seguenti metodi:

getname( )
Restituisce il nome (ID) dello spezzone. Questo � il primo dei 4 byte dello spezzone.

getsize( )
Restituisce la dimensione dello spezzone.

close( )
Chiude e passa alla fine dello spezzone. Questo non chiude i file sottostanti.

I restanti metodi sollevano un'eccezione IOError se vengono chiamati dopo aver chiamato il metodo close().

isatty( )
Restituisce False.

seek( pos[, whence])
Imposta la posizione corrente dello spezzone. L'argomento whence � facoltativo ed ha come valore predefinito lo 0 (posizionamento assoluto nel file); altri valori sono 1 (cerca relativamente alla posizione corrente) e 2 (cerca relativamente alla fine del file). Non viene restituito alcun valore. Se il file sottostante non permette la ricerca con seek, � permessa la sola ricerca di dati successivi al posizionamento nel file.

tell( )
Restituisce la corrente posizione nello spezzone.

read( [size])
Legge la maggiore parte della dimensione, size, dello spezzone (meno se la lettura raggiunge la fine dello spezzone prima di ottenerne la dimensione size in byte). Se l'argomento size � negativo o viene omesso, legge tutti i dati prima della fine dello spezzone. I byte vengono restituiti come un oggetto stringa. Viene restituita una stringa vuota quando viene raggiunta la fine dello spezzone.

skip( )
Salta alla fine dello spezzone. Tutte le chiamate a read() per lo spezzone restituiranno ''. Se non si � interessati al contenuto dello spezzone, questo metodo dovrebbe essere chiamato in modo da far puntare il file all'inizio del prossimo spezzone.


Footnotes

... spezzoni.14.1
``EA IFF 85'' Standard for Interchange Format Files, di Jerry Morrison, Electronic Arts, January 1985.
Vedete Circa questo documento... per informazioni su modifiche e suggerimenti.