aifc – Чтение и запись файлов AIFF и AIFC¶aifc – Read and write AIFF and AIFC files
Исходный код: 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)¶ Задаёт количество кадров, которые будут записаны в аудиофайл. Если этот параметр не задан или задан неверно, файл должен поддерживать перемещение (seeking).
-
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)¶ Добавляет метку с заданным id (больше 0) и заданным именем в указанной позиции. Этот метод можно вызывать в любое время до
close().
-
aifc.tell() Возвращает текущую позицию записи в выходном файле. Полезно в сочетании с
setmark().
-
aifc.writeframes(data)¶ Записывает данные в выходной файл. Этот метод можно вызывать только после того, как параметры аудиофайла были заданы.
Изменено в версии 3.4: Теперь принимается любой байтоподобный объект.
-
aifc.writeframesraw(data)¶ Как
writeframes(), за исключением того, что заголовок аудиофайла не обновляется.Изменено в версии 3.4: Теперь принимается любой байтоподобный объект.
-
aifc.close() Закрывает AIFF-файл. Заголовок файла обновляется, чтобы отражать фактический размер аудиоданных. После вызова этого метода объект больше нельзя использовать.