snd_pcm_open_preferred()

Создание дескриптора открытого соединения с предпочтительным аудио интерфейсом

Прототип:

#include <sys/asoundlib.h>
int snd_pcm_open_preferred( snd_pcm_t **handle,
int *rcard,
int *rdevice,
int mode );

Аргументы:

handle
Указатель на буфер, в котором сохраняется дескриптор соединения с аудио инетрфейсом. Он используется в последующих вызовах snd_pcm_*().
rcard
Если не равно NULL, то в этом буфере сохраняется номер карты открытого интерфейса.
rdevice
Если не равно NULL, то в этом буфере сохраняется номер устройства открытого интерфейса.
mode
Режим открытия (см. snd_pcm_open()).

Библиотека:

libasound

Описание:

Функция snd_pcm_open_preferred() является расширением snd_pcm_open(), которое пытается открыть предпочтительное (определенное системой) устройство.


Note: При использовании этой функции приложение становится более гибким, чем при использовании snd_pcm_open().

В системах, где имеется более одного PCM устройства, пользователь может отдать предпочтение одному из них. Данная функция позволяет в том числе получить его идентификаторы rcard и rdevice, если они не равны NULL.

Алгоритм поиска предпочтительного устройства:

  1. Получение сведений из конфигурационного файла /etc/system/config/audio/preferences.
  2. Если файл пуст или отсутствует, производится попытка открыть устройство программного микширования с идентификаторами device = 0 и card = 0.
  3. Производится попытка открытия устройства с идентификаторами device = 0 и card = 0.

Если ни один из пунктов списка не приводит к открытию устройства, делается вывод о том, что аудио стек не запущен.

Возвращаемое значение:

0
Успешное завершение.
-EINVAL
Некорректный аргумент mode.
-EACCES
Отсутствует разрешение на поиск в одном из каталогов префикса или для существующего устройства отсутствуют запрашиваемые разрешения.
-EINTR
Операция прервана сигналом.
-EMFILE
Процесс использует слишком много файловых дескрипторов.
-ENFILE
В системе открыто слишком много файлов.
-ENOENT
Именованное устройство не существует.
-SND_ERROR_INCOMPATIBLE_VERSION
Версия аудио драйвера не совместима с используемой приложением клиентской библиотекой.
-ENOMEM
Недостаточно памяти.

Примеры:

См. Открытие устройства.

Классификация:

ЗОСРВ «Нейтрино»

Безопасность использования
Точка остановки потока
Нет
Обработчик прерываний
Нет
Обработчик сигналов
Да
В потоке
Да

Предостережения:

Успешное открытие PCM канала не гарантирует, что имеются в достаточном количестве ресурсы аудио стека для обслуживания приложения. Эти ресурсы (например, субканалы) аллоцируются при настройке канала с помощью snd_pcm_channel_params() или snd_pcm_plugin_params().

Тематические ссылки:

snd_pcm_close(), snd_pcm_nonblock_mode(), snd_pcm_open()




Предыдущий раздел: Библиотека libasound