aifc
— Чтение и запись файлов AIFF и AIFC¶
Исходный код: Lib/aifc.py
Утратил актуальность с версии 3.11, будет удален в версии 3.13: Модуль aifc
устарел (подробнее см. PEP 594).
Этот модуль обеспечивает поддержку чтения и записи файлов 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 - это либо строка с именем файла, либо file object. режим должен быть
'r'
или'rb'
, когда файл должен быть открыт для чтения, или'w'
или'wb'
, когда файл должен быть открыт для записи. Если этот параметр опущен, то используетсяfile.mode
, если он существует, в противном случае используется'rb'
. При использовании для записи объект file должен быть доступен для поиска, если только вы заранее не знаете, сколько сэмплов вы собираетесь записать в общей сложности, и не используете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. Заголовок файла обновляется, чтобы отразить фактический размер аудиоданных. После вызова этого метода объект больше нельзя будет использовать.