wave
— Чтение и запись WAV-файлов¶
Источник: Lib/wave.py
Модуль wave
предоставляет удобный интерфейс для работы с файлами формата Waveform Audio «WAVE» (или «WAV»). Поддерживаются только несжатые волновые файлы с кодировкой PCM.
Изменено в версии 3.12: Добавлена поддержка заголовков WAVE_FORMAT_EXTENSIBLE
при условии, что расширенный формат равен KSDATAFORMAT_SUBTYPE_PCM
.
Модуль wave
определяет следующую функцию и исключение:
- wave.open(file, mode=None)¶
Если 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()¶
Возвращает значение
namedtuple()
(nchannels, sampwidth, framerate, nframes, comptype, compname)
, эквивалентный выводу методовget*()
.
- 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)¶
Установите количество каналов.
- setsampwidth(n)¶
Установите ширину выборки в n байт.
- setframerate(n)¶
Установите частоту кадров на n.
Изменено в версии 3.2: Неинтегральные значения, вводимые в этот метод, округляются до ближайшего целого числа.
- setnframes(n)¶
Установите количество кадров равным n. Это значение будет изменено позже, если количество реально записанных кадров окажется другим (попытка обновления приведет к ошибке, если выходной поток не является искомым).
- setcomptype(type, name)¶
Задайте тип и описание сжатия. В настоящее время поддерживается только тип сжатия
NONE
, что означает отсутствие сжатия.
- setparams(tuple)¶
Кортеж* должен быть
(nchannels, sampwidth, framerate, nframes, comptype, compname)
, со значениями, действительными для методовset*()
. Устанавливает все параметры.
- tell()¶
Возвращает текущую позицию в файле, с теми же оговорками, что и для методов
Wave_read.tell()
иWave_read.setpos()
.
- writeframesraw(data)¶
Запись аудиокадров без коррекции nframes.
Изменено в версии 3.4: Теперь принимаются любые bytes-like object.
- writeframes(data)¶
Записывает аудиокадры и проверяет правильность значения nframes. Вызовет ошибку, если выходной поток не является seekable и общее количество кадров, которые были записаны после записи data, не соответствует ранее установленному значению nframes.
Изменено в версии 3.4: Теперь принимаются любые bytes-like object.
Обратите внимание, что после вызова
writeframes()
илиwriteframesraw()
устанавливать какие-либо параметры недопустимо, и любая попытка сделать это приведет к появлению сообщенияwave.Error
.