wave
— Чтение и запись WAV файлов¶
Модуль wave
предоставляет удобный интерфейс для звукового формата WAV. Он
не поддерживает сжатие/распаковку, но поддерживает моно/стерео.
Модуль wave
определяет следующую функцию и исключение:
-
wave.
open
(file, mode=None)¶ Если file является строкой, открывает файл по имени, иначе обрабатывает его как файлоподобный объект. mode может быть:
'rb'
- Режим только для чтения.
'wb'
- Только режим записи.
Обратите внимание, что он не позволяет читать/записывать WAV файлы.
mode из
'rb'
возвращает объектWave_read
, а mode из'wb'
возвращает объектWave_write
. Если mode пропущен, а файлоподобный объект передаётся как file,file.mode
используется как значение по умолчанию для mode.Если вы передаете файлоподобный объект, wave объект не закроет его при вызове метода
close()
; ответственность за закрытие файлового объекта лежит на вызывающем объекте.Функцию
open()
можно использовать в оператореwith
. Когда блокwith
завершается, вызывается методWave_read.close()
илиWave_write.close()
.Изменено в версии 3.4: Добавлена поддержка недоступных для поиска файлов.
-
wave.
openfp
(file, mode)¶ Синоним для
open()
, поддерживаемый для обратной совместимости.Устарело с версии 3.7, будет удалено в 3.9 версии..
-
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_write¶
Для доступных для поиска выходных потоков заголовок 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)¶ tuple должен быть
(nchannels, sampwidth, framerate, nframes, comptype, compname)
со значениями, допустимыми для методовset*()
. Устанавливает все параметры.
-
Wave_write.
tell
()¶ Возвращает текущую позицию в файле с тем же отказом от ответственности для методов
Wave_read.tell()
иWave_read.setpos()
.
-
Wave_write.
writeframesraw
(data)¶ Записывает аудио фреймы, не исправляя nframes.
Изменено в версии 3.4: Теперь принимается любой байтоподобный объект.
-
Wave_write.
writeframes
(data)¶ Записывает аудиокадры и проверяет, что nframes правильный. Вызовет ошибку, если выходной поток не доступен для поиска, а общее количество фреймов, которые были записаны после записи data, не соответствует ранее установленному значению для nframes.
Изменено в версии 3.4: Теперь принимается любой байтоподобный объект.
Обратите внимание, что нельзя задавать какие-либо параметры после вызова
writeframes()
или writeframesraw()
, и любая попытка сделать это
вызовет wave.Error
.