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