我想要获取我的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。根据this article的说法,ALSA在逻辑上将声卡划分为多个逻辑音频设备,当Qt查询驱动程序时,这些音频设备将由Qt获取。
我不想列出所有这些名称供用户选择。我想列出像这样的东西-
HDA-Intel
USB-Audio然后用户可以从中选择他们想要的声卡。
有没有办法使用Qt来完成这项工作?如果不是,我真的很想知道这里还可以使用哪些替代方案。
发布于 2011-12-09 04:30:49
显然,要做到这一点,唯一的方法是从Qt启动aplay/arecord进程,从该进程获得结果输出,并解析输出字符串以查找卡名和相应的ID。由于这种方法过于依赖于这些进程的输出字符串格式,所以我没有使用它。
相反,我选择了PulseAudio服务器来获取我系统上的可用设备。我还将它用于音频I/O,因为它提供了比Qt的多媒体API更好的控制。
发布于 2011-11-29 00:44:04
我知道这叫做变通方法,但是你可以通过在你的列表中列出CARD=的不同值来获得这个信息:在你的例子中,英特尔和默认。
如果你的应用程序被认为是跨平台的,那么这个命令在其他操作系统下会返回什么?
https://stackoverflow.com/questions/8122235
复制相似问题