Документация Python неофициальный перевод
Содержание страницы

40.1. sunaudiodev – Доступ к аудиооборудованию Sunsunaudiodev – 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_. Так, член C play.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 – Константы, используемые с sunaudiodevSUNAUDIODEV – Constants used with sunaudiodev

Устарело с версии 2.6: Модуль SUNAUDIODEV удалён в Python 3.

Это вспомогательный модуль для sunaudiodev, который определяет полезные символические константы, такие как MIN_GAIN, MAX_GAIN, SPEAKER и т.д. Имена констант совпадают с именами, используемыми в C-заголовочном файле <sun/audioio.h>, с удалённой начальной строкой AUDIO_.