find我可以用ALSA播放PCM的所有设备

我使用ALSA来播放PCM样本。 我用这个函数打开PCMstream:

int snd_pcm_open(snd_pcm_t** pcmp, const char* name, snd_pcm_stream_t stream, int mode); 

我目前使用“默认”作为名称参数。 我希望能够select其他设备。 我无法理解的是我如何确定其他可用设备的名称。

我将USB麦克风连接到我的系统,aplay和amixer似乎检测到新设备。 我如何确定该设备的名称? 有没有任何ALSAfunction来获得可用设备的名单与他们各自的名字?

我想你可以使用snd_device_name_hint来枚举设备。 这是一个例子。 当心我没有编译它!

 char **hints; /* Enumerate sound devices */ int err = snd_device_name_hint(-1, "pcm", (void***)&hints); if (err != 0) return;//Error! Just return char** n = hints; while (*n != NULL) { char *name = snd_device_name_get_hint(*n, "NAME"); if (name != NULL && 0 != strcmp("null", name)) { //Copy name to another buffer and then free it free(name); } n++; }//End of while //Free hint buffer too snd_device_name_free_hint((void**)hints); 

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

它是:

 aplay -l 

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

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

我的图书馆的输出就像 –

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

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

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