Get the list of available audio devices in Linux
-
I want to get the list of all audio devices that are available on my Linux system. Then I will show this list into a combo box from which user will select the device to use for recording/playback. Based on the user's selection, I will then construct "QAudioInput":http://doc.qt.nokia.com/4.7/qaudioinput.html and "QAudioOutput":http://doc.qt.nokia.com/4.7/qaudiooutput.html for recording/playback.
According to the Qt documentation, this can be done using "QAudioDeviceInfo::availableDevices":http://doc.qt.nokia.com/4.7/qaudiodeviceinfo.html#availableDevices static method. This method returns a list of all the available audio devices in my system.
I have used this method to list the number of audio devices. This method should have returned a list containing only two elements since my system has two sound cards installed in it (one is in motherboard, another one is a USB device). But it returned a list containing 23 items. When I accessed their names, I got something like below -
bq. 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=0The reason behind this is probably the "ALSA API":http://www.alsa-project.org/main/index.php/Main_Page that is being used in the back-end. According to "this article":http://home.roadrunner.com/~jgglatt/tech/linuxapi.htm ALSA logically partitions a sound card into multiple logical audio devices, which is being fetched by the Qt API when it queries the driver.
I don't want to list all these names for the user to choose from. I want to list something like -
bq. HDA-Intel
USB-Audiofrom which users will then choose their desired sound card..
Is there any way this can be done using Qt?
-
I don't know about Qt (I think no), but you always can use QProcess and the following command:
@cat /proc/asound/cards@