21.3. 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])¶
- Открывает файл 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()¶
- Возвращает строку из четырёх символов, описывающую тип сжатия, используемый в аудиофайле. Для файлов AIFF возвращается значение 'NONE'.
- aifc.getcompname()¶
- Возвращает человекочитаемое описание типа сжатия, используемого в аудиофайле. Для файлов AIFF возвращается значение '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 должен быть строкой из четырёх символов. В настоящее время поддерживаются следующие типы сжатия: NONE, ULAW, ALAW, 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-файл. Заголовок файла обновляется, чтобы отражать фактический размер аудиоданных. После вызова этого метода объект больше нельзя использовать.