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

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