如何在不先打开设备的情况下找到ALSA设备的功能?问题是,我需要向snd_pcm_open()
函数提供参数以使用对我来说很愚蠢的测试函数。如果我必须首先告诉它打开功能,为什么要问这是播放还是录音设备?
作为一个例子,我想列出所有播放设备,但我能想到的唯一方法是尝试打开我找到的每个设备(使用snd_device_name_hint()
)并尝试在播放模式下打开它们,如果我设法打开,一切都很好。
问题是,在所有可能的变化(采样率,通道等)的情况下,我需要执行大量的open()以找出参数。
答案 0 :(得分:7)
使用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以开始使用。
答案 1 :(得分:0)
这是我对linux / unix项目的第一个要求,我需要了解所有可用的音频设备功能。然后我需要使用这些设备来捕获和播放音频。我所做的很简单。有一个linux / unix命令用于通过linux中的alsa实用程序查找设备。
是:
aplay -l
现在我所做的只是制作一个程序,像alsa一样给出out。
为了每个人的帮助,我创建了一个(.so)库和一个示例应用程序,演示了如何在c ++中使用这个库。
我的库的输出就像 -
[root@~]# ./IdeaAudioEngineTest
HDA Intel plughw:0,0
HDA Intel plughw:0,2
该库还可以捕获和回放实时音频数据。
中找到相关文档答案 2 :(得分:-1)