> **Источник:** https://python-all.ru/3.1/library/aifc.html
>
> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.

---

# 21.2. `aifc` – Чтение и запись файлов AIFF и AIFC

Этот модуль обеспечивает поддержку чтения и записи файлов AIFF и AIFF-C. AIFF – это формат Audio Interchange File Format, предназначенный для хранения цифровых аудио сэмплов в файле. AIFF-C – более новая версия формата, включающая возможность сжатия аудиоданных.

> **Примечание**
>
> Some operations may only work under IRIX; these will raise [`ImportError`](https://python-all.ru/3.1/library/exceptions.html#ImportError) when attempting to import the `cl` module, which is only available on IRIX.

Аудиофайлы имеют ряд параметров, описывающих аудиоданные. Частота дискретизации (частота кадров) – это количество измерений звука в секунду. Количество каналов указывает, является ли аудио моно, стерео или квадро. Каждый кадр состоит из одного отсчёта на канал. Размер отсчёта – это размер каждого отсчёта в байтах. Таким образом, кадр состоит из *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*

– это либо строка с именем файла, либо

[*объект файла*](https://python-all.ru/3.1/glossary.html#term-file-object)

.

*mode*

должен быть

`'r'`

или

`'rb'`

, если файл открывается для чтения, или

`'w'`

или

`'wb'`

, если файл открывается для записи. Если не указан, используется

`file.mode`

(если существует), иначе

`'rb'`

. При использовании для записи объект файла должен допускать позиционирование, если заранее не известно общее количество отсчётов и не используются

`writeframesraw()`

и

`setnframes()`

.

Объекты, возвращаемые [`open()`](https://python-all.ru/3.1/library/aifc.html#aifc.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()`

Возвращает кортеж, состоящий из всех указанных выше значений в том же порядке.

#### `aifc.getmarkers()`

Возвращает список маркеров в аудиофайле. Маркер состоит из кортежа из трёх элементов. Первый – идентификатор маркера (целое число), второй – позиция маркера в кадрах от начала данных (целое число), третий – имя маркера (строка).

#### `aifc.getmark(id)`

Возвращает кортеж, как описано в

[`getmarkers()`](https://python-all.ru/3.1/library/aifc.html#aifc.aifc.getmarkers)

, для маркера с заданным

*id*

.

#### `aifc.readframes(nframes)`

Читает и возвращает следующие

*nframes*

кадров из аудиофайла. Возвращаемые данные – это строка, содержащая для каждого кадра несжатые сэмплы всех каналов.

#### `aifc.rewind()`

Перематывает указатель чтения. Следующий вызов

[`readframes()`](https://python-all.ru/3.1/library/aifc.html#aifc.aifc.readframes)

начнётся с начала.

#### `aifc.setpos(pos)`

Перейти к указанному номеру кадра.

#### `aifc.tell()`

Возвращает текущий номер кадра.

#### `aifc.close()`

Закрывает файл AIFF. После вызова этого метода объект больше нельзя использовать.

Объекты, возвращаемые [`open()`](https://python-all.ru/3.1/library/aifc.html#aifc.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 должен быть массивом байтов длиной 4. В настоящее время поддерживаются следующие типы сжатия: `b'NONE'`, `b'ULAW'`, `b'ALAW'`, `b'G722'`.

#### `aifc.setparams(nchannels, sampwidth, framerate, comptype, compname)`

Устанавливает все перечисленные выше параметры сразу. Аргументом является кортеж, состоящий из различных параметров. Это означает, что результат вызова

[`getparams()`](https://python-all.ru/3.1/library/aifc.html#aifc.aifc.getparams)

можно использовать как аргумент для

[`setparams()`](https://python-all.ru/3.1/library/aifc.html#aifc.aifc.setparams)

.

#### `aifc.setmark(id, pos, name)`

Добавляет метку с заданным id (больше 0) и заданным именем в заданной позиции. Этот метод можно вызывать в любое время до

[`close()`](https://python-all.ru/3.1/library/aifc.html#aifc.aifc.close)

.

#### `aifc.tell()`

Возвращает текущую позицию записи в выходном файле. Полезно в сочетании с

[`setmark()`](https://python-all.ru/3.1/library/aifc.html#aifc.aifc.setmark)

.

#### `aifc.writeframes(data)`

Записывает данные в выходной файл. Этот метод можно вызывать только после того, как параметры аудиофайла были заданы.

#### `aifc.writeframesraw(data)`

Аналогично

[`writeframes()`](https://python-all.ru/3.1/library/aifc.html#aifc.aifc.writeframes)

, за исключением того, что заголовок аудиофайла не обновляется.

#### `aifc.close()`

Закрывает AIFF-файл. Заголовок файла обновляется, чтобы отражать фактический размер аудиоданных. После вызова этого метода объект больше нельзя использовать.
