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

---

# 21.3. `sunau` – Чтение и запись файлов Sun AU

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

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

.

#### `AU_read.tell()`

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

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

#### `AU_read.getmarkers()`

Возвращает

`None`

.

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

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

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

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

и

[`AU_read.setpos()`](https://python-all.ru/3.1/library/sunau.html#sunau.AU_read.setpos)

.

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

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

*nframes*

.

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

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

*nframes*

корректен.

#### `AU_write.close()`

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

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

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