sunau — Чтение и запись Sun AU файлов


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

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

Поле Содержание
magic word Четыре байта .snd.
header size Размер заголовка, включая информацию, в байтах.
data size Физический размер данных, в байтах.
encoding Указывает способ кодированный аудиоотсчетов.
sample rate Частота выборки.
# of channels Количество каналов в выборках.
info ASCII строка с описанием аудиофайла (дополненного нулевыми байтами).

За исключением информационного поля, у всех полей заголовка размер 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(), поддерживаемый для обратной совместимости.

Устарело с версии 3.7, будет удалено в 3.9 версии..

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

exception sunau.Error

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

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

sunau.AUDIO_FILE_MAGIC

Целое число, с которого начинается каждый действительный файл Sun AU, хранящийся в форме с обратным порядком байтов. Это строка .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

Значения поля кодировки из заголовка 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, но которые не поддерживаются данным модулем.

Объекты AU_read

Объекты 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)

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

AU_read.tell()

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

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

AU_read.getmarkers()

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

AU_read.getmark(id)

Вызывает ошибку.

Объекты AU_write

Объекты 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().