chunk — Чтение IFF чанков данных

Исходный код: Lib/chunk.py


Модуль предоставляет интерфейс для чтения файлов, использующих чанки EA IFF 85. [1] этот формат применяется, по крайней мере в Audio Interchange File Format (AIFF/AIFF-C) и Real Media File Format (RMFF). Формат аудиофайла WAVE тесно связан и может также считываться с помощью этого модуля.

Блок содержит следующую структуру:

Смещение Длина Содержание
0 4 ID чанка
4 4 Размер чанка в big-endian порядке байтов, не содержащего заголовок
8 n Байты данных, где n is the размер переданного в предыдущем поле
8 + n 0 или 1 Набивка байта необходима, если n нечётно и используется выравнивание чанка

Идентификатор представляет собой 4-байтовой строкой, которая идентифицирует тип чанка.

Поле размера (32-битное значение, кодировка с использованием порядка байт big-endian) даёт размер данных чанка, не включая 8-байтовый заголовок.

Обычно файл типа IFF состоит из одного или нескольких чанков. Предлагаемое использование Chunk класс, определенного здесь, заключается в создании экземпляра сущности в начале каждого чанка и считывании из сущности до тех пор, пока он не достигнет конца, после чего может быть создан новый экземпляр сущности. При достижении конца файла создание новой сущности завершится ошибкой с поднятием исключения EOFError .

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

Класс, представляющий чанк. Предполагается, что аргумент file является файловым объектом. Специально допускается сущность этого класса. Единственный необходимый метод - read(). Если методы seek() и tell() присутствуют и не вызывают исключения, они тоже используются. Если эти методы присутствуют и создают исключение, ожидается, что они не изменили объект. Если необязательный аргумент align имеет значение true, предполагается, что блоки выровнены по 2-байтовым границам. Если align имеет значение false, выравнивание не предполагается. Значение по умолчанию - true. Если bigendian необязательного аргумента имеет значение false, предполагается, что размер чанка находится в порядке little-endian. Это необходимо для аудиофайлов WAVE. Значение по умолчанию - true. Если необязательный аргумент inclheader имеет значение true, размер, заданный в заголовке чанка, включает размер заголовка. Значение по умолчанию - false.

Объект Chunk поддерживает следующие методы:

getname()

Возвращает имя (ID) чанка. Это первые 4 байта чанка.

getsize()

Возвращает размер чанка.

close()

Закрыть и пропустить до конца чанки. Этот файл не закрывается.

Оставшиеся методы поднимут OSError в случае вызова после вызова close() метода. До Python 3.3 они используемый повышать IOError, теперь алиас OSError.

isatty()

Возвращает False.

seek(pos, whence=0)

Установить текущее положение чанка. Аргумент whence необязателен и по умолчанию имеет значение 0 (абсолютное позиционирование файла); другими значениями являются 1 (поиск относительно текущего положения) и 2 (поиск относительно конца файла). Не возвращает value. Если базовый файл не разрешает поиск, разрешается только поиск вперед.

tell()

Возвращает текущее положение в чанке.

read(size=-1)

Считывание не более size байт из чанка (меньше, если считывание достигает конца чанка до получения size байт). Если аргумент size отрицательный или опущен, считывайте все данные до конца чанка. Пустой байтовый объект находится возвращенныйwhen немедленном обнаружении конца чанка.

skip()

Перейти к концу чанка. Все дальнейшие призывы к read() чанки будут возвращает b''. Если вы не интересуетесь содержимым чанка, этот метод следует вызвать так, чтобы файл указывал на начало следующего чанка.

Сноски

[1]«EA IFF 85» Standard for Interchange Format Files, Jerry Morrison, Electronic Arts, January 1985.