aifc — Чтение и запись файлов AIFF и AIFC
Исходный код: Lib/aifc.py
Этот модуль предоставляет поддержку чтения и записи файлов AIFF и AIFF-C. AIFF — это формат Audio Interchange File Format, используемый для хранения цифровых аудиосэмплов в файле. AIFF-C — это более новая версия формата, которая включает возможность сжатия аудиоданных.
Аудиофайлы имеют ряд параметров, описывающих аудиоданные. Частота дискретизации или частота кадров — это количество раз в секунду, когда звук сэмплируется. Количество каналов указывает, является ли аудио моно, стерео или квадро. Каждый кадр состоит из одного сэмпла на канал. Размер сэмпла — это размер в байтах каждого сэмпла. Таким образом, кадр состоит из nchannels * samplesize байтов, а аудиозапись продолжительностью в одну секунду состоит из nchannels * samplesize * framerate байтов.
Например, аудио высокого качества CD имеет размер сэмпла два байта (16 бит), использует два канала (стерео) и имеет частоту кадров 44 100 кадров/секунду. Это даёт размер кадра в 4 байта (2*2), а запись продолжительностью в одну секунду занимает 2*2*44100 байтов (176 400 байтов).
Модуль aifc определяет следующую функцию:
-
aifc.open(file, mode=None) -
Открывает файл AIFF или AIFF-C и возвращает объект-инстанцию с методами, описанными ниже. Аргумент file — это либо строка, содержащая имя файла, либо объект файла. mode должен быть
'r'или'rb'при открытии файла для чтения, или'w'или'wb'при открытии файла для записи. Если опущен, используетсяfile.mode, если он существует, в противном случае используется'rb'. При записи объект файла должен поддерживать позиционирование, если вы заранее не знаете, сколько сэмплов вы собираетесь записать в целом, и используйтеwriteframesraw()иsetnframes(). Функцияopen()может быть использована в оператореwith. По завершении блокаwithвызывается методclose().Изменено в версии 3.4: Добавлена поддержка оператора
with.
Объекты, возвращаемые open() при открытии файла для чтения, имеют следующие методы:
-
aifc.getnchannels() -
Возвращает количество аудиоканалов (1 для моно, 2 для стерео).
-
aifc.getsampwidth() -
Возвращает размер в байтах отдельных сэмплов.
-
aifc.getframerate() -
Возвращает частоту дискретизации (количество аудиокадров в секунду).
-
aifc.getnframes() -
Возвращает количество аудиокадров в файле.
-
aifc.getcomptype() -
Возвращает массив байтов длиной 4, описывающий тип сжатия, используемый в аудиофайле. Для файлов AIFF возвращаемое значение —
b'NONE'.
-
aifc.getcompname() -
Возвращает массив байтов, преобразуемый в удобочитаемое описание типа сжатия, используемого в аудиофайле. Для файлов AIFF возвращаемое значение —
b'not compressed'.
-
aifc.getparams() -
Возвращает
namedtuple()(nchannels, sampwidth, framerate, nframes, comptype, compname), эквивалентный выводу методовget*().
-
aifc.getmarkers() -
Возвращает список меток в аудиофайле. Метка состоит из тройки элементов. Первый — идентификатор метки (целое число), второй — позиция метки в кадрах от начала данных (целое число), третий — имя метки (строка).
-
aifc.getmark(id) -
Возвращает кортеж, как описано в
getmarkers()для метки с заданным id.
-
aifc.readframes(nframes) -
Читает и возвращает следующие nframes кадров из аудиофайла. Возвращаемые данные — строка, содержащая для каждого кадра несжатые сэмплы всех каналов.
-
aifc.rewind() -
Перематывает указатель чтения. Следующее
readframes()начнётся с начала.
-
aifc.setpos(pos) -
Переходит к указанному номеру кадра.
-
aifc.tell() -
Возвращает текущий номер кадра.
-
aifc.close() -
Закрывает файл AIFF. После вызова этого метода объект больше нельзя использовать.
Объекты, возвращаемые open() при открытии файла для записи, имеют все вышеперечисленные методы, за исключением readframes() и setpos(). Кроме того, существуют следующие методы. Методы get*() можно вызывать только после вызова соответствующих методов set*(). Перед первым вызовом writeframes() или writeframesraw(), все параметры, кроме количества кадров, должны быть заполнены.
-
aifc.aiff() -
Создаёт файл AIFF. По умолчанию создаётся файл AIFF-C, если имя файла не оканчивается на
'.aiff', в этом случае по умолчанию создаётся файл AIFF.
-
aifc.aifc() -
Создаёт файл AIFF-C. По умолчанию создаётся файл AIFF-C, если имя файла не оканчивается на
'.aiff', в этом случае по умолчанию создаётся файл AIFF.
-
aifc.setnchannels(nchannels) -
Устанавливает количество каналов в аудиофайле.
-
aifc.setsampwidth(width) -
Устанавливает размер аудиосэмплов в байтах.
-
aifc.setframerate(rate) -
Устанавливает частоту дискретизации в кадрах в секунду.
-
aifc.setnframes(nframes) -
Устанавливает количество кадров, которые должны быть записаны в аудиофайл. Если этот параметр не задан или задан неправильно, файл должен поддерживать позиционирование.
-
aifc.setcomptype(type, name) -
Устанавливает тип сжатия. Если не задан, аудиоданные не будут сжаты. В файлах AIFF сжатие невозможно. Параметр name должен быть удобочитаемым описанием типа сжатия как массив байтов, параметр type должен быть массивом байтов длиной 4. В настоящее время поддерживаются следующие типы сжатия:
b'NONE',b'ULAW',b'ALAW',b'G722'.
-
aifc.setparams(nchannels, sampwidth, framerate, comptype, compname) -
Устанавливает все вышеперечисленные параметры сразу. Аргументом является кортеж, состоящий из различных параметров. Это означает, что можно использовать результат вызова
getparams()в качестве аргумента дляsetparams().
-
aifc.setmark(id, pos, name) -
Добавляет метку с заданным идентификатором (больше 0) и заданным именем в заданной позиции. Этот метод можно вызывать в любое время до вызова
close().
-
aifc.tell() -
Возвращает текущую позицию записи в выходном файле. Полезно в сочетании с
setmark().
-
aifc.writeframes(data) -
Записывает данные в выходной файл. Этот метод можно вызывать только после установки параметров аудиофайла.
Изменено в версии 3.4: Теперь принимается любой bytes-like object.
-
aifc.writeframesraw(data) -
Аналогично
writeframes(), за исключением того, что заголовок аудиофайла не обновляется.Изменено в версии 3.4: Теперь принимается любой bytes-like object.
-
aifc.close() -
Закрывает файл AIFF. Заголовок файла обновляется, чтобы отразить фактический размер аудиоданных. После вызова этого метода объект больше нельзя использовать.
© 2001–2020 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.6/library/aifc.html