21.3. aifc – Чтение и запись файлов AIFF и AIFC¶aifc – Read and write AIFF and AIFC files
Исходный код: Lib/aifc.py
Этот модуль обеспечивает поддержку чтения и записи файлов AIFF и AIFF-C. AIFF – это формат Audio Interchange File Format, предназначенный для хранения цифровых аудио сэмплов в файле. AIFF-C – более новая версия формата, включающая возможность сжатия аудиоданных.
Примечание
Некоторые операции могут работать только под IRIX; они вызовут ImportError
при попытке импорта модуля cl, который доступен только на
IRIX.
Аудиофайлы имеют ряд параметров, описывающих аудиоданные. Частота дискретизации или частота кадров – это количество раз в секунду, когда звук дискретизируется. Количество каналов указывает, является ли аудио моно, стерео или квадро. Каждый кадр состоит из одного отсчёта на канал. Размер отсчёта – это размер одного отсчёта в байтах. Таким образом, кадр состоит из nchannels*samplesize байт, а секунда аудио – из nchannels*samplesize*framerate байт.
Например, аудио CD-качества имеет размер сэмпла два байта (16 бит), использует два канала (стерео) и имеет частоту кадров 44 100 кадров/сек. Это даёт размер кадра 4 байта (2*2), а одна секунда аудио занимает 2*2*44100 байт (176 400 байт).
Модуль aifc определяет следующую функцию:
-
aifc.open(file[, mode])¶ Открывает файл AIFF или AIFF-C и возвращает экземпляр объекта с методами, описанными ниже. Аргумент file – это либо строка с именем файла, либо файловый объект. mode должно быть
'r'или'rb', если файл открывается для чтения, или'w'или'wb', если файл открывается для записи. Если аргумент опущен, используетсяfile.mode(если файл существует), иначе'rb'. При записи файловый объект должен поддерживать позиционирование, если заранее неизвестно общее количество отсчётов, которые будут записаны, и не используютсяwriteframesraw()иsetnframes().
Объекты, возвращаемые open() при открытии файла для чтения, имеют следующие методы:
-
aifc.getnchannels()¶ Возвращает количество аудиоканалов (1 для моно, 2 для стерео).
-
aifc.getsampwidth()¶ Возвращает размер отдельных сэмплов в байтах.
-
aifc.getframerate()¶ Возвращает частоту дискретизации (количество аудиокадров в секунду).
-
aifc.getnframes()¶ Возвращает количество аудиокадров в файле.
-
aifc.getcomptype()¶ Возвращает строку из четырёх символов, описывающую тип сжатия, используемого в аудиофайле. Для файлов AIFF возвращаемое значение –
'NONE'.
-
aifc.getcompname()¶ Возвращает понятное человеку описание типа сжатия, используемого в аудиофайле. Для файлов AIFF возвращаемое значение –
'not compressed'.
-
aifc.getparams()¶ Возвращает кортеж, состоящий из всех указанных выше значений в том же порядке.
-
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 должен быть строкой из четырёх символов. В настоящее время поддерживаются следующие типы сжатия: NONE, ULAW, ALAW, G722.
-
aifc.setparams(nchannels, sampwidth, framerate, comptype, compname)¶ Устанавливает все перечисленные выше параметры за один раз. Аргументом является кортеж, состоящий из различных параметров. Это означает, что результат вызова
getparams()можно использовать в качестве аргумента дляsetparams().
-
aifc.setmark(id, pos, name)¶ Добавляет метку с заданным id (больше 0) и заданным именем в указанной позиции. Этот метод можно вызывать в любое время до
close().
-
aifc.tell() Возвращает текущую позицию записи в выходном файле. Полезно в сочетании с
setmark().
-
aifc.writeframes(data)¶ Записывает данные в выходной файл. Этот метод можно вызывать только после того, как параметры аудиофайла были заданы.
-
aifc.writeframesraw(data)¶ Как
writeframes(), за исключением того, что заголовок аудиофайла не обновляется.
-
aifc.close() Закрывает AIFF-файл. Заголовок файла обновляется, чтобы отражать фактический размер аудиоданных. После вызова этого метода объект больше нельзя использовать.