21.2. aifc – Чтение и запись файлов AIFF и AIFC¶aifc – Read and write AIFF and AIFC files
Этот модуль обеспечивает поддержку чтения и записи файлов AIFF и AIFF-C. AIFF – это формат Audio Interchange File Format, предназначенный для хранения цифровых аудио сэмплов в файле. AIFF-C – более новая версия формата, включающая возможность сжатия аудиоданных.
Примечание
Some operations may only work under IRIX; these will raise 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 – это либо строка с именем файла, либо объект файла. mode должен быть 'r' или 'rb', если файл открывается для чтения, или 'w' или 'wb', если файл открывается для записи. Если не указан, используется file.mode (если существует), иначе 'rb'. При использовании для записи объект файла должен допускать позиционирование, если заранее не известно общее количество отсчётов и не используются writeframesraw() и setnframes().
Объекты, возвращаемые 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(), для маркера с заданным 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 должен быть массивом байтов длиной 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)¶
- Записывает данные в выходной файл. Этот метод можно вызывать только после того, как параметры аудиофайла были заданы.
- aifc.writeframesraw(data)¶
- Аналогично writeframes(), за исключением того, что заголовок аудиофайла не обновляется.
- aifc.close()
- Закрывает AIFF-файл. Заголовок файла обновляется, чтобы отражать фактический размер аудиоданных. После вызова этого метода объект больше нельзя использовать.