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.
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
.