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

时间:2009-12-08 12:34:05

标签: c linux audio alsa

如何在不先打开设备的情况下找到ALSA设备的功能?问题是,我需要向snd_pcm_open()函数提供参数以使用对我来说很愚蠢的测试函数。如果我必须首先告诉它打开功能,为什么要问这是播放还是录音设备?

作为一个例子,我想列出所有播放设备,但我能想到的唯一方法是尝试打开我找到的每个设备(使用snd_device_name_hint())并尝试在播放模式下打开它们,如果我设法打开,一切都很好。

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

3 个答案:

答案 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

该库还可以捕获和回放实时音频数据。

可在IdeaAudio library with Duplex Alsa Audio

中找到相关文档

答案 2 :(得分:-1)

提供您可以执行shell命令。然后aplay就是你的朋友。

http://alsa.opensrc.org/Aplay

aplay -l <​​/ p>

  

列出所有声卡和数字音频   设备