Содержание страницы
21.5. wave – Чтение и запись WAV-файлов¶wave – Read and write WAV files
Исходный код: Lib/wave.py
Модуль wave предоставляет удобный интерфейс для работы со звуковым форматом WAV.
Он не поддерживает сжатие/распаковку, но поддерживает моно и стерео.
Модуль wave определяет следующие функцию и исключение:
-
wave.open(file[, mode])¶ Если file – строка, открыть файл с этим именем, иначе считать его\nфайлоподобным объектом с произвольным доступом. mode может быть одним из:
'r','rb'Режим только для чтения.
'w','wb'Режим только для записи.
Обратите внимание: не поддерживаются WAV-файлы, открытые одновременно на чтение и запись.
Режим режим
'r'или'rb'возвращает объектWave_read, а режим режим'w'или'wb'возвращает объектWave_write. Если режим опущен и в качестве файл передан файлоподобный объект,file.modeиспользуется как значение по умолчанию для режим (флаг'b'все равно добавляется при необходимости).Если передан файлоподобный объект, объект wave не закроет его при вызове метода
close(); закрытие файлового объекта – ответственность вызывающей стороны.
-
exception
wave.Error¶ Исключение, возникающее, когда какое-либо действие невозможно, поскольку оно нарушает спецификацию WAV или сталкивается с недостатком реализации.
21.5.1. Объекты Wave_read¶Wave_read Objects
Объекты 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()¶ Возвращает кортеж
(nchannels, sampwidth, framerate, nframes, comptype, compname), эквивалентный результату методовget*().
-
Wave_read.readframes(n)¶ Читает и возвращает не более n фреймов аудио в виде строки байтов.
-
Wave_read.rewind()¶ Перемещает указатель файла в начало аудиопотока.
Два следующих метода определены для совместимости с модулем aifc
и не делают ничего интересного.
-
Wave_read.getmarkers()¶ Возвращает
None.
-
Wave_read.getmark(id)¶ Возбуждает исключение.
Следующие два метода определяют термин «позиция», совместимый между ними, а в остальном зависящий от реализации.
-
Wave_read.setpos(pos)¶ Устанавливает указатель файла на указанную позицию.
-
Wave_read.tell()¶ Возвращает текущую позицию указателя файла.
21.5.2. Объекты Wave_write¶Wave_write Objects
Объекты Wave_write, возвращаемые open(), имеют следующие методы:
-
Wave_write.close()¶ Убедитесь, что количество фреймов верно, и закройте файл, если он был открыт с помощью
wave. Этот метод вызывается при удалении объекта.
-
Wave_write.setnchannels(n)¶ Устанавливает количество каналов.
-
Wave_write.setsampwidth(n)¶ Устанавливает ширину семпла равной n байт.
-
Wave_write.setframerate(n)¶ Устанавливает частоту дискретизации равной n.
-
Wave_write.setnframes(n)¶ Устанавливает количество фреймов в n. Это значение будет изменено позже, если будет записано больше фреймов.
-
Wave_write.setcomptype(type, name)¶ Устанавливает тип сжатия и описание. На данный момент поддерживается только тип сжатия
NONE, то есть без сжатия.
-
Wave_write.setparams(tuple)¶ tuple (кортеж) должен быть
(nchannels, sampwidth, framerate, nframes, comptype, compname)со значениями, допустимыми для методовset*(). Устанавливает все параметры.
-
Wave_write.tell()¶ Возвращает текущую позицию в файле с теми же оговорками, что и для методов
Wave_read.tell()иWave_read.setpos().
-
Wave_write.writeframesraw(data)¶ Записывает аудиокадры без коррекции nframes.
-
Wave_write.writeframes(data)¶ Записывает аудиокадры и проверяет, что nframes корректен.
Обратите внимание, что устанавливать какие-либо параметры после вызова writeframes()
или writeframesraw() недопустимо; любая попытка сделать это приведёт к возникновению wave.Error.