Документация Python неофициальный перевод

wave.md

166 строк · 12.1 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/3.4/library/wave.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 22.4. [`wave`](https://python-all.ru/3.4/library/wave.html#module-wave) – Чтение и запись WAV-файлов89**Исходный код:** [Lib/wave.py](https://python-all.ru/src/3.4/Lib/wave.py)1011---1213Модуль [`wave`](https://python-all.ru/3.4/library/wave.html#module-wave) предоставляет удобный интерфейс для работы со звуковым форматом WAV. Он не поддерживает сжатие/распаковку, но поддерживает моно/стерео.1415Модуль [`wave`](https://python-all.ru/3.4/library/wave.html#module-wave) определяет следующие функцию и исключение:1617#### `wave.open(file, mode=None)`1819Если *file* – строка, открывается файл с таким именем, в противном случае он рассматривается как файлоподобный объект. Параметр *mode* может принимать следующие значения:2021**`'rb'`**2223Режим только для чтения.2425**`'wb'`**2627Режим только для записи.2829Обратите внимание: не поддерживаются WAV-файлы, открытые одновременно на чтение и запись.3031Режим *mode* со значением `'rb'` возвращает объект `Wave_read`, а режим *mode* со значением `'wb'` возвращает объект `Wave_write`. Если *mode* опущен, а в качестве *file* передан файлоподобный объект, то по умолчанию для *mode* используется `file.mode`.3233Если передаётся файлоподобный объект, волновой объект не закроет его при вызове метода `close()`; вызывающая сторона отвечает за закрытие файлового объекта.3435Функция [`open()`](https://python-all.ru/3.4/library/wave.html#wave.open) может использоваться в операторе [`with`](https://python-all.ru/3.4/reference/compound_stmts.html#with). Когда блок [`with`](https://python-all.ru/3.4/reference/compound_stmts.html#with) завершается, вызывается метод [`Wave_read.close()`](https://python-all.ru/3.4/library/wave.html#wave.Wave_read.close) или [`Wave_write.close()`](https://python-all.ru/3.4/library/wave.html#wave.Wave_write.close).3637Изменено в версии 3.4: Добавлена поддержка файлов без произвольного доступа.3839#### `wave.openfp(file, mode)`4041Синоним для [`open()`](https://python-all.ru/3.4/library/wave.html#wave.open), сохранён для обратной совместимости.4243#### `exception wave.Error`4445Исключение, возникающее, когда какое-либо действие невозможно, поскольку оно нарушает спецификацию WAV или сталкивается с недостатком реализации.4647## 22.4.1. Объекты Wave\_read4849Объекты Wave\_read, возвращаемые функцией [`open()`](https://python-all.ru/3.4/library/wave.html#wave.open), имеют следующие методы:5051#### `Wave_read.close()`5253Закрывает поток, если он был открыт модулем [`wave`](https://python-all.ru/3.4/library/wave.html#module-wave), и делает экземпляр непригодным для использования. Этот метод вызывается автоматически при сборке объекта.5455#### `Wave_read.getnchannels()`5657Возвращает количество аудиоканалов (`1` для моно, `2` для стерео).5859#### `Wave_read.getsampwidth()`6061Возвращает ширину выборки в байтах.6263#### `Wave_read.getframerate()`6465Возвращает частоту дискретизации.6667#### `Wave_read.getnframes()`6869Возвращает количество аудиофреймов.7071#### `Wave_read.getcomptype()`7273Возвращает тип сжатия (`'NONE'` – единственный поддерживаемый тип).7475#### `Wave_read.getcompname()`7677Человекочитаемая версия [`getcomptype()`](https://python-all.ru/3.4/library/wave.html#wave.Wave_read.getcomptype). Обычно `'not compressed'` соответствует `'NONE'`.7879#### `Wave_read.getparams()`8081Возвращает [`namedtuple()`](https://python-all.ru/3.4/library/collections.html#collections.namedtuple) `(nchannels, sampwidth, framerate, nframes, comptype, compname)`, что эквивалентно результату методов `get*()`.8283#### `Wave_read.readframes(n)`8485Читает и возвращает не более *n* фреймов аудио в виде строки байтов.8687#### `Wave_read.rewind()`8889Перемещает указатель файла в начало аудиопотока.9091Следующие два метода определены для совместимости с модулем [`aifc`](https://python-all.ru/3.4/library/aifc.html#module-aifc) и не делают ничего интересного.9293#### `Wave_read.getmarkers()`9495Возвращает `None`.9697#### `Wave_read.getmark(id)`9899Возбуждает исключение.100101Следующие два метода определяют термин «позиция», совместимый между ними, а в остальном зависящий от реализации.102103#### `Wave_read.setpos(pos)`104105Устанавливает указатель файла на указанную позицию.106107#### `Wave_read.tell()`108109Возвращает текущую позицию указателя файла.110111## 22.4.2. Объекты Wave\_write112113Для выходных потоков с возможностью позиционирования заголовок `wave` будет автоматически обновлён в соответствии с количеством фактически записанных фреймов. Для потоков без позиционирования значение *nframes* должно быть точным на момент записи первых данных фрейма. Точное значение *nframes* можно получить либо вызвав [`setnframes()`](https://python-all.ru/3.4/library/wave.html#wave.Wave_write.setnframes) или [`setparams()`](https://python-all.ru/3.4/library/wave.html#wave.Wave_write.setparams) с указанием количества фреймов, которые будут записаны до вызова [`close()`](https://python-all.ru/3.4/library/wave.html#wave.Wave_write.close), и затем использовать [`writeframesraw()`](https://python-all.ru/3.4/library/wave.html#wave.Wave_write.writeframesraw) для записи данных фрейма, либо вызвав [`writeframes()`](https://python-all.ru/3.4/library/wave.html#wave.Wave_write.writeframes) со всеми данными фрейма, которые нужно записать. Во втором случае [`writeframes()`](https://python-all.ru/3.4/library/wave.html#wave.Wave_write.writeframes) сам рассчитает количество фреймов в данных и соответствующим образом установит *nframes* перед записью данных фрейма.114115Объекты Wave\_write, возвращаемые функцией [`open()`](https://python-all.ru/3.4/library/wave.html#wave.open), имеют следующие методы:116117Изменено в версии 3.4: Добавлена поддержка файлов без произвольного доступа.118119#### `Wave_write.close()`120121Убедитесь, что *nframes* корректен, и закройте файл, если он был открыт через [`wave`](https://python-all.ru/3.4/library/wave.html#module-wave). Этот метод вызывается при сборке объекта. Он вызовет исключение, если выходной поток не поддерживает позиционирование и *nframes* не соответствует количеству фактически записанных фреймов.122123#### `Wave_write.setnchannels(n)`124125Устанавливает количество каналов.126127#### `Wave_write.setsampwidth(n)`128129Устанавливает ширину семпла равной *n* байт.130131#### `Wave_write.setframerate(n)`132133Устанавливает частоту дискретизации равной *n*.134135Изменено в версии 3.2: Нецелочисленный входной аргумент этого метода округляется до ближайшего целого.136137#### `Wave_write.setnframes(n)`138139Устанавливает количество кадров равным *n*. Впоследствии это значение может измениться, если фактически записанное количество кадров будет отличаться (при попытке обновить значение будет вызвана ошибка, если выходной поток не поддерживает произвольный доступ).140141#### `Wave_write.setcomptype(type, name)`142143Устанавливает тип сжатия и описание. На данный момент поддерживается только тип сжатия `NONE`, что означает отсутствие сжатия.144145#### `Wave_write.setparams(tuple)`146147Кортеж *tuple* должен быть `(nchannels, sampwidth, framerate, nframes, comptype, compname)`, с допустимыми значениями для методов `set*()`. Устанавливает все параметры.148149#### `Wave_write.tell()`150151Возвращает текущую позицию в файле с теми же оговорками, что и методы [`Wave_read.tell()`](https://python-all.ru/3.4/library/wave.html#wave.Wave_read.tell) и [`Wave_read.setpos()`](https://python-all.ru/3.4/library/wave.html#wave.Wave_read.setpos).152153#### `Wave_write.writeframesraw(data)`154155Записывает аудиокадры без коррекции *nframes*.156157Изменено в версии 3.4: Теперь принимается любой [*байтоподобный объект*](https://python-all.ru/3.4/glossary.html#term-bytes-like-object).158159#### `Wave_write.writeframes(data)`160161Записывает аудиокадры и проверяет, что *nframes* корректен. Будет вызвана ошибка, если выходной поток не поддерживает произвольный доступ, а общее количество кадров, записанных после записи *data*, не совпадает с ранее установленным значением для *nframes*.162163Изменено в версии 3.4: Теперь принимается любой [*байтоподобный объект*](https://python-all.ru/3.4/glossary.html#term-bytes-like-object).164165Обратите внимание, что задавать какие-либо параметры после вызова `writeframes()` или `writeframesraw()` недопустимо, и любая попытка сделать это вызовет [`wave.Error`](https://python-all.ru/3.4/library/wave.html#wave.Error).166