Содержание страницы
wave – чтение и запись WAV-файлов¶wave – Read and write WAV files
Исходный код: Lib/wave.py
Модуль wave предоставляет удобный интерфейс для работы с форматом файлов Waveform Audio
«WAVE» (или «WAV»).
Модуль поддерживает форматы WAV: несжатый PCM и IEEE с плавающей запятой.
Изменено в версии 3.12: Добавлена поддержка заголовков WAVE_FORMAT_EXTENSIBLE при условии, что расширенный формат имеет значение KSDATAFORMAT_SUBTYPE_PCM.
Изменено в версии 3.15: Добавлена поддержка чтения и записи файлов WAVE_FORMAT_IEEE_FLOAT.
Модуль wave определяет следующие функцию и исключение:
- wave.open(file, mode=None)¶
Если file – строка, объект, подобный пути или объект, подобный байтовой строке, то открывается файл с таким именем; в противном случае он считается файлоподобным объектом. mode может принимать следующие значения:
'rb'Режим только для чтения.
'wb'Режим только для записи.
Обратите внимание: не поддерживаются WAV-файлы, открытые одновременно на чтение и запись.
Значение mode, равное
'rb', возвращает объектWave_read, а значение mode, равное'wb', возвращает объектWave_write. Если mode опущен и в качестве file передан файлоподобный объект, тоfile.modeиспользуется как значение по умолчанию для mode.Если передан файлоподобный объект, объект wave не закроет его при вызове метода
close(); закрытие файлового объекта – ответственность вызывающей стороны.Функция
open()может использоваться в оператореwith. Когда блокwithзавершается, вызывается методWave_read.close()илиWave_write.close().Изменено в версии 3.4: Добавлена поддержка файлов без произвольного доступа.
Изменено в версии 3.15: Добавлена поддержка объектов, подобных путям и объектов, подобных байтовым строкам.
- exception wave.Error¶
Исключение, возникающее, когда какое-либо действие невозможно, поскольку оно нарушает спецификацию WAV или сталкивается с недостатком реализации.
- wave.WAVE_FORMAT_PCM¶
Код формата для несжатого аудио PCM.
- wave.WAVE_FORMAT_IEEE_FLOAT¶
Код формата для аудио IEEE с плавающей запятой.
- wave.WAVE_FORMAT_EXTENSIBLE¶
Код формата для расширяемых заголовков WAVE.
Объекты Wave_read¶Wave_read Objects
- class wave.Wave_read¶
Чтение WAV-файла.
Объекты Wave_read, возвращаемые функцией
open(), имеют следующие методы:- close()¶
Закрывает поток, если он был открыт с помощью
wave, и делает экземпляр непригодным для использования. Автоматически вызывается при удалении объекта.
- getnchannels()¶
Возвращает количество аудиоканалов (
1для моно,2для стерео).
- getsampwidth()¶
Возвращает ширину выборки в байтах.
- getframerate()¶
Возвращает частоту дискретизации.
- getnframes()¶
Возвращает количество аудиофреймов.
- getformat()¶
Возвращает код формата фрейма.
Это один из
WAVE_FORMAT_PCM,WAVE_FORMAT_IEEE_FLOATилиWAVE_FORMAT_EXTENSIBLE.
- getcomptype()¶
Возвращает тип сжатия (поддерживается только тип
'NONE').
- getcompname()¶
Человекочитаемая версия
getcomptype(). Обычно'not compressed'соответствует'NONE'.
- getparams()¶
Возвращает
namedtuple()(nchannels, sampwidth, framerate, nframes, comptype, compname), эквивалентный выходным данным методовget*().
- rewind()¶
Перемещает указатель файла в начало аудиопотока.
Следующие два метода определяют термин «позиция», совместимый между ними, а в остальном зависящий от реализации.
- setpos(pos)¶
Устанавливает указатель файла на указанную позицию.
- tell()¶
Возвращает текущую позицию указателя файла.
Объекты Wave_write¶Wave_write Objects
- 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 байт.
Для
WAVE_FORMAT_IEEE_FLOATподдерживается только ширина отсчёта 4 байта (32-бит) и 8 байт (64-бит).
- getsampwidth()¶
Возвращает ширину семпла в байтах.
- setframerate(n)¶
Устанавливает частоту дискретизации равной n.
Изменено в версии 3.2: Нецелочисленный входной аргумент этого метода округляется до ближайшего целого.
- getframerate()¶
Возвращает частоту дискретизации.
- setnframes(n)¶
Устанавливает количество кадров равным n. Впоследствии это значение может измениться, если фактически записанное количество кадров будет отличаться (при попытке обновить значение будет вызвана ошибка, если выходной поток не поддерживает произвольный доступ).
- getnframes()¶
Возвращает количество аудиокадров, записанных на данный момент.
- setcomptype(type, name)¶
Устанавливает тип сжатия и описание. На данный момент поддерживается только тип сжатия
NONE, то есть без сжатия.
- getcomptype()¶
Возвращает тип сжатия (
'NONE').
- getcompname()¶
Возвращает читаемое человеком название типа сжатия.
- setformat(format)¶
Устанавливает код формата кадра.
Поддерживаются значения
WAVE_FORMAT_PCMиWAVE_FORMAT_IEEE_FLOAT.При установке
WAVE_FORMAT_IEEE_FLOATширина отсчёта должна быть 4 или 8 байт.
- getformat()¶
Возвращает текущий код формата кадра.
- setparams(tuple)¶
Кортеж должен быть
(nchannels, sampwidth, framerate, nframes, comptype, compname, format), со значениями, допустимыми для методовset*(). Устанавливает все параметры.Для обратной совместимости также принимается кортеж из 6 элементов без format и по умолчанию равен
WAVE_FORMAT_PCM.Для
format=WAVE_FORMAT_IEEE_FLOATsampwidth должен быть 4 или 8.
- getparams()¶
Возвращает
namedtuple()(nchannels, sampwidth, framerate, nframes, comptype, compname), содержащий текущие выходные параметры.
- tell()¶
Возвращает текущую позицию в файле с теми же оговорками, что и для методов
Wave_read.tell()иWave_read.setpos().
- writeframesraw(data)¶
Записывает аудиокадры без коррекции nframes.
Изменено в версии 3.4: Теперь принимается любой байтоподобный объект.
- writeframes(data)¶
Записывает аудиокадры и проверяет, что nframes корректен. Будет вызвана ошибка, если выходной поток не поддерживает произвольный доступ, а общее количество кадров, записанных после записи data, не совпадает с ранее установленным значением для nframes.
Изменено в версии 3.4: Теперь принимается любой байтоподобный объект.
Обратите внимание, что устанавливать какие-либо параметры после вызова
writeframes()илиwriteframesraw()недопустимо; любая попытка сделать это приведёт к возникновениюwave.Error.Для выходных данных
WAVE_FORMAT_IEEE_FLOATзаписывается фрагментfact, как того требует спецификация WAVE для форматов, отличных от PCM.