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'. При записи объект файла должен поддерживать позиционирование (seek), если заранее неизвестно, сколько сэмплов будет записано в целом, и используется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) -
Устанавливает количество кадров, которые будут записаны в аудиофайл. Если этот параметр не задан или задан неправильно, файл должен поддерживать позиционирование (seek).
-
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: Теперь принимается любой объект-подобный байтам.
-
aifc.writeframesraw(data) -
Аналогично
writeframes(), за исключением того, что заголовок аудиофайла не обновляется.Изменено в версии 3.4: Теперь принимается любой объект-подобный байтам.
-
aifc.close() -
Закрыть файл AIFF. Заголовок файла обновляется, чтобы отразить фактический размер аудиоданных. После вызова этого метода объект больше нельзя использовать.
© 2001–2020 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.7/library/aifc.html