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

readframes(n)

Считывает и возвращает не более n аудиокадров в виде объекта bytes.

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.

Вернуться на верх