Содержание страницы
40.1. sunaudiodev – Доступ к аудиооборудованию Sun¶sunaudiodev – Access to Sun audio hardware
Устарело с версии 2.6: Модуль sunaudiodev удалён в Python 3.
Этот модуль предоставляет доступ к аудиоинтерфейсу Sun. Аудиооборудование Sun может записывать и воспроизводить аудиоданные в формате u-LAW с частотой дискретизации 8 кГц. Полное описание можно найти на странице руководства audio(7I).
Модуль SUNAUDIODEV определяет константы, которые могут использоваться с этим
модулем.
Этот модуль определяет следующие переменные и функции:
-
exception
sunaudiodev.error¶ Это исключение вызывается при всех ошибках. Аргументом является строка, описывающая, что пошло не так.
-
sunaudiodev.open(mode)¶ Эта функция открывает аудиоустройство и возвращает объект аудиоустройства Sun. Затем этот объект можно использовать для ввода-вывода. Параметр mode может принимать значения
'r'(только запись),'w'(только воспроизведение),'rw'(запись и воспроизведение) и'control'(доступ к устройству управления). Поскольку только одному процессу разрешено одновременно открывать устройство записи или воспроизведения, рекомендуется открывать устройство только для необходимой операции. Подробнее см. audio(7I).Согласно man-странице, этот модуль сначала ищет базовое имя файла аудиоустройства в переменной окружения
AUDIODEV. Если не найдено, используется/dev/audio. Устройство управления формируется добавлением «ctl» к базовому имени аудиоустройства.
40.1.1. Объекты аудиоустройств¶Audio Device Objects
Объекты аудиоустройства возвращаются функцией open() и определяют следующие методы (кроме объектов control, которые предоставляют только getinfo(),
setinfo(), fileno() и drain()):
-
audio device.close() Этот метод явно закрывает устройство. Он полезен в ситуациях, когда удаление объекта не приводит к немедленному закрытию, так как существуют другие ссылки на него. Закрытое устройство не следует использовать повторно.
-
audio device.fileno() Возвращает файловый дескриптор, связанный с устройством. Его можно использовать для настройки уведомления
SIGPOLL, как описано ниже.
-
audio device.drain() Этот метод ожидает обработки всех ожидающих вывода данных и затем возвращает управление. Вызов этого метода часто не требуется: уничтожение объекта автоматически закроет аудиоустройство и выполнит неявный сброс.
-
audio device.flush() Этот метод отбрасывает все ожидающие вывода данные. Его можно использовать, чтобы избежать медленной реакции на запрос пользователя об остановке (из-за буферизации до одной секунды звука).
-
audio device.getinfo() Этот метод извлекает информацию о состоянии, такую как громкость входа и выхода и т.д., и возвращает её в виде объекта состояния аудиоустройства. Этот объект не имеет методов, но содержит ряд атрибутов, описывающих текущее состояние устройства. Имена и значения атрибутов описаны в
<sun/audioio.h>и на странице руководства audio(7I). Имена членов немного отличаются от их аналогов на C: объект состояния – это всего одна структура. Члены подструктурыplayимеют префиксo_в имени, а члены структурыrecord– префиксi_. Так, член Cplay.sample_rateдоступен какo_sample_rate,record.gainкакi_gain, аmonitor_gain– какmonitor_gain.
-
audio device.ibufcount() Этот метод возвращает количество сэмплов, буферизованных на стороне записи, т.е. программа не будет блокироваться при вызове
read()для такого количества сэмплов.
-
audio device.obufcount() Этот метод возвращает количество сэмплов, буферизованных на стороне воспроизведения. К сожалению, это число нельзя использовать для определения количества сэмплов, которые можно записать без блокировки, так как длина очереди вывода ядра, по-видимому, переменная.
-
audio device.read(size) Этот метод читает size сэмплов из аудиовхода и возвращает их в виде строки Python. Функция блокируется, пока не будет достаточно данных.
-
audio device.setinfo(status) Этот метод устанавливает параметры состояния аудиоустройства. Параметр status является объектом состояния устройства, возвращаемым функцией
getinfo()и, возможно, изменённым программой.
-
audio device.write(samples) Метод write получает строку Python, содержащую аудиосэмплы для воспроизведения. Если достаточно свободного буферного пространства, он немедленно возвращается, в противном случае блокируется.
Аудиоустройство поддерживает асинхронное уведомление о различных событиях через сигнал SIGPOLL. Вот пример того, как можно включить это в Python:
def handle_sigpoll(signum, frame):
print 'I got a SIGPOLL update'
import fcntl, signal, STROPTS
signal.signal(signal.SIGPOLL, handle_sigpoll)
fcntl.ioctl(audio_obj.fileno(), STROPTS.I_SETSIG, STROPTS.S_MSG)
40.2. SUNAUDIODEV – Константы, используемые с sunaudiodev¶SUNAUDIODEV – Constants used with sunaudiodev
Устарело с версии 2.6: Модуль SUNAUDIODEV удалён в Python 3.
Это вспомогательный модуль для sunaudiodev, который определяет полезные символические
константы, такие как MIN_GAIN, MAX_GAIN, SPEAKER и т.д.
Имена констант совпадают с именами, используемыми в C-заголовочном файле
<sun/audioio.h>, с удалённой начальной строкой AUDIO_.