如何在Linux中以编程方式查找ALSA音频设备功能,而无需打开设备

如何在不首先打开设备的情况下了解ALSA设备的功能?问题是,我需要将参数提供给snd\u pcm\u open()函数来使用测试函数,这对我来说很愚蠢。如果我必须先告诉打开功能,为什么还要问这是播放还是录制设备

例如,我想列出所有播放设备,但我能想到的唯一方法是尝试打开我找到的每个设备(使用snd\u device\u name\u hint()),并尝试在播放模式下打开它们,如果我成功打开,一切都很好

问题是,由于所有可能的变化(采样率、通道等),我需要执行大量open(),以找出参数

使用snd_ctl_next迭代所有设备,然后使用snd_ctl_open获取设备信息-这与snd_pcm_open不同,如果其他程序打开了设备或设置不正确,可能会失败

它相当密集,但这里有一些开放源代码,可以在所有ALSA设备上进行迭代,您可以查看:https://app.assembla.com/spaces/portaudio/git/source/master/src/hostapi/alsa/pa_linux_alsa.c -搜索BuildDeviceList以开始

发表评论