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.