Документация Python неофициальный перевод
Содержание страницы

22.3. sunau – чтение и запись Sun AU файловsunau – Read and write Sun AU files

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


Модуль sunau предоставляет удобный интерфейс для звукового формата Sun AU. Обратите внимание, что этот модуль совместим по интерфейсу с модулями aifc и wave.

Аудиофайл состоит из заголовка, за которым следуют данные. Поля заголовка:

Поле Содержание
магическое слово Четыре байта .snd.
размер заголовка Размер заголовка в байтах, включая поле info.
размер данных Физический размер данных в байтах.
кодировка Указывает, как закодированы аудиосэмплы.
частота дискретизации Частота дискретизации.
количество каналов Количество каналов в сэмплах.
информация Строка ASCII с описанием аудиофайла (дополненная нулевыми байтами).

За исключением поля info, все поля заголовка имеют размер 4 байта. Все они являются 32-разрядными целыми числами без знака, закодированными в порядке байтов от старшего к младшему (big-endian).

Модуль sunau определяет следующие функции:

sunau.open(file, mode)

Если file – строка, открывается файл с этим именем; в противном случае он рассматривается как файлоподобный объект с произвольным доступом. mode может быть одним из следующих значений:

'r'
Режим только для чтения.
'w'
Режим только для записи.

Обратите внимание: этот режим не поддерживает файлы, открытые одновременно на чтение и запись.

Режим mode 'r' возвращает объект AU_read, а режим mode 'w' или 'wb' возвращает объект AU_write.

sunau.openfp(file, mode)

Синоним для open(), поддерживаемый для обратной совместимости.

Модуль sunau определяет следующее исключение:

exception sunau.Error

Исключение, возникающее, когда что-то невозможно из-за спецификаций Sun AU или недостатков реализации.

Модуль sunau определяет следующие элементы данных:

sunau.AUDIO_FILE_MAGIC

Целое число, с которого начинается любой корректный файл Sun AU, хранящееся в формате big-endian. Это строка .snd, интерпретируемая как целое число.

sunau.AUDIO_FILE_ENCODING_MULAW_8
sunau.AUDIO_FILE_ENCODING_LINEAR_8
sunau.AUDIO_FILE_ENCODING_LINEAR_16
sunau.AUDIO_FILE_ENCODING_LINEAR_24
sunau.AUDIO_FILE_ENCODING_LINEAR_32
sunau.AUDIO_FILE_ENCODING_ALAW_8

Значения поля encoding из заголовка AU, которые поддерживаются этим модулем.

sunau.AUDIO_FILE_ENCODING_FLOAT
sunau.AUDIO_FILE_ENCODING_DOUBLE
sunau.AUDIO_FILE_ENCODING_ADPCM_G721
sunau.AUDIO_FILE_ENCODING_ADPCM_G722
sunau.AUDIO_FILE_ENCODING_ADPCM_G723_3
sunau.AUDIO_FILE_ENCODING_ADPCM_G723_5

Дополнительные известные значения поля encoding из заголовка AU, которые не поддерживаются этим модулем.

22.3.1. Объекты AU_readAU_read Objects

Объекты AU_read, возвращаемые open() выше, имеют следующие методы:

AU_read.close()

Закрывает поток и делает экземпляр непригодным для использования. (Вызывается автоматически при удалении.)

AU_read.getnchannels()

Возвращает количество аудиоканалов (1 для моно, 2 для стерео).

AU_read.getsampwidth()

Возвращает ширину выборки в байтах.

AU_read.getframerate()

Возвращает частоту дискретизации.

AU_read.getnframes()

Возвращает количество аудиофреймов.

AU_read.getcomptype()

Возвращает тип сжатия. Поддерживаемые типы сжатия: 'ULAW', 'ALAW' и 'NONE'.

AU_read.getcompname()

Человекочитаемая версия getcomptype(). Поддерживаемые типы имеют соответствующие названия 'CCITT G.711 u-law', 'CCITT G.711 A-law' и 'not compressed'.

AU_read.getparams()

Возвращает namedtuple() (nchannels, sampwidth, framerate, nframes, comptype, compname), эквивалентный результату методов get*().

AU_read.readframes(n)

Читает и возвращает не более n кадров аудио в виде объекта bytes. Данные будут возвращены в линейном формате. Если исходные данные в формате u-LAW, они будут преобразованы.

AU_read.rewind()

Перемещает указатель файла в начало аудиопотока.

Следующие два метода определяют термин «позиция», совместимый между ними, а в остальном зависящий от реализации.

AU_read.setpos(pos)

Устанавливает указатель файла на указанную позицию. Для pos следует использовать только значения, возвращаемые tell().

AU_read.tell()

Возвращает текущую позицию указателя файла. Обратите внимание, что возвращаемое значение никак не связано с фактической позицией в файле.

Следующие две функции определены для совместимости с aifc и не делают ничего интересного.

AU_read.getmarkers()

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

AU_read.getmark(id)

Возбуждает исключение.

22.3.2. Объекты AU_writeAU_write Objects

Объекты AU_write, возвращаемые open() выше, имеют следующие методы:

AU_write.setnchannels(n)

Устанавливает количество каналов.

AU_write.setsampwidth(n)

Устанавливает ширину сэмпла (в байтах).

Изменено в версии 3.4: Добавлена поддержка 24-битных сэмплов.

AU_write.setframerate(n)

Устанавливает частоту кадров.

AU_write.setnframes(n)

Устанавливает количество кадров. Это значение можно изменить позже, когда будет записано больше кадров .

AU_write.setcomptype(type, name)

Устанавливает тип сжатия и описание. На выходе поддерживаются только 'NONE' и 'ULAW' .

AU_write.setparams(tuple)

tuple должен быть (nchannels, sampwidth, framerate, nframes, comptype, compname), со значениями, допустимыми для методов set*(). Устанавливает все параметры.

AU_write.tell()

Возвращает текущую позицию в файле с теми же оговорками, что и для методов AU_read.tell() и AU_read.setpos().

AU_write.writeframesraw(data)

Записывает аудиокадры без коррекции nframes.

Изменено в версии 3.4: Теперь принимается любой байтоподобный объект.

AU_write.writeframes(data)

Записывает аудиокадры и проверяет, что nframes корректен.

Изменено в версии 3.4: Теперь принимается любой байтоподобный объект.

AU_write.close()

Проверяет, что nframes корректен, и закрывает файл.

Этот метод вызывается при удалении.

Обратите внимание, что установка любых параметров после вызова writeframes() или writeframesraw() недопустима.