首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Qt:获取Linux中可用音频设备的列表

Qt:获取Linux中可用音频设备的列表
EN

Stack Overflow用户
提问于 2011-11-14 21:24:08
回答 2查看 3.4K关注 0票数 3

我想要获取我的Linux系统上所有可用的音频设备的列表。然后,我会将此列表显示在一个组合框中,用户将从该组合框中选择要用于录制/回放的设备。根据用户的选择,我将构建用于录制/回放的QAudioInputQAudioOutput

根据Qt文档,这可以使用QAudioDeviceInfo::availableDevices静态方法来完成。此方法返回系统中所有可用音频设备的列表。

我已经使用此方法列出了音频设备的数量。这个方法应该返回一个只包含两个元素的列表,因为我的系统中安装了两个声卡(一个在主板上,另一个是USB设备)。但它返回了一个包含23个项目的列表。当我访问他们的名字时,我得到了类似下面的东西-

代码语言:javascript
复制
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获取。

我不想列出所有这些名称供用户选择。我想列出像这样的东西-

代码语言:javascript
复制
HDA-Intel
USB-Audio

然后用户可以从中选择他们想要的声卡。

有没有办法使用Qt来完成这项工作?如果不是,我真的很想知道这里还可以使用哪些替代方案。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-09 04:30:49

显然,要做到这一点,唯一的方法是从Qt启动aplay/arecord进程,从该进程获得结果输出,并解析输出字符串以查找卡名和相应的ID。由于这种方法过于依赖于这些进程的输出字符串格式,所以我没有使用它。

相反,我选择了PulseAudio服务器来获取我系统上的可用设备。我还将它用于音频I/O,因为它提供了比Qt的多媒体API更好的控制。

票数 -1
EN

Stack Overflow用户

发布于 2011-11-29 00:44:04

我知道这叫做变通方法,但是你可以通过在你的列表中列出CARD=的不同值来获得这个信息:在你的例子中,英特尔和默认。

如果你的应用程序被认为是跨平台的,那么这个命令在其他操作系统下会返回什么?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8122235

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档