wave — Чтение и запись файлов WAV

Исходный код: Lib/wave.py.


Модуль wave предоставляет удобный интерфейс для работы со звуковым форматом WAV. Он не поддерживает сжатие/декомпрессию, но поддерживает моно/стерео.

Модуль 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 Объекты

Объекты Wave_read, возвращаемые командой open(), имеют следующие методы:

Wave_read.close()

Закрыть поток, если он был открыт командой wave, и сделать экземпляр непригодным для использования. Это вызывается автоматически при сборе объекта.

Wave_read.getnchannels()

Возвращает количество аудиоканалов (1 для моно, 2 для стерео).

Wave_read.getsampwidth()

Возвращает ширину выборки в байтах.

Wave_read.getframerate()

Возвращает частоту дискретизации.

Wave_read.getnframes()

Возвращает количество аудиокадров.

Wave_read.getcomptype()

Возвращает тип сжатия ('NONE' - единственный поддерживаемый тип).

Wave_read.getcompname()

Человекочитаемая версия getcomptype(). Обычно 'not compressed' параллельно 'NONE'.

Wave_read.getparams()

Возвращает namedtuple() (nchannels, sampwidth, framerate, nframes, comptype, compname), эквивалентный выводу методов get*().

Wave_read.readframes(n)

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

Wave_read.rewind()

Перемотка указателя файла к началу аудиопотока.

Следующие два метода определены для совместимости с модулем aifc и не делают ничего интересного.

Wave_read.getmarkers()

Возвращает None.

Wave_read.getmark(id)

Вызвать ошибку.

Следующие два метода определяют термин «позиция», который совместим между ними, а в остальном зависит от реализации.

Wave_read.setpos(pos)

Установить указатель файла в указанную позицию.

Wave_read.tell()

Возвращает текущую позицию указателя файла.

Волна_записи Объекты

Для выходных потоков с возможностью поиска, заголовок wave будет автоматически обновлен, чтобы отразить количество фактически записанных кадров. Для потоков без поиска значение nframes должно быть точным на момент записи данных первого кадра. Точное значение nframes может быть достигнуто либо вызовом setnframes() или setparams() с количеством кадров, которые будут записаны до вызова close(), а затем использованием writeframesraw() для записи данных кадра, либо вызовом writeframes() со всеми данными кадра, которые должны быть записаны. В последнем случае writeframes() подсчитает количество кадров в данных и установит nframes соответствующим образом перед записью данных кадра.

Объекты Wave_write, возвращаемые командой open(), имеют следующие методы:

Изменено в версии 3.4: Добавлена поддержка файлов без возможности поиска.

Wave_write.close()

Убедитесь, что nframes корректен, и закройте файл, если он был открыт командой wave. Этот метод вызывается при сборе объекта. Он вызовет исключение, если выходной поток не является искомым и nframes не соответствует количеству реально записанных кадров.

Wave_write.setnchannels(n)

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

Wave_write.setsampwidth(n)

Установите ширину выборки в n байт.

Wave_write.setframerate(n)

Установите частоту кадров на n.

Изменено в версии 3.2: Неинтегральный вход в этот метод округляется до ближайшего целого числа.

Wave_write.setnframes(n)

Установите количество кадров равным n. Это значение будет изменено позже, если количество реально записанных кадров будет другим (попытка обновления приведет к ошибке, если выходной поток не является искомым).

Wave_write.setcomptype(type, name)

Установите тип сжатия и описание. В настоящее время поддерживается только тип сжатия NONE, что означает отсутствие сжатия.

Wave_write.setparams(tuple)

Кортеж* должен быть (nchannels, sampwidth, framerate, nframes, comptype, compname), со значениями, действительными для методов set*(). Устанавливает все параметры.

Wave_write.tell()

Возвращает текущую позицию в файле, с той же оговоркой, что и для методов Wave_read.tell() и Wave_read.setpos().

Wave_write.writeframesraw(data)

Запись аудиокадров, без коррекции nframes.

Изменено в версии 3.4: Теперь принимаются любые bytes-like object.

Wave_write.writeframes(data)

Запись аудиокадров и проверка правильности значения nframes. Вызовет ошибку, если выходной поток не является искомым и общее количество кадров, которые были записаны после записи data, не соответствует ранее установленному значению для nframes.

Изменено в версии 3.4: Теперь принимаются любые bytes-like object.

Обратите внимание, что после вызова writeframes() или writeframesraw() устанавливать какие-либо параметры недопустимо, и любая попытка сделать это приведет к появлению сообщения wave.Error.

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