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

---

# 21.4. `wave` – Чтение и запись WAV-файлов

Модуль `wave` предоставляет удобный интерфейс для работы со звуковым форматом WAV. Он не поддерживает сжатие/распаковку, но поддерживает моно и стерео.

Модуль `wave` определяет следующие функцию и исключение:

#### `wave.open(file, mode=None)`

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

**`'r'`, `'rb'`**

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

**`'w'`, `'wb'`**

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

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

Режим *mode* со значением `'r'` или `'rb'` возвращает объект `Wave_read`, а\\nрежим *mode* со значением `'w'` или `'wb'` возвращает объект `Wave_write`. Если\\n*mode* не указан, а в качестве *file* передан файлоподобный объект, то\\n`file.mode` используется как значение по умолчанию для *mode* (флаг `'b'` всё равно добавляется при\\nнеобходимости).

Если передаётся файлоподобный объект, волновой объект не закроет его при вызове метода `close()`; вызывающая сторона отвечает за закрытие файлового объекта.

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

Синоним для

[`open()`](https://python-all.ru/3.1/library/wave.html#wave.open)

, сохранён для обратной совместимости.

#### `exception wave.Error`

Исключение, возникающее, когда какое-либо действие невозможно, поскольку оно нарушает спецификацию WAV или сталкивается с недостатком реализации.

## 21.4.1. Объекты Wave\_read

Объекты Wave\_read, возвращаемые функцией [`open()`](https://python-all.ru/3.1/library/wave.html#wave.open), имеют следующие методы:

#### `Wave_read.close()`

Закрывает поток, если он был открыт с помощью

`wave`

, и делает экземпляр непригодным для использования. Этот метод вызывается автоматически при сборке объекта.

#### `Wave_read.getnchannels()`

Возвращает количество аудиоканалов (

`1`

для моно,

`2`

для стерео).

#### `Wave_read.getsampwidth()`

Возвращает ширину выборки в байтах.

#### `Wave_read.getframerate()`

Возвращает частоту дискретизации.

#### `Wave_read.getnframes()`

Возвращает количество аудиофреймов.

#### `Wave_read.getcomptype()`

Возвращает тип сжатия (

`'NONE'`

– единственный поддерживаемый тип).

#### `Wave_read.getcompname()`

Человекочитаемая версия

[`getcomptype()`](https://python-all.ru/3.1/library/wave.html#wave.Wave_read.getcomptype)

. Обычно

`'not compressed'`

соответствует

`'NONE'`

.

#### `Wave_read.getparams()`

`(nchannels, sampwidth, framerate, nframes, comptype, compname)`

, эквивалентен результату методов

`get*()`

.

#### `Wave_read.readframes(n)`

Читает и возвращает не более

*n*

фреймов аудио в виде строки байтов.

#### `Wave_read.rewind()`

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

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

#### `Wave_read.getmarkers()`

Возвращает

`None`

.

#### `Wave_read.getmark(id)`

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

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

#### `Wave_read.setpos(pos)`

Устанавливает указатель файла на указанную позицию.

#### `Wave_read.tell()`

Возвращает текущую позицию указателя файла.

## 21.4.2. Объекты Wave\_write

Объекты Wave\_write, возвращаемые функцией [`open()`](https://python-all.ru/3.1/library/wave.html#wave.open), имеют следующие методы:

#### `Wave_write.close()`

Убеждается, что

*nframes*

указано верно, и закрывает файл, если он был открыт модулем

`wave`

. Этот метод вызывается при сборке объекта.

#### `Wave_write.setnchannels(n)`

Устанавливает количество каналов.

#### `Wave_write.setsampwidth(n)`

Устанавливает ширину семпла равной

*n*

байт.

#### `Wave_write.setframerate(n)`

Устанавливает частоту дискретизации равной

*n*

.

#### `Wave_write.setnframes(n)`

Устанавливает количество фреймов в

*n*

. Это значение будет изменено позже, если будет записано больше фреймов.

#### `Wave_write.setcomptype(type, name)`

Устанавливает тип сжатия и описание. На данный момент поддерживается только тип сжатия

`NONE`

, что означает отсутствие сжатия.

#### `Wave_write.setparams(tuple)`

Кортеж

*tuple*

должен быть

`(nchannels, sampwidth, framerate, nframes, comptype, compname)`

, с допустимыми значениями для методов

`set*()`

. Устанавливает все параметры.

#### `Wave_write.tell()`

Возвращает текущую позицию в файле с теми же оговорками, что и методы

[`Wave_read.tell()`](https://python-all.ru/3.1/library/wave.html#wave.Wave_read.tell)

и

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

.

#### `Wave_write.writeframesraw(data)`

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

*nframes*

.

#### `Wave_write.writeframes(data)`

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

*nframes*

корректен.

Обратите внимание, что задавать какие-либо параметры после вызова `writeframes()` или `writeframesraw()` недопустимо, и любая попытка сделать это вызовет [`wave.Error`](https://python-all.ru/3.1/library/wave.html#wave.Error).
