chunk – чтение данных IFF чанками¶chunk – Read IFF chunked data
Этот модуль предоставляет интерфейс для чтения файлов, использующих EA IFF 85 чанки. [1] Этот формат применяется, как минимум, в Audio Interchange File Format (AIFF/AIFF-C) и Real Media File Format (RMFF). Формат аудиофайлов WAVE тесно связан с ним и также может быть прочитан с помощью этого модуля.
Чанк имеет следующую структуру:
| Смещение | Длина | Содержание |
|---|---|---|
| 0 | 4 | Идентификатор чанка |
| 4 | 4 | Размер чанка в порядке байтов big-endian, без учета заголовка |
| 8 | n | Байты данных, где n – размер, указанный в предыдущем поле |
| 8 + n | 0 или 1 | Байт заполнения, необходимый, если n нечётное и используется выравнивание чанков |
Идентификатор представляет собой 4-байтовую строку, которая определяет тип чанка.
Поле размера (32-битное значение, закодированное в порядке байтов big-endian) указывает размер данных чанка, не включая 8-байтовый заголовок.
Обычно файл типа IFF состоит из одного или нескольких чанков. Предлагаемое использование класса Chunk, определённого здесь, заключается в создании экземпляра в начале каждого чанка и чтении из него до тех пор, пока он не закончится, после чего можно создать новый экземпляр. В конце файла создание нового экземпляра завершится исключением EOFError.
- class chunk.Chunk(file[, align, bigendian, inclheader])¶
Класс, представляющий чанк. Аргумент file должен быть файлоподобным объектом. Экземпляр этого класса разрешён. Единственный необходимый метод – read(). Если присутствуют методы seek() и tell() и не вызывают исключений, они также используются. Если эти методы присутствуют, но вызывают исключение, предполагается, что они не изменили объект. Если необязательный аргумент align равен True, считается, что чанки выровнены по границам 2 байт. Если align равен False, выравнивание не предполагается. Значение по умолчанию – True. Если необязательный аргумент bigendian равен False, размер чанка считается записанным в порядке little-endian. Это необходимо для аудиофайлов WAVE. Значение по умолчанию – True. Если необязательный аргумент inclheader равен True, размер, указанный в заголовке чанка, включает размер заголовка. Значение по умолчанию – False.
Объект Chunk поддерживает следующие методы:
- getname()¶
- Возвращает имя (идентификатор) чанка. Это первые 4 байта чанка.
- getsize()¶
- Возвращает размер чанка.
- close()¶
- Закрывает и пропускает до конца чанка. Это не закрывает нижележащий файл.
Остальные методы будут возбуждать IOError, если они вызваны после вызова метода close().
- isatty()¶
- Возвращает False.
- seek(pos[, whence])¶
- Устанавливает текущую позицию в чанке. Аргумент whence необязателен и по умолчанию равен 0 (абсолютное позиционирование в файле); другие значения – 1 (относительно текущей позиции) и 2 (относительно конца файла). Возвращаемого значения нет. Если нижележащий файл не поддерживает позиционирование, разрешён только переход вперёд.
- tell()¶
- Возвращает текущую позицию в чанке.
- read([size])¶
- Читает не более size байт из чанка (меньше, если чтение достигает конца чанка до получения size байт). Если аргумент size отрицателен или опущен, читает все данные до конца чанка. Байты возвращаются в виде строкового объекта. Пустая строка возвращается, если конец чанка встречен сразу.
Сноски
| [1] | “EA IFF 85” – стандарт для файлов обменного формата, Jerry Morrison, Electronic Arts, январь 1985. |