我想获取我Linux系统上所有可用音频设备的列表。然后,我将把这个列表显示在一个下拉框中,用户可以从中选择要用于录制/播放的设备。根据用户的选择,我将构建QAudioInput和QAudioOutput以进行录制/播放。
根据Qt文档,可以使用QAudioDeviceInfo :: availableDevices静态方法来完成此操作。该方法返回我的系统中所有可用音频设备的列表。
我已经使用了此方法来列出音频设备的数量。由于我的系统安装了两个声卡(一个在主板上,另一个是USB设备),因此此方法应该返回只包含两个元素的列表。但它返回了一个包含23个项目的列表。当我访问它们的名称时,我得到了以下结果 -
这背后的原因可能是后端使用了ALSA API。根据这篇文章所述,ALSA将声卡逻辑地划分为多个逻辑音频设备,并在Qt API查询驱动程序时获取这些设备。
我不想列出所有这些名称供用户选择。我想列出类似于 -
根据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来实现这个?如果不行,我真的很想知道在这里可以使用什么其他替代方法。