ossaudiodev
— Доступ к OSS-совместимым аудиоустройствам¶
Модуль позволяет получить доступ к звуковому интерфейсу OSS (Open Sound System). OSS доступен для широкого спектра Unices с открытым исходным кодом и является стандартным звуковым интерфейсом для Linux и последних версий FreeBSD.
См.также
- Руководство программиста Open Sound System
- официальная документация для OSS C API
Модуль определяет большое количество констант, предоставляемых драйвером
устройства OSS; список см. в разделе <sys/soundcard.h>
на Linux или FreeBSD.
ossaudiodev
определяет следующие переменные и функции:
-
exception
ossaudiodev.
OSSAudioError
¶ Это исключение возникает при определенных ошибках. Аргумент - это строка, описывающий, что что-то пошло не так.
(Если
ossaudiodev
получает ошибку из системного вызова, такого какopen()
,write()
илиioctl()
, он вызываетOSError
. Ошибки, обнаруженные непосредственноossaudiodev
, приводят кOSSAudioError
.)(Для обратной совместимости класс исключений также доступен как
ossaudiodev.error
.
-
ossaudiodev.
open
(mode)¶ -
ossaudiodev.
open
(device, mode) Открыть аудиоустройство и возвращает объект аудиоустройства OSS. Этот объект поддерживает множество файловых методов, таких как
read()
,write()
иfileno()
(хотя существуют тонкие различия между традиционной семантикой чтения/записи Unix и семантикой звуковых устройств OSS). Она также поддерживает ряд методов, специфичных для звука; полный список методов см. ниже.device - это используемое имя файла аудиоустройства. Если он не указан, модуль сначала выполняет поиск используемого устройства в переменной среды
AUDIODEV
. Если не найден, он падает обратно в/dev/dsp
.mode является одним из
'r'
для доступа только для чтения (запись),'w'
для доступа только для записи (воспроизведение) и'rw'
для обоих. Поскольку многие звуковые карты позволяют только одному процессу открывать записывающее устройство или проигрыватель одновременно, рекомендуется открывать устройство только для необходимой активности. Далее некоторые звуковые карты полудуплексные: их можно открыть для чтения или письма, но не оба сразу.Обратите внимание на необычный синтаксис вызова: аргумент first необязателен, а второй требуется. Это - исторический артефакт для совместимости с более старым модулем
linuxaudiodev
, который заменяетossaudiodev
.
-
ossaudiodev.
openmixer
([device])¶ Открыть смесительное устройство и возвращает объект смесительного устройства OSS. device - имя файла устройства микшера для использования. Если он не указан, модуль сначала выполняет поиск используемого устройства в переменной среды
MIXERDEV
. Если не найден, он падает обратно в/dev/mixer
.
Объекты звукового устройства¶
Прежде чем писать или читать с аудиоустройства, необходимо вызвать три метода в правильном порядке:
setfmt()
для установки формата выводаchannels()
для установки количества каналовspeed()
для установки частоты выборок
В качестве альтернативы можно использовать метод setparameters()
, чтобы установить
все три аудиопараметра одновременно. Это более удобно, но может быть не столь
гибким во всех случаях.
Объекты аудиоустройства возвращенный по open()
определяют следующие методы и
(только для чтения) атрибуты:
-
oss_audio_device.
close
()¶ Явно закрыть аудиоустройство. После завершения записи или чтения с аудиоустройства его следует явно закрыть. Невозможно повторно выполнить используемый закрытого устройства.
-
oss_audio_device.
fileno
()¶ Возвращает файловый дескриптор, связанный с устройством.
-
oss_audio_device.
read
(size)¶ Прочитать size байт от звукового входа и возвращает их как Python строка. В отличие от большинства драйверов Unix, звуковые устройства OSS в режиме блокировки (по умолчанию) будут блокировать
read()
до тех пор, пока не будет доступен весь запрошенный объем данных.
-
oss_audio_device.
write
(data)¶ Записать байтоподобный объект data на аудиоустройство и возвращает количество записанных байтов. Если аудиоустройство находится в режиме блокировки (по умолчанию), то все данные записываются всегда (опять же, это отличается от обычной семантики устройства Unix). Если устройство находится в неблокирующем режиме, некоторые данные могут не быть записан — см.
writeall()
.Изменено в версии 3.5: Теперь принимается возможность записи байтоподобного объекта.
-
oss_audio_device.
writeall
(data)¶ Записать байтоподобный объект data на аудиоустройство: ждет, пока аудиоустройство не сможет принять данные, запишет столько данных, сколько примет, и повторяет, пока data не будет полностью записан. Если устройство находится в режиме блокировки (по умолчанию), это имеет тот же эффект, что и
write()
;writeall()
используется только в неблокирующем режиме. Не имеет возвращает значение, так как количество записанных данных всегда равно количеству предоставленных данных.Изменено в версии 3.5: Теперь принимается возможность записи байтоподобного объекта.
Изменено в версии 3.2: Аудио объекты устройства также поддерживают протокол управления контекст,
т.е. они могут быть используемый в with
инструкция.
Следующие методы каждая карта точно к одному системному вызову ioctl()
.
Соответствие очевидно: например, setfmt()
соответствует SNDCTL_DSP_SETFMT
ioctl, а
sync()
- SNDCTL_DSP_SYNC
(это может быть полезно при обращении к документации
OSS). Если лежащие в основе ioctl()
терпят неудачу, они все поднимают
OSError
.
-
oss_audio_device.
nonblock
()¶ Переведите устройство в неблокирующий режим. Однажды в неблокировании режима, нет никакого пути к возвращает этого к блокированию режима.
-
oss_audio_device.
getfmts
()¶ Возвращает битовую маску форматов аудиовыхода, поддерживаемых звуковой картой. Некоторые форматы, поддерживаемые OSS:
Формат Описание AFMT_MU_LAW
Логарифмическая кодировка (используется в Sun .au
файлы и/dev/audio
)AFMT_A_LAW
логарифмическая кодировка AFMT_IMA_ADPCM
формат сжатия 4:1, определенный в Interactive Multimedia Association (IMA) AFMT_U8
8-битный звук без знака AFMT_S16_LE
Знаковое 16-битное аудио, порядок байтов в little-endian (используется в Intel процессорах) AFMT_S16_BE
16-битное аудио со знаком, порядок байтов с big-endian (используется в 68k, PowerPC, Sparc) AFMT_S8
Знаковый, 8 битное аудио AFMT_U16_LE
16-битное аудио little-endian без знака AFMT_U16_BE
16-битный звук с big-endian без знака Полный список аудиоформатов см. в документации по OSS и обратите внимание, что большинство устройств поддерживают только подмножество этих форматов. Некоторые старые устройства поддерживают только
AFMT_U8
; наиболее распространенным форматом используемый сегодня являетсяAFMT_S16_LE
.
-
oss_audio_device.
setfmt
(format)¶ Попробуйте установить текущий аудиоформат в format — см.
getfmts()
для списка. Возвращает аудиоформат устройства, который может не быть запрошенным форматом. Может быть также используемый для возвращает текущего аудио формата — делается это путем передачи «аудиоформата»AFMT_QUERY
.
-
oss_audio_device.
channels
(nchannels)¶ Установите количество выходных каналов равным nchannels. A значение 1 обозначает монофонический звук, 2 стереофонический. Некоторые устройства могут иметь более 2 каналов, а некоторые устройства высшего класса могут не поддерживать моно. Возвращает количество каналов, в которых установлено устройство.
-
oss_audio_device.
speed
(samplerate)¶ Попробуйте установить частоту дискретизации звука в samplerate отсчетов в секунду. Возвращает фактически установленная ставка. Большинство звуковых устройств не поддерживают произвольные частоты дискретизации. Общие скорости:
Скорость Описание 8000 Скорость по умолчанию для /dev/audio
11025 Запись речи 22050 44100 Качество звука CD (16 бит/семпл и 2 канала) 96000 Качество звука DVD (24 бит/сэмпл)
-
oss_audio_device.
sync
()¶ Подождите, пока звуковое устройство не воспроизведет каждый байт в своем буфере. (Это происходит неявно при закрытии устройства.) в документации по OSS рекомендуется закрывать и повторно открывать устройство, а не использовать
sync()
.
-
oss_audio_device.
reset
()¶ Немедленно прекратите играть или делать запись и возвращает устройство к состояние, где это может принять команды. В документации по OSS рекомендуется закрыть и повторно открыть устройство после вызова
reset()
.
-
oss_audio_device.
post
()¶ Сообщите водителю, что в выводе может быть пауза, что позволит устройству более интеллектуально обрабатывать паузу. Это можно использовать после воспроизведения точечного звукового эффекта, перед ожиданием ввода данных пользователем или перед выполнением I/O диска.
Следующие методы удобства объединяют несколько ioctls, или один ioctl и некоторые простые вычисления.
-
oss_audio_device.
setparameters
(format, nchannels, samplerate[, strict=False])¶ Установить параметры ключевого аудио сэмплирования — формат сэмпла, количество каналов и скорость сэмплирования — в одиночный вызов метода. format, nchannels и samplerate должны соответствовать методам
setfmt()
,channels()
иspeed()
. Если strict верен, проверкиsetparameters()
, чтобы видеть, был ли каждый параметр на самом деле установлен на запрошенный значение и поднимаетOSSAudioError
если нет. Возвращает кортеж (format, nchannels, samplerate) указание на параметр значения, которые были на самом деле установлены драйвером устройства (т.е. то же как возвращает значенияsetfmt()
,channels()
иspeed()
).Например,:
(fmt, channels, rate) = dsp.setparameters(fmt, channels, rate)
эквивалентно:
fmt = dsp.setfmt(fmt) channels = dsp.channels(channels) rate = dsp.rate(rate)
-
oss_audio_device.
bufsize
()¶ Возвращает размер аппаратного буфера в выборках.
-
oss_audio_device.
obufcount
()¶ Возвращает количество образцов, которые находятся в аппаратном буфере, еще не воспроизводимом.
-
oss_audio_device.
obuffree
()¶ Возвращает количество образцов, которые могут быть поставлены в очередь в аппаратный буфер для воспроизведения без блокировки.
Аудио объекты устройства также поддерживают несколько атрибуты: только для чтения
-
oss_audio_device.
closed
¶ Логическое значение, указывающее, было ли устройство закрыто.
-
oss_audio_device.
name
¶ Строка, содержащая имя файла устройства.
-
oss_audio_device.
mode
¶ Режим I/O для файла
"r"
,"rw"
или"w"
.
Объекты устройства микшера¶
Объект микшера предоставляет два файловых метода:
-
oss_mixer_device.
close
()¶ Этот метод закрывает открытый файл микшерного устройства. Любые дальнейшие попытки использования смесителя после закрытия этого файла вызовут
OSError
.
-
oss_mixer_device.
fileno
()¶ Возвращает номер дескриптора файла открытого микшерного устройства.
Изменено в версии 3.2: Объекты микшера также поддерживают протокол управления контекст.
Остальные способы специфичны для микширования звука:
-
oss_mixer_device.
controls
()¶ Этот метод возвращает bitmask определение доступных средств управления миксером («Контроль», являющийся определенным mixable «каналом», таких как
SOUND_MIXER_PCM
илиSOUND_MIXER_SYNTH
). Этот bitmask указывает на подмножество всех доступных констант управления —SOUND_MIXER_*
миксера, определенных на уровне модуля. Чтобы определить, поддерживает ли текущий объект микшера микшер PCM, используйте следующий Python код:mixer=ossaudiodev.openmixer() if mixer.controls() & (1 << ossaudiodev.SOUND_MIXER_PCM): # PCM поддерживается ... код ...
В большинстве целей
SOUND_MIXER_VOLUME
(основной объем) и средства управленияSOUND_MIXER_PCM
должено хватать — но код, который использует миксер, должно быть гибким когда дело доходит до выбора средств управления миксером. На Gravis Ultrasound, например,SOUND_MIXER_VOLUME
не существует.
-
oss_mixer_device.
stereocontrols
()¶ Возвращает битовая маска, указывающая средства управления стереомикшером. Если бит установлен, соответствующее управление является стерео; если он не установлен, управление либо монофоническое, либо не поддерживается миксером (используйте в сочетании с
controls()
, чтобы определить, какой).Посмотрите пример код для функции
controls()
для примера получения данных из bitmask.
-
oss_mixer_device.
reccontrols
()¶ Возвращает битовую маску, определяющую элементы управления микшера, которые могут быть используемый для записи. Посмотрите пример код для
controls()
для примера чтения от bitmask.
-
oss_mixer_device.
get
(control)¶ Возвращает объем заданного элемента управления смесителем. Том возвращенный представляет собой 2-кортежный
(left_volume,right_volume)
. Тома указываются в виде чисел от 0 (молчание) до 100 (полный том). Если управление монофоническое, 2-кортеж по- прежнему возвращенный, но оба тома одинаковы.Вызывает
OSSAudioError
, если указан недопустимый элемент управления, илиOSError
, если указан неподдерживаемый элемент управления.
-
oss_mixer_device.
set
(control, (left, right))¶ Устанавливает объем для данного элемента управления смесителем равным
(left,right)
.left
иright
должны находиться в диапазоне от 0 (молчание) до 100 (полный том). По успеху новый том возвращенный как 2-кортеж. Следует отметить, что это может не совпадать с указанным объемом из-за ограниченного разрешения некоторых миксеров звуковых карт.Вызывает
OSSAudioError
, если указан недопустимый элемент управления микшером или указанные тома находятся за пределами допустимого диапазона.
-
oss_mixer_device.
get_recsrc
()¶ Этот метод возвращает битовуюмаску, указывающую контроль(и) в настоящее время - используемый как источник записи.
-
oss_mixer_device.
set_recsrc
(bitmask)¶ Вызовите эту функцию, чтобы указать источник записи. Возвращает битовую маску, указывающую новый источник (или источники) записи в случае успеха; вызывает
OSError
, если указан недопустимый источник. Установка текущего источника записи на микрофонный вход:mixer.setrecsrc (1 << ossaudiodev.SOUND_MIXER_MIC)