wave
— Чтение и запись WAV-файлов¶
Исходный код: Lib/wave.py
Модуль wave
предоставляет удобный интерфейс для работы с аудиофайлами в формате «WAVE» (или «WAV»). Поддерживаются только файлы, использующие WAVE_FORMAT_PCM
. Обратите внимание, что сюда не входят файлы, использующие WAVE_FORMAT_EXTENSIBLE
, даже если подформатом является PCM.
Модуль wave
определяет следующую функцию и исключение:
- wave.open(file, mode=None)¶
Если file является строкой, откройте файл с таким именем, в противном случае рассматривайте его как объект, подобный файлу. mode может быть:
'rb'
Режим только для чтения.
'wb'
Режим только для записи.
Обратите внимание, что он не позволяет читать/ записывать WAV-файлы.
Режим для
'rb'
возвращает объектWave_read
, в то время как режим для'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
.
- getmark(id)¶
Выдает ошибку.
Следующие два метода определяют термин «позиция», который совместим между собой и в остальном зависит от реализации.
- 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 указано правильно. Это приведет к ошибке, если выходной поток недоступен для поиска, а общее количество кадров, которые были записаны после записи data, не соответствует ранее установленному значению для nframes.
Изменено в версии 3.4: Теперь принимается любое значение bytes-like object.
Обратите внимание, что недопустимо устанавливать какие-либо параметры после вызова
writeframes()
илиwriteframesraw()
, и любая попытка сделать это вызоветwave.Error
.