aifc — Чтение и запись файлов AIFF и AIFC

Исходный код: Lib/aifc.py.

Не рекомендуется, начиная с версии 3.11: Модуль aifc является устаревшим (подробнее см. PEP 594).


Этот модуль обеспечивает поддержку чтения и записи файлов AIFF и AIFF-C. AIFF - это Audio Interchange File Format, формат для хранения цифровых звуковых образцов в файле. 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. 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)

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

Вернуться на верх