> **Источник:** https://python-all.ru/3.8/library/sunau.html
>
> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.

---

# [`sunau`](https://python-all.ru/3.8/library/sunau.html#module-sunau) – чтение и запись файлов Sun AU

**Исходный код:** [Lib/sunau.py](https://python-all.ru/src/3.8/Lib/sunau.py)

---

Модуль [`sunau`](https://python-all.ru/3.8/library/sunau.html#module-sunau) предоставляет удобный интерфейс для звукового формата Sun AU. Обратите внимание, что этот модуль совместим по интерфейсу с модулями [`aifc`](https://python-all.ru/3.8/library/aifc.html#module-aifc) и [`wave`](https://python-all.ru/3.8/library/wave.html#module-wave).

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

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

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

Модуль [`sunau`](https://python-all.ru/3.8/library/sunau.html#module-sunau) определяет следующие функции:

#### `sunau.open(file, mode)`

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

**`'r'`**

Режим только для чтения.

**`'w'`**

Режим только для записи.

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

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

#### `sunau.openfp(file, mode)`

Синоним для [`open()`](https://python-all.ru/3.8/library/sunau.html#sunau.open), поддерживаемый для обратной совместимости.

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

Модуль [`sunau`](https://python-all.ru/3.8/library/sunau.html#module-sunau) определяет следующее исключение:

#### `exception sunau.Error`

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

Модуль [`sunau`](https://python-all.ru/3.8/library/sunau.html#module-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, которые не поддерживаются этим модулем.

## Объекты AU\_read

Объекты AU\_read, возвращаемые [`open()`](https://python-all.ru/3.8/library/sunau.html#sunau.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()`](https://python-all.ru/3.8/library/sunau.html#sunau.AU_read.getcomptype). Поддерживаемые типы имеют соответствующие названия `'CCITT G.711 u-law'`, `'CCITT G.711 A-law'` и `'not compressed'`.

#### `AU_read.getparams()`

Возвращает [`namedtuple()`](https://python-all.ru/3.8/library/collections.html#collections.namedtuple) `(nchannels, sampwidth, framerate, nframes, comptype, compname)`, эквивалентный результату методов `get*()`.

#### `AU_read.readframes(n)`

Читает и возвращает не более *n* кадров аудио в виде объекта [`bytes`](https://python-all.ru/3.8/library/stdtypes.html#bytes). Данные будут возвращены в линейном формате. Если исходные данные в формате u-LAW, они будут преобразованы.

#### `AU_read.rewind()`

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

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

#### `AU_read.setpos(pos)`

Устанавливает указатель файла на указанную позицию. Для *pos* следует использовать только значения, возвращаемые [`tell()`](https://python-all.ru/3.8/library/sunau.html#sunau.AU_read.tell).

#### `AU_read.tell()`

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

Следующие две функции определены для совместимости с [`aifc`](https://python-all.ru/3.8/library/aifc.html#module-aifc) и не делают ничего интересного.

#### `AU_read.getmarkers()`

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

#### `AU_read.getmark(id)`

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

## Объекты AU\_write

Объекты AU\_write, возвращаемые [`open()`](https://python-all.ru/3.8/library/sunau.html#sunau.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()`](https://python-all.ru/3.8/library/sunau.html#sunau.AU_read.tell) и [`AU_read.setpos()`](https://python-all.ru/3.8/library/sunau.html#sunau.AU_read.setpos).

#### `AU_write.writeframesraw(data)`

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

Изменено в версии 3.4: Теперь принимается любой [байтоподобный объект](https://python-all.ru/3.8/glossary.html#term-bytes-like-object).

#### `AU_write.writeframes(data)`

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

Изменено в версии 3.4: Теперь принимается любой [байтоподобный объект](https://python-all.ru/3.8/glossary.html#term-bytes-like-object).

#### `AU_write.close()`

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

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

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