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

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

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

21.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()
(nchannels, sampwidth, framerate, nframes, comptype, compname), эквивалентен результату методов get*().
AU_read.readframes(n)
Читает и возвращает не более n кадров аудио в виде строки байтов. Данные возвращаются в линейном формате. Если исходные данные в формате u-LAW, они будут преобразованы.
AU_read.rewind()
Перемещает указатель файла в начало аудиопотока.

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

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

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

AU_read.getmarkers()
Возвращает None.
AU_read.getmark(id)
Возбуждает исключение.

21.3.2. Объекты AU_writeAU_write Objects

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

AU_write.setnchannels(n)
Устанавливает количество каналов.
AU_write.setsampwidth(n)
Устанавливает ширину сэмпла (в байтах).
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.
AU_write.writeframes(data)
Записывает аудиокадры и проверяет, что nframes корректен.
AU_write.close()

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

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

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