aifc
— чтение и запись AIFF и AIFC файлов¶
Исходный код: Lib/aifc.py
Модуль обеспечивает поддержку чтения и записи файлов в формате AIFF и AIFF-C. AIFF (Audio Interchange File Format) - формат для хранения в файле сэмплов оцифрового звука. AIFF-C - более новая версия формата, реализующая возможность сжатия аудиоданных.
Аудиофайлы имеют ряд параметров, описывающих аудиоданные. Частота дискретизации
или частота фреймов - это число выборок звука в секунду. Количество
каналов указывает, является ли звук моно, стерео или квадро. Каждый фрейм состоит
из одной выборки на канал. Размер выборки, равен размеру в байтах каждого сэмпла.
Таким образом, фрейм состоит из nchannels * samplesize
байт и каждая секунда аудиоданных
состоят из nchannels * samplesize * framerate
байт.
Например, аудио качества CD имеет размер сэмпла два байта (16 бит), использует два каналы (стерео) и имеет частоту фреймов 44100 фреймов в секунду. Это дает a размер фрейма 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: Теперь принимается любой байтоподобный объект.
-
aifc.
writeframesraw
(data)¶ Подобен
writeframes()
, за исключением того, что заголовок аудиофайла не обновляется.Изменено в версии 3.4: Теперь принимается любой байтоподобный объект.
-
aifc.
close
() Закрывает файл AIFF. Заголовок файла обновляется для отражения фактического размера аудиоданных. После вызова этого метода объект больше не может быть использован.