Содержание страницы
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 определяет следующее исключение:
- 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_read¶AU_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)¶
Возбуждает исключение.
22.3.2. Объекты AU_write¶AU_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() недопустимо.