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

ossaudiodev.md

253 строк · 26.8 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/3.12/library/ossaudiodev.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# [`ossaudiodev`](https://python-all.ru/3.12/library/ossaudiodev.html#module-ossaudiodev) – Доступ к аудиоустройствам, совместимым с OSS89Устарело с версии 3.11, будет удалено в версии 3.13: Модуль [`ossaudiodev`](https://python-all.ru/3.12/library/ossaudiodev.html#module-ossaudiodev) устарел (см. [**PEP 594**](https://python-all.ru/3.12/library/ossaudiodev.html) для подробностей).1011---1213Этот модуль предоставляет доступ к аудиоинтерфейсу OSS (Open Sound System). OSS поддерживается многими системами Unix – как с открытым исходным кодом, так и коммерческими – и является стандартным аудиоинтерфейсом для Linux и последних версий FreeBSD.1415Изменено в версии 3.3: Операции в этом модуле теперь вызывают [`OSError`](https://python-all.ru/3.12/library/exceptions.html#OSError) вместо [`IOError`](https://python-all.ru/3.12/library/exceptions.html#IOError).1617> **См. также**18>19> **[Руководство программиста Open Sound System](https://python-all.ru/3.12/library/ossaudiodev.html)**20>21> официальная документация для OSS C API22>23> Модуль определяет большое количество констант, предоставляемых драйвером устройства OSS; список см. в `<sys/soundcard.h>` на Linux или FreeBSD.2425[`ossaudiodev`](https://python-all.ru/3.12/library/ossaudiodev.html#module-ossaudiodev) определяет следующие переменные и функции:2627#### `exception ossaudiodev.OSSAudioError`2829Это исключение вызывается при определенных ошибках. Аргументом является строка, описывающая, что пошло не так.3031(Если [`ossaudiodev`](https://python-all.ru/3.12/library/ossaudiodev.html#module-ossaudiodev) получает ошибку от системного вызова, такого как `open()`, `write()` или `ioctl()`, он вызывает [`OSError`](https://python-all.ru/3.12/library/exceptions.html#OSError). Ошибки, обнаруженные непосредственно [`ossaudiodev`](https://python-all.ru/3.12/library/ossaudiodev.html#module-ossaudiodev), приводят к [`OSSAudioError`](https://python-all.ru/3.12/library/ossaudiodev.html#ossaudiodev.OSSAudioError).)3233(Для обратной совместимости класс исключения также доступен как `ossaudiodev.error`.)3435#### `ossaudiodev.open(mode)`3637#### `ossaudiodev.open(device, mode)`3839Открывает аудиоустройство и возвращает объект аудиоустройства OSS. Этот объект поддерживает множество методов, похожих на файловые, таких как `read()`, `write()` и `fileno()` (хотя есть тонкие различия между традиционной семантикой чтения/записи Unix и семантикой аудиоустройств OSS). Он также поддерживает ряд специфических для аудио методов; полный список методов см. ниже.4041*device* – это имя файла аудиоустройства для использования. Если оно не указано, модуль сначала ищет в переменной окружения `AUDIODEV` устройство для использования. Если не найдено, используется `/dev/dsp`.4243*mode* – одно из значений: `'r'` для доступа только на чтение (запись), `'w'` для доступа только на запись (воспроизведение) и `'rw'` для обоих. Поскольку многие звуковые карты позволяют только одному процессу открыть записывающее или воспроизводящее устройство одновременно, рекомендуется открывать устройство только для требуемой операции. Кроме того, некоторые звуковые карты работают в полудуплексном режиме: их можно открыть для чтения или записи, но не для того и другого одновременно.4445Обратите внимание на необычный синтаксис вызова: *первый* аргумент необязателен, а второй обязателен. Это исторический артефакт для совместимости со старым модулем `linuxaudiodev`, который [`ossaudiodev`](https://python-all.ru/3.12/library/ossaudiodev.html#module-ossaudiodev) заменяет.4647#### `ossaudiodev.openmixer([device])`4849Открывает микшерное устройство и возвращает объект микшерного устройства OSS. *device* – это имя файла микшерного устройства для использования. Если оно не указано, модуль сначала ищет в переменной окружения `MIXERDEV` устройство для использования. Если не найдено, используется `/dev/mixer`.5051## Объекты аудиоустройств5253Перед записью или чтением с аудиоустройства необходимо вызвать три метода в правильном порядке:54551. `setfmt()` для установки формата вывода562. `channels()` для установки количества каналов573. `speed()` для установки частоты дискретизации5859В качестве альтернативы можно использовать метод `setparameters()`, чтобы установить все три аудиопараметра одновременно. Это удобнее, но может быть не таким гибким во всех случаях.6061Объекты аудиоустройств, возвращаемые [`open()`](https://python-all.ru/3.12/library/ossaudiodev.html#ossaudiodev.open), определяют следующие методы и (доступные только для чтения) атрибуты:6263#### `oss_audio_device.close()`6465Явно закрывает аудиоустройство. После завершения записи или чтения с аудиоустройства его следует явно закрыть. Закрытое устройство нельзя использовать повторно.6667#### `oss_audio_device.fileno()`6869Возвращает файловый дескриптор, связанный с устройством.7071#### `oss_audio_device.read(size)`7273Читает *size* байт из аудиовхода и возвращает их в виде строки Python. В отличие от большинства драйверов устройств Unix, аудиоустройства OSS в блокирующем режиме (по умолчанию) будут блокироваться [`read()`](https://python-all.ru/3.12/library/ossaudiodev.html#ossaudiodev.oss_audio_device.read) до тех пор, пока не станет доступен весь запрошенный объем данных.7475#### `oss_audio_device.write(data)`7677Записывает [объект, подобный байтам](https://python-all.ru/3.12/glossary.html#term-bytes-like-object) *data* в аудиоустройство и возвращает количество записанных байт. Если аудиоустройство находится в блокирующем режиме (по умолчанию), все данные всегда записываются (это отличается от обычной семантики устройств Unix). Если устройство находится в неблокирующем режиме, некоторые данные могут быть не записаны – см. [`writeall()`](https://python-all.ru/3.12/library/ossaudiodev.html#ossaudiodev.oss_audio_device.writeall).7879Изменено в версии 3.5: Теперь принимается записываемый [байтоподобный объект](https://python-all.ru/3.12/glossary.html#term-bytes-like-object).8081#### `oss_audio_device.writeall(data)`8283Записывает [объект, подобный байтам](https://python-all.ru/3.12/glossary.html#term-bytes-like-object) *data* в аудиоустройство: ждёт, пока устройство сможет принять данные, записывает столько, сколько оно готово принять, и повторяет, пока *data* не будет полностью записан. Если устройство находится в блокирующем режиме (по умолчанию), этот метод работает так же, как [`write()`](https://python-all.ru/3.12/library/ossaudiodev.html#ossaudiodev.oss_audio_device.write); [`writeall()`](https://python-all.ru/3.12/library/ossaudiodev.html#ossaudiodev.oss_audio_device.writeall) полезен только в неблокирующем режиме. Не возвращает значение, так как объём записанных данных всегда равен объёму переданных данных.8485Изменено в версии 3.5: Теперь принимается записываемый [байтоподобный объект](https://python-all.ru/3.12/glossary.html#term-bytes-like-object).8687Изменено в версии 3.2: Объекты аудиоустройств также поддерживают протокол контекстного менеджера, то есть их можно использовать в инструкции [`with`](https://python-all.ru/3.12/reference/compound_stmts.html#with).8889Следующие методы соответствуют ровно одному системному вызову `ioctl()`. Соответствие очевидно: например, `setfmt()` соответствует ioctl `SNDCTL_DSP_SETFMT`, а `sync()``SNDCTL_DSP_SYNC` (это может быть полезно при обращении к документации OSS). Если соответствующий `ioctl()` завершается ошибкой, все они вызывают [`OSError`](https://python-all.ru/3.12/library/exceptions.html#OSError).9091#### `oss_audio_device.nonblock()`9293Переводит устройство в неблокирующий режим. После перехода в неблокирующий режим вернуть его в блокирующий невозможно.9495#### `oss_audio_device.getfmts()`9697Возвращает битовую маску форматов аудиовыхода, поддерживаемых звуковой картой. Некоторые из форматов, поддерживаемых OSS:9899| Формат | Описание |100| --- | --- |101| `AFMT_MU_LAW` | логарифмическое кодирование (используется в файлах Sun `.au` и `/dev/audio`) |102| `AFMT_A_LAW` | логарифмическое кодирование |103| `AFMT_IMA_ADPCM` | сжатый формат 4:1, определённый Ассоциацией интерактивного мультимедиа |104| `AFMT_U8` | Беззнаковое 8-битное аудио |105| `AFMT_S16_LE` | Знаковое 16-битное аудио с порядком байтов от младшего к старшему (используется процессорами Intel) |106| `AFMT_S16_BE` | Знаковое 16-битное аудио с порядком байтов от старшего к младшему (используется 68k, PowerPC, Sparc) |107| `AFMT_S8` | Знаковое 8-битное аудио |108| `AFMT_U16_LE` | Беззнаковое 16-битное аудио с порядком от младшего к старшему |109| `AFMT_U16_BE` | Беззнаковое 16-битное аудио с порядком от старшего к младшему |110111Обратитесь к документации OSS за полным списком аудиоформатов и учтите, что большинство устройств поддерживают только подмножество этих форматов. Некоторые старые устройства поддерживают только `AFMT_U8`; наиболее распространённый формат, используемый сегодня, – `AFMT_S16_LE`.112113#### `oss_audio_device.setfmt(format)`114115Пытается установить текущий аудиоформат в *format* – см. список [`getfmts()`](https://python-all.ru/3.12/library/ossaudiodev.html#ossaudiodev.oss_audio_device.getfmts). Возвращает аудиоформат, который был установлен (может отличаться от запрошенного). Также может использоваться для получения текущего аудиоформата: для этого нужно передать «аудиоформат» `AFMT_QUERY`.116117#### `oss_audio_device.channels(nchannels)`118119Устанавливает количество выходных каналов в *nchannels*. Значение 1 означает монофонический звук, 2 – стереофонический. Некоторые устройства могут иметь более 2 каналов, а некоторые высококлассные устройства могут не поддерживать моно. Возвращает количество каналов, которое было установлено.120121#### `oss_audio_device.speed(samplerate)`122123Пытается установить частоту дискретизации аудио в *samplerate* отсчётов в секунду. Возвращает фактически установленную частоту. Большинство звуковых устройств не поддерживают произвольные частоты дискретизации. Распространённые частоты:124125| Частота | Описание |126| --- | --- |127| 8000 | частота по умолчанию для `/dev/audio` |128| 11025 | запись речи |129| 22050 |  |130| 44100 | аудио качества CD (16 бит/отсчёт, 2 канала) |131| 96000 | аудио качества DVD (24 бита/отсчёт) |132133#### `oss_audio_device.sync()`134135Ожидает, пока звуковое устройство воспроизведёт все байты из своего буфера. (Это происходит неявно при закрытии устройства.) В документации OSS рекомендуется закрывать и заново открывать устройство, а не использовать [`sync()`](https://python-all.ru/3.12/library/ossaudiodev.html#ossaudiodev.oss_audio_device.sync).136137#### `oss_audio_device.reset()`138139Немедленно останавливает воспроизведение или запись и возвращает устройство в состояние, в котором оно может принимать команды. Документация OSS рекомендует закрывать и заново открывать устройство после вызова [`reset()`](https://python-all.ru/3.12/library/ossaudiodev.html#ossaudiodev.oss_audio_device.reset).140141#### `oss_audio_device.post()`142143Уведомляет драйвер о вероятной паузе в выводе, чтобы устройство могло более разумно обработать эту паузу. Этот метод можно использовать после воспроизведения короткого звукового эффекта, перед ожиданием ввода от пользователя или перед выполнением дискового ввода-вывода.144145Следующие удобные методы объединяют несколько ioctl или один ioctl и несколько простых вычислений.146147#### `oss_audio_device.setparameters(format, nchannels, samplerate[, strict=False])`148149Устанавливает ключевые параметры аудио-дискретизации – формат сэмпла, количество каналов и частоту дискретизации – одним вызовом метода. *format*, *nchannels* и *samplerate* должны быть заданы так, как указано в методах [`setfmt()`](https://python-all.ru/3.12/library/ossaudiodev.html#ossaudiodev.oss_audio_device.setfmt), [`channels()`](https://python-all.ru/3.12/library/ossaudiodev.html#ossaudiodev.oss_audio_device.channels) и [`speed()`](https://python-all.ru/3.12/library/ossaudiodev.html#ossaudiodev.oss_audio_device.speed). Если *strict* равен true, [`setparameters()`](https://python-all.ru/3.12/library/ossaudiodev.html#ossaudiodev.oss_audio_device.setparameters) проверяет, был ли каждый параметр действительно установлен в запрошенное значение, и в противном случае вызывает [`OSSAudioError`](https://python-all.ru/3.12/library/ossaudiodev.html#ossaudiodev.OSSAudioError). Возвращает кортеж (*format*, *nchannels*, *samplerate*), показывающий значения параметров, которые были фактически установлены драйвером устройства (то есть те же, что возвращают [`setfmt()`](https://python-all.ru/3.12/library/ossaudiodev.html#ossaudiodev.oss_audio_device.setfmt), [`channels()`](https://python-all.ru/3.12/library/ossaudiodev.html#ossaudiodev.oss_audio_device.channels) и [`speed()`](https://python-all.ru/3.12/library/ossaudiodev.html#ossaudiodev.oss_audio_device.speed)).150151Например,152153```python154(fmt, channels, rate) = dsp.setparameters(fmt, channels, rate)155```156157эквивалентна158159```python160fmt = dsp.setfmt(fmt)161channels = dsp.channels(channels)162rate = dsp.rate(rate)163```164165#### `oss_audio_device.bufsize()`166167Возвращает размер аппаратного буфера в сэмплах.168169#### `oss_audio_device.obufcount()`170171Возвращает количество сэмплов, которые ещё находятся в аппаратном буфере и ожидают воспроизведения.172173#### `oss_audio_device.obuffree()`174175Возвращает количество сэмплов, которые можно поместить в аппаратный буфер для воспроизведения без блокировки.176177Объекты аудиоустройств также поддерживают несколько атрибутов только для чтения:178179#### `oss_audio_device.closed`180181Логическое значение, указывающее, было ли устройство закрыто.182183#### `oss_audio_device.name`184185Строка, содержащая имя файла устройства.186187#### `oss_audio_device.mode`188189Режим ввода-вывода файла: `"r"`, `"rw"` или `"w"`.190191## Объекты микшерных устройств192193Объект микшера предоставляет два метода, похожих на файловые:194195#### `oss_mixer_device.close()`196197Этот метод закрывает открытый файл микшерного устройства. Любые дальнейшие попытки использовать микшер после закрытия этого файла вызовут исключение [`OSError`](https://python-all.ru/3.12/library/exceptions.html#OSError).198199#### `oss_mixer_device.fileno()`200201Возвращает номер файлового дескриптора открытого файла микшерного устройства.202203Изменено в версии 3.2: Объекты микшера также поддерживают протокол менеджера контекста.204205Оставшиеся методы относятся к аудио-микшированию:206207#### `oss_mixer_device.controls()`208209Этот метод возвращает битовую маску, описывающую доступные элементы управления микшера («элемент управления» – это конкретный микшируемый «канал», например `SOUND_MIXER_PCM` или `SOUND_MIXER_SYNTH`). Эта битовая маска указывает подмножество всех доступных элементов управления микшера – констант `SOUND_MIXER_*`, определённых на уровне модуля. Чтобы определить, например, поддерживает ли текущий объект микшера микшер PCM, используйте следующий код Python:210211```python212mixer=ossaudiodev.openmixer()213if mixer.controls() & (1 << ossaudiodev.SOUND_MIXER_PCM):214    # PCM поддерживается215    ... code ...216```217218Для большинства целей достаточно элементов управления `SOUND_MIXER_VOLUME` (общая громкость) и `SOUND_MIXER_PCM`, но код, использующий микшер, должен быть гибким в выборе элементов управления. Например, на Gravis Ultrasound `SOUND_MIXER_VOLUME` не существует.219220#### `oss_mixer_device.stereocontrols()`221222Возвращает битовую маску, указывающую стереорегуляторы микшера. Если бит установлен, соответствующий регулятор стереофонический; если сброшен – регулятор либо монофонический, либо не поддерживается микшером (используйте вместе с [`controls()`](https://python-all.ru/3.12/library/ossaudiodev.html#ossaudiodev.oss_mixer_device.controls), чтобы определить).223224Пример получения данных из битовой маски см. в примере для функции [`controls()`](https://python-all.ru/3.12/library/ossaudiodev.html#ossaudiodev.oss_mixer_device.controls).225226#### `oss_mixer_device.reccontrols()`227228Возвращает битовую маску, определяющую регуляторы микшера, которые можно использовать для записи. Пример чтения битовой маски см. в примере для [`controls()`](https://python-all.ru/3.12/library/ossaudiodev.html#ossaudiodev.oss_mixer_device.controls).229230#### `oss_mixer_device.get(control)`231232Возвращает громкость указанного регулятора микшера. Возвращаемая громкость – это кортеж из двух элементов `(left_volume,right_volume)`. Громкость задаётся числами от 0 (тишина) до 100 (максимальная громкость). Если регулятор монофонический, всё равно возвращается кортеж из двух элементов, но оба значения громкости одинаковы.233234Возбуждает [`OSSAudioError`](https://python-all.ru/3.12/library/ossaudiodev.html#ossaudiodev.OSSAudioError), если указан недопустимый регулятор, или [`OSError`](https://python-all.ru/3.12/library/exceptions.html#OSError), если указан неподдерживаемый регулятор.235236#### `oss_mixer_device.set(control, (left, right))`237238Устанавливает громкость указанного регулятора микшера в значение `(left,right)`. `left` и `right` должны быть целыми числами от 0 (тишина) до 100 (максимальная громкость). В случае успеха возвращается новый уровень громкости в виде кортежа из двух элементов. Обратите внимание: он может не совпадать с указанным значением из-за ограниченного разрешения микшера некоторых звуковых карт.239240Возбуждает [`OSSAudioError`](https://python-all.ru/3.12/library/ossaudiodev.html#ossaudiodev.OSSAudioError), если указан недопустимый регулятор микшера или заданные значения громкости выходят за допустимый диапазон.241242#### `oss_mixer_device.get_recsrc()`243244Этот метод возвращает битовую маску, указывающую, какие регуляторы в данный момент используются как источник записи.245246#### `oss_mixer_device.set_recsrc(bitmask)`247248Вызовите эту функцию, чтобы указать источник записи. В случае успеха возвращает битовую маску, указывающую новый источник (или источники) записи; возбуждает [`OSError`](https://python-all.ru/3.12/library/exceptions.html#OSError), если указан недопустимый источник. Чтобы установить текущий источник записи на микрофонный вход:249250```python251mixer.setrecsrc (1 << ossaudiodev.SOUND_MIXER_MIC)252```253