"chunk" --- Lee los datos de los trozos de IFF
**********************************************

**Código fuente:** Lib/chunk.py

======================================================================

Este módulo proporciona una interfaz para leer archivos que usan
trozos de EA IFF 85. [1]  Este formato se utiliza al menos en el
formato *Audio Interchange File Format (AIFF/AIFF-C)* y en el formato
*Real Media File Format (RMFF)*.  El formato de archivo de audio WAVE
está estrechamente relacionado y también puede ser leído usando este
módulo.

Un trozo tiene la siguiente estructura:

+-----------+----------+---------------------------------+
| Desplaza  | Longitud | Contenido                       |
| miento    |          |                                 |
|===========|==========|=================================|
| 0         | 4        | ID del trozo                    |
+-----------+----------+---------------------------------+
| 4         | 4        | El tamaño del trozo en el orden |
|           |          | de bytes big-endian, sin        |
|           |          | incluir el encabezado           |
+-----------+----------+---------------------------------+
| 8         | *n*      | Bytes de datos, donde *n* es el |
|           |          | tamaño dado en el campo         |
|           |          | anterior                        |
+-----------+----------+---------------------------------+
| 8 + *n*   | 0 o 1    | Se necesita un byte de relleno  |
|           |          | si *n* es impar y se utiliza la |
|           |          | alineación de trozos            |
+-----------+----------+---------------------------------+

La ID es una cadena de 4 bytes que identifica el tipo de trozo.

El campo de tamaño (un valor de 32 bits, codificado utilizando el
orden de bytes big-endian) da el tamaño de los datos de los trozos,
sin incluir el encabezamiento de 8 bytes.

Normalmente un archivo de tipo IFF consiste en uno o más trozos.  El
uso propuesto de la clase "Chunk" definido aquí es declarar una
instancia al principio de cada trozo y leer de la instancia hasta que
llegue al final, después de lo cual se puede declarar una nueva
instancia. Al final del archivo, la creación de una nueva instancia
fallará con una excepción "EOFError".

class chunk.Chunk(file, align=True, bigendian=True, inclheader=False)

   Clase que representa un trozo.  Se espera que el argumento *file*
   sea un objeto parecido a un archivo.  Una instancia de esta clase
   está específicamente permitida.  El único método que se necesita es
   "read()".  Si los métodos "seek()" y "tell()" están presentes y no
   plantean una excepción, también se utilizan. Si estos métodos están
   presentes y hacen una excepción, se espera que no hayan alterado el
   objeto.  Si el argumento opcional *align* es cierto, se supone que
   los trozos están alineados en los límites de 2 bytes.  Si *align*
   es falso, se asume que no hay alineación.  El valor por defecto es
   true.  Si el argumento opcional *bigendian* es falso, se asume que
   el tamaño de los trozos está en orden little-endian. Esto es
   necesario para los archivos de audio WAVE. El valor por defecto es
   true.  Si el argumento opcional *inclheader* es true, el tamaño
   dado en la cabecera del trozo incluye el tamaño de la cabecera.  El
   valor por defecto es false.

   Un objeto "Chunk" soporta los siguientes métodos:

   getname()

      Retorna el nombre (ID) del trozo.  Estos son los primeros 4
      bytes del trozo.

   getsize()

      Retorna el tamaño del trozo.

   close()

      Cierra y salta al final del trozo.  Esto no cierra el archivo
      subyacente.

   El resto de los métodos se levantarán "OsError" si se llama después
   de que el método "close()" haya sido llamado.  Antes de *Python*
   3.3, solían levantar "IOError", ahora un alias de "OSError".

   isatty()

      Retorna "False".

   seek(pos, whence=0)

      Establece la posición actual del trozo.  El argumento *whence*
      es opcional y por defecto es "0" (posicionamiento absoluto del
      archivo); otros valores son "1" (búsqueda relativa a la posición
      actual) y "2" (búsqueda relativa al final del archivo).  No hay
      ningún valor de retorno. Si el archivo subyacente no permite la
      búsqueda, sólo se permiten las búsquedas hacia adelante.

   tell()

      Retorna la posición actual en el trozo.

   read(size=-1)

      Leer como máximo *size* bytes del trozo (menos si la lectura
      llega al final del trozo antes de obtener *size* bytes).  Si el
      argumento *size* es negativo u omitido, lee todos los datos
      hasta el final del trozo.  Un objeto de bytes vacío se retorna
      cuando el final del trozo se encuentra inmediatamente.

   skip()

      Salta al final del trozo.  Todas las llamadas posteriores a
      "read()" para el trozo retorna "b''".  Si no estás interesado en
      el contenido del trozo, este método debe ser llamado para que el
      archivo apunte al comienzo del siguiente trozo.

-[ Notas a pie de página ]-

[1] "EA IFF 85" *Standard for Interchange Format Files*, *Jerry
    Morrison*, *Electronic Arts*, enero 1985.
