wave — чтение и запись WAV-файлов
Исходный код: Lib/wave.py
Модуль wave предоставляет удобный интерфейс для работы с форматом файлов Waveform Audio «WAVE» (или «WAV»). Поддерживаются только WAV-файлы с несжатым кодированием PCM.
Изменено в версии 3.12: Добавлена поддержка заголовков WAVE_FORMAT_EXTENSIBLE при условии, что расширенный формат — KSDATAFORMAT_SUBTYPE_PCM.
Модуль wave определяет следующую функцию и исключение:
-
wave.open(file, mode=None) -
Если file — строка, файл с таким именем открывается; в противном случае file рассматривается как файловый объект. Параметр mode может принимать значения:
-
'rb' -
Режим только для чтения.
-
'wb' -
Режим только для записи.
Обратите внимание: режим чтения и записи WAV-файлов не поддерживается.
При значении mode
'rb'возвращается объектWave_read, а при значении mode'wb'— объектWave_write. Если mode не указан, а в качестве file передан файловый объект, для mode по умолчанию используетсяfile.mode.Если передан файловый объект, объект wave не закроет его при вызове метода
close(); закрыть файловый объект должен вызывающий код.Функцию
open()можно использовать в инструкцииwith. После завершения блокаwithвызывается методWave_read.close()илиWave_write.close().Изменено в версии 3.4: Добавлена поддержка файлов, не поддерживающих перемещение по ним.
-
-
exception wave.Error -
Ошибка, возникающая, когда выполнить операцию невозможно из-за нарушения спецификации WAV или недостатка реализации.
Объекты Wave_read
-
class wave.Wave_read -
Чтение WAV-файла.
Объекты Wave_read, возвращаемые функцией
open(), имеют следующие методы:-
close() -
Закрыть поток, если он был открыт функцией
wave, и сделать экземпляр непригодным для использования. Этот метод вызывается автоматически при удалении объекта сборщиком мусора.
-
getnchannels() -
Возвращает количество аудиоканалов (
1для моно,2для стерео).
-
getsampwidth() -
Возвращает ширину отсчёта в байтах.
-
getframerate() -
Возвращает частоту дискретизации.
-
getnframes() -
Возвращает количество аудиокадров.
-
getcomptype() -
Возвращает тип сжатия (поддерживается только
'NONE').
-
getcompname() -
Удобочитаемое представление типа сжатия, возвращаемого методом
getcomptype(). Обычно'not compressed'соответствует'NONE'.
-
getparams() -
Возвращает
(nchannels, sampwidth, framerate, nframes, comptype, compname)типаnamedtuple(), эквивалентный результату вызова методовget*().
-
readframes(n) -
Считывает и возвращает не более n аудиокадров в виде объекта
bytes.
-
rewind() -
Перемещает указатель файла в начало аудиопотока.
Следующие два метода определены для совместимости со старым модулем
aifcи не выполняют ничего полезного.-
getmarkers() -
Возвращает
None.Устарело с версии 3.13, будет удалено в версии 3.15: Метод существовал только для совместимости с модулем
aifc, удалённым в Python 3.13.
-
getmark(id) -
Вызывает ошибку.
Устарело с версии 3.13, будет удалено в версии 3.15: Метод существовал только для совместимости с модулем
aifc, удалённым в Python 3.13.
Следующие два метода задают совместимое между ними понятие «позиции», реализация которого в остальном зависит от реализации.
-
setpos(pos) -
Перемещает указатель файла в указанную позицию.
-
tell() -
Возвращает текущую позицию указателя файла.
-
Объекты Wave_write
-
class wave.Wave_write -
Запись WAV-файла.
Объекты Wave_write возвращаются функцией
open().Для выходных потоков, поддерживающих перемещение по ним, заголовок
waveавтоматически обновляется в соответствии с фактически записанным количеством кадров. Для потоков, не поддерживающих перемещение по ним, значение nframes должно быть точным к моменту записи первых данных кадра. Точного значения nframes можно добиться, вызвавsetnframes()илиsetparams()с количеством кадров, которое будет записано до вызоваclose(), а затем используяwriteframesraw()для записи данных кадров; либо вызвавwriteframes()со всеми данными кадров, которые нужно записать. В последнем случаеwriteframes()вычислит количество кадров в данных и установит соответствующее значение nframes перед записью данных кадров.Изменено в версии 3.4: Добавлена поддержка файлов, не поддерживающих перемещение по ним.
Объекты Wave_write имеют следующие методы:
-
close() -
Проверяет правильность значения nframes и закрывает файл, если он был открыт функцией
wave. Этот метод вызывается при удалении объекта сборщиком мусора. Если выходной поток не поддерживает перемещение по нему и значение nframes не совпадает с фактически записанным количеством кадров, будет вызвано исключение.
-
setnchannels(n) -
Задаёт количество каналов.
-
getnchannels() -
Возвращает количество каналов.
-
setsampwidth(n) -
Задаёт ширину отсчёта в n байтах.
-
getsampwidth() -
Возвращает ширину отсчёта в байтах.
-
setframerate(n) -
Задаёт частоту кадров n.
Изменено в версии 3.2: Не целочисленное значение, переданное этому методу, округляется до ближайшего целого.
-
getframerate() -
Возвращает частоту кадров.
-
setnframes(n) -
Задаёт количество кадров равным n. Позже оно будет изменено, если фактически записанное количество кадров окажется другим (эта попытка обновления вызовет ошибку, если выходной поток не поддерживает перемещение по нему).
-
getnframes() -
Возвращает количество аудиокадров, записанных на данный момент.
-
setcomptype(type, name) -
Задаёт тип и описание сжатия. В настоящее время поддерживается только тип сжатия
NONE, то есть без сжатия.
-
getcomptype() -
Возвращает тип сжатия (
'NONE').
-
getcompname() -
Возвращает удобочитаемое название типа сжатия.
-
setparams(tuple) -
Кортеж должен иметь формат
(nchannels, sampwidth, framerate, nframes, comptype, compname), а его значения должны быть допустимы для методовset*(). Задаёт все параметры.
-
getparams() -
Возвращает
(nchannels, sampwidth, framerate, nframes, comptype, compname)типаnamedtuple(), содержащий текущие параметры вывода.
-
tell() -
Возвращает текущую позицию в файле с той же оговоркой, что и для методов
Wave_read.tell()иWave_read.setpos().
-
writeframesraw(data) -
Записывает аудиокадры, не корректируя значение nframes.
Изменено в версии 3.4: Теперь принимается любой объект, подобный bytes.
-
writeframes(data) -
Записывает аудиокадры и проверяет правильность значения nframes. Если выходной поток не поддерживает перемещение по нему, а общее количество кадров, записанных после передачи data, не совпадает с ранее заданным значением nframes, будет вызвана ошибка.
Изменено в версии 3.4: Теперь принимается любой объект, подобный bytes.
Обратите внимание: после вызова
writeframes()илиwriteframesraw()задавать параметры нельзя; любая попытка сделать это вызоветwave.Error.
-
© 2001 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.14/library/wave.html