Qt: Получить список доступных аудиоустройств в Linux - PullRequest
3 голосов
/ 14 ноября 2011

Я хочу получить список всех аудиоустройств, которые доступны в моей системе Linux. Затем я покажу этот список в поле со списком, из которого пользователь выберет устройство для записи / воспроизведения. Основываясь на выборе пользователя, я построю QAudioInput и QAudioOutput для записи / воспроизведения.

В соответствии с документацией Qt это можно сделать, используя QAudioDeviceInfo :: availableDevices статический метод. Этот метод возвращает список всех доступных аудиоустройств в моей системе.

Я использовал этот метод для отображения количества аудиоустройств. Этот метод должен был вернуть список, содержащий только два элемента, поскольку в моей системе установлены две звуковые карты (одна на материнской плате, другая на USB-устройстве). Но вернул список из 23 предметов. Когда я получил доступ к их именам, я получил что-то вроде ниже -

default
pulse
front:CARD=Intel,DEV=0
surround40:CARD=Intel,DEV=0
surround41:CARD=Intel,DEV=0
surround50:CARD=Intel,DEV=0
surround51:CARD=Intel,DEV=0
surround71:CARD=Intel,DEV=0
dmix:CARD=Intel,DEV=0
dsnoop:CARD=Intel,DEV=0
hw:CARD=Intel,DEV=0
plughw:CARD=Intel,DEV=0
front:CARD=default,DEV=0
surround40:CARD=default,DEV=0
surround41:CARD=default,DEV=0
surround50:CARD=default,DEV=0
surround51:CARD=default,DEV=0
surround71:CARD=default,DEV=0
iec958:CARD=default,DEV=0
dmix:CARD=default,DEV=0
dsnoop:CARD=default,DEV=0
hw:CARD=default,DEV=0
plughw:CARD=default,DEV=0

Причиной этого, вероятно, является ALSA API , который используется в серверной части. Согласно этой статье ALSA логически разбивает звуковую карту на несколько логических аудиоустройств, которые выбираются Qt API при запросе драйвера.

Я не хочу перечислять все эти имена для выбора пользователем. Я хочу перечислить что-то вроде -

HDA-Intel
USB-Audio

, из которого пользователи затем выбирают желаемую звуковую карту.

Есть ли способ сделать это с помощью Qt? Если это не так, я действительно хотел бы знать, какие другие альтернативы могут быть использованы здесь.

Ответы [ 2 ]

0 голосов
/ 09 декабря 2011

Видимо, единственный способ сделать это - запустить процесс aplay / arecord из Qt, получить выходные данные процесса и проанализировать выходную строку, чтобы найти имена карт и соответствующие идентификаторы. Поскольку этот подход слишком зависит от формата выходной строки этих процессов, я не использовал его.

Вместо этого я выбрал сервер PulseAudio для загрузки доступных устройств в моей системе. Я также использовал его для ввода / вывода звука, поскольку он обеспечивает намного лучший контроль, чем мультимедийный API Qt.

0 голосов
/ 28 ноября 2011

Я знаю, что это называется обходным путем, но, похоже, вы располагаете этой информацией, перечислив различные значения CARD = в своем списке: в вашем примере Intel и по умолчанию.

Если ваше приложение должно бытькросс-платформенный, что эта команда возвращает в других операционных системах?

...