我想编写一个使用 ALSA API 迭代所有音频设备并打印定义为输入(麦克风)的设备的代码。
这是我的代码:
#define MAX_DEV_STR_LEN 6
#include <alsa/asoundlib.h>
int main(void)
{
snd_ctl_t *ctlp;
snd_ctl_card_info_t *info;
int *rcard;
int index, err;
rcard = &index;
index = -1;
char *name = malloc(MAX_DEV_STR_LEN);
while(1)
{
snd_card_next(rcard);
if(index == -1)
break;
sprintf(name, "hw:%d", *rcard);
if((err = snd_ctl_open(&ctlp, name, SND_CTL_NONBLOCK)) != 0)
{
printf("Error opening the card: %d\n", err);
return err;
}
printf("Card number %d has opened succesfully\n", *rcard);
snd_ctl_card_info_malloc(&info);
if((err = snd_ctl_card_info(ctlp, info)) != 0)
{
printf("Error obtaining the info\n");
return err;
}
// get info here...
snd_ctl_card_info_clear(info);
}
return 0;
}
我似乎找不到获取所需信息的方法。我搜索了here。但没找到解决办法。
如果有人可以指导我,我将不胜感激。谢谢!
您已经看过类似的问题了吗?这是one,它提到
snd_device_name_hint()
可能对获取plughw
或hw
设备列表有很大帮助。我的建议是看一下 aplay / arecord
命令的源代码,尤其是 pcm_list()
函数 - 这似乎是准备你想要的列表的函数。
要检查您的列表是否正确,请使用
arecord -L
。