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.

Если передать файлообразный объект, волновой объект не закроет его при вызове метода 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.readframes(n)

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

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.