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

---

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

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

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

#### `[wave.open]wave.open(file[, mode])`

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

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

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

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

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

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

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

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

Синоним для

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

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

#### `[wave.Error]exception wave.Error`

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

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

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

#### `[wave.Wave_read.close]Wave_read.close()`

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

#### `[wave.Wave_read.getnchannels]Wave_read.getnchannels()`

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

`1`

для моно,

`2`

для стерео).

#### `[wave.Wave_read.getsampwidth]Wave_read.getsampwidth()`

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

#### `[wave.Wave_read.getframerate]Wave_read.getframerate()`

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

#### `[wave.Wave_read.getnframes]Wave_read.getnframes()`

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

#### `[wave.Wave_read.getcomptype]Wave_read.getcomptype()`

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

`'NONE'`

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

#### `[wave.Wave_read.getcompname]Wave_read.getcompname()`

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

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

. Обычно

`'not compressed'`

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

`'NONE'`

.

#### `[wave.Wave_read.getparams]Wave_read.getparams()`

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

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

`get*()`

.

#### `[wave.Wave_read.readframes]Wave_read.readframes(n)`

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

*n*

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

#### `[wave.Wave_read.rewind]Wave_read.rewind()`

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

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

#### `[wave.Wave_read.getmarkers]Wave_read.getmarkers()`

Возвращает

`None`

.

#### `[wave.Wave_read.getmark]Wave_read.getmark(id)`

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

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

#### `[wave.Wave_read.setpos]Wave_read.setpos(pos)`

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

#### `[wave.Wave_read.tell]Wave_read.tell()`

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

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

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

#### `[wave.Wave_write.close]Wave_write.close()`

Убедиться, что

*nframes*

указано верно, и закрыть файл. Этот метод вызывается при удалении объекта.

#### `[wave.Wave_write.setnchannels]Wave_write.setnchannels(n)`

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

#### `[wave.Wave_write.setsampwidth]Wave_write.setsampwidth(n)`

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

*n*

байт.

#### `[wave.Wave_write.setframerate]Wave_write.setframerate(n)`

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

*n*

.

#### `[wave.Wave_write.setnframes]Wave_write.setnframes(n)`

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

*n*

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

#### `[wave.Wave_write.setcomptype]Wave_write.setcomptype(type, name)`

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

`NONE`

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

#### `[wave.Wave_write.setparams]Wave_write.setparams(tuple)`

Кортеж

*tuple*

должен быть

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

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

`set*()`

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

#### `[wave.Wave_write.tell]Wave_write.tell()`

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

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

и

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

.

#### `[wave.Wave_write.writeframesraw]Wave_write.writeframesraw(data)`

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

*nframes*

.

#### `[wave.Wave_write.writeframes]Wave_write.writeframes(data)`

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

*nframes*

корректен.

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