Как программно узнать возможности аудиоустройства ALSA в Linux, не открывая устройство

StackOverflow https://stackoverflow.com/questions/1866673

  •  18-09-2019
  •  | 
  •  

Вопрос

Как мне узнать возможности устройств ALSA, не открывая устройство первым?Проблема в том, что мне нужно предоставить параметры для snd_pcm_open() функция для использования тестовых функций, что для меня глупо.Зачем спрашивать, является ли это устройством воспроизведения или записи, если я должен сначала сообщить об этом функции open?

В качестве примера я хотел бы перечислить все устройства воспроизведения, но единственный способ, который я могу придумать, - это попытаться открыть каждое устройство, которое я нахожу (с snd_device_name_hint()) и попробуйте открыть их в режиме воспроизведения, и если мне удастся открыть, все будет в порядке.

Проблема в том, что со всеми возможными вариациями (частота дискретизации, каналы и т.д.) было бы ужасно большое количество open(), которые мне нужно выполнить, чтобы узнать параметры.

Это было полезно?

Решение

Используйте snd_ctl_next для перебора всех устройств, затем snd_ctl_open для получения информации об устройстве - это не то же самое, что snd_pcm_open, который может завершиться ошибкой, если устройство открыто другой программой или у вас неправильные настройки.

Он довольно плотный, но вот некоторый код с открытым исходным кодом, который повторяет все устройства ALSA, которые вы могли бы посмотреть: https://app.assembla.com/spaces/portaudio/git/source/master/src/hostapi/alsa/pa_linux_alsa.c - найдите BuildDeviceList, чтобы начать.

Другие советы

Это были мои первые требования к проектам linux / unix, где мне нужно знать обо всех доступных возможностях аудиоустройств.Затем мне нужно использовать эти устройства для захвата и воспроизведения аудио.То, что я сделал, довольно просто.Существует команда linux / unix, которая используется для поиска устройств с помощью утилиты alsa в Linux.

Это так:

aplay -l

Теперь то, что я сделал, это просто создал программу для выдачи информации, подобной этой, от alsa.

Для всех желающих я создал библиотеку (.so) и пример приложения, демонстрирующий использование этой библиотеки в c ++.

Результат моей библиотеки выглядит следующим образом-

[root@~]# ./IdeaAudioEngineTest
HDA Intel plughw:0,0
HDA Intel plughw:0,2

Эта библиотека также может захватывать и воспроизводить аудиоданные в режиме реального времени.

Он доступен вместе с документацией в Библиотека IdeaAudio с дуплексным звуком Alsa

При условии, что вы можете выполнить команду командной строки.Тогда aplay - ваш друг.

http://alsa.opensrc.org/Aplay

аплей - л

список всех звуковых карт и цифрового аудио устройства

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top