aifc — Читання та запис файлів AIFF та AIFC

Вихідний код: Lib/aifc.py

Застаріло починаючи з версії 3.11: Модуль 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. 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()

Повернути список маркерів у звуковому файлі. Маркер складається з кортежу з трьох елементів. Перший — ID позначки (ціле число), другий — позиція позначки у кадрах від початку даних (ціле число), третій — назва позначки (рядок).

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