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