aifc
— Чтение и запись файлов AIFF и AIFC
Данный модуль обеспечивает поддержку чтения и записи файлов AIFF и AIFF-C. AIFF — это формат файла обмена аудио, формат для хранения цифровых аудиосэмплов в файле. 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 сжатие невозможно. Параметр имени должен представлять собой удобочитаемое описание типа сжатия в виде массива байтов, параметр типа должен быть массивом байтов длиной 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. Заголовок файла обновляется, чтобы отразить фактический размер аудиоданных. После вызова этого метода объект больше не может быть использован.