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*().

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)

Установите количество каналов.

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.