如何在Linux中以编程方式findALSAaudio设备function,而无需打开设备

如何在不打开设备的情况下findALSA设备的function? 问题是,我需要提供参数到snd_pcm_open()函数来使用testing函数,这是愚蠢的。 为什么要问这是一个播放还是录制设备?如果我必须先把它告诉开放函数?

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

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

使用snd_ctl_next迭代所有设备,然后使用snd_ctl_open获取有关设备的信息 – 这与snd_pcm_open不同,如果另一个程序打开了设备或者设置不正确,则snd_pcm_open可能会失败。

这是相当密集的,但是这里有一些开源代码可以遍历所有你可以看到的ALSA设备: https : //app.assembla.com/spaces/portaudio/git/source/master/src/hostapi/alsa/pa_linux_alsa。 c – 搜索BuildDeviceList以开始。

这是我对linux / unix项目的第一个需求,我需要知道所有可用的音频设备功能。 然后我需要使用这些设备来捕捉和播放音频。 我所做的很简单。 有一个linux / unix命令用于在linux中通过alsa实用程序查找设备。

它是:

 aplay -l 

现在我所做的就是制作一个程序,让alsa像这个一样。

为了大家的帮助,我制作了一个(.so)库和一个示例应用程序,演示了如何在c ++中使用这个库。

我的图书馆的输出就像 –

 [root@~]# ./IdeaAudioEngineTest HDA Intel plughw:0,0 HDA Intel plughw:0,2 

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

IdeaAudio库中的文档与Duplex Alsa Audio一起提供

提供您可以执行一个shell命令。 那么aplay是你的朋友。

http://alsa.opensrc.org/Aplay

aplay -l

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