使用ALSA API获取所有输入音频设备

问题描述 投票:0回答:1

我想编写一个使用 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。但没找到解决办法。

如果有人可以指导我,我将不胜感激。谢谢!

c alsa
1个回答
0
投票

您已经看过类似的问题了吗?这是one,它提到

snd_device_name_hint()
可能对获取
plughw
hw
设备列表有很大帮助。我的建议是看一下
aplay / arecord
命令的源代码,尤其是
pcm_list()
函数 - 这似乎是准备你想要的列表的函数。

要检查您的列表是否正确,请使用

arecord -L

© www.soinside.com 2019 - 2024. All rights reserved.