C ALSA编程-“snd控制卡信息()”问题
我正试图编写一个简单的C程序来列出Linux上可用的ALSA声卡。我的问题是使用一个简单的printf()语句进行一些调试。这是代码的一部分C ALSA编程-“snd控制卡信息()”问题,c,C,我正试图编写一个简单的C程序来列出Linux上可用的ALSA声卡。我的问题是使用一个简单的printf()语句进行一些调试。这是代码的一部分 gchar *card_name; const gchar *card_id; gint card; gint open; gint get_info; gint card_number; gint err; snd_ctl_t *handle; snd_ctl_card_info_t *info; card = -1; for (;;) {
gchar *card_name;
const gchar *card_id;
gint card;
gint open;
gint get_info;
gint card_number;
gint err;
snd_ctl_t *handle;
snd_ctl_card_info_t *info;
card = -1;
for (;;)
{
gchar device[20];
/* Scans a list of alsa devices. With 'card'
at '-1' it will search for the first device. */
if ((err = snd_card_next (&card)) < 0)
{
g_print ("%s.\n", snd_strerror (err));
return -1;
}
/* If 'card' reaches '-1' after finding devices, there
are no more devices. */
if (card < 0)
{
g_print ("\nNo more sound cards.\n\n");
return 1;
}
/* Setup 'device' with proper syntax needed by other functions. */
sprintf (device, "hw:%d", card);
g_print ("%s\n", device); /* debug */
/* Open device to probe for hardware info here */
if ((err = snd_ctl_open (&handle, device, 0)) < 0)
{
g_print ("%s.\n", snd_strerror (err));
return -1;
}
/* Get hardware info after opening device */
if ((err = snd_ctl_card_info (handle, info)) < 0)
{
g_print ("%s.\n", snd_strerror (err));
return -1;
}
/* Card hardware info extracted from 'info'. */
//card_name = snd_ctl_card_info_get_name (info);
card_id = snd_ctl_card_info_get_id (info);
card_number = snd_ctl_card_info_get_card (info);
g_print ("Card Number:%d Card Name:[%s]\n", card_number, card_id);
snd_ctl_close (handle);
snd_ctl_card_info_clear (info);
}
gchar*卡名;
const gchar*卡id;
金卡;
金特开放;
我得不到你的信息;
gint卡号;
金特错误;
snd_ctl_t*手柄;
snd控制卡信息*info;
卡片=-1;
对于(;;)
{
gchar装置[20];
/*扫描alsa设备列表。使用“卡”
在“-1”处,它将搜索第一个设备。*/
如果((err=snd_card_next(&card))<0)
{
g_print(“%s.\n”,snd_strerror(err));
返回-1;
}
/*如果“卡”在找到设备后到达“-1”,则
没有更多的设备*/
如果(卡<0)
{
g_print(“\n没有更多的声卡。\n\n”);
返回1;
}
/*使用其他功能所需的正确语法设置“设备”*/
sprintf(设备,“硬件:%d”,卡);
g_print(“%s\n”,设备);/*调试*/
/*在此处打开设备以探测硬件信息*/
如果((err=snd_ctl_open(&handle,device,0))<0)
{
g_print(“%s.\n”,snd_strerror(err));
返回-1;
}
/*打开设备后获取硬件信息*/
如果((err=snd_ctl_card_info(句柄,信息))<0)
{
g_print(“%s.\n”,snd_strerror(err));
返回-1;
}
/*从“信息”中提取的卡硬件信息*/
//卡片名称=snd\U ctl\U card\U info\U get\U name(信息);
card\U id=snd\U ctl\U card\U info\U get\U id(信息);
卡号=snd\U ctl\U card\U info\U get\U card(信息);
g_print(“卡号:%d卡号:[%s]\n”,卡号,卡号);
snd_控制关闭(手柄);
snd控制卡信息清除(信息);
}
用于在未注释掉时进行调试的
g_print()
语句编译并运行良好。当我注释掉用于调试的g_print()
语句时,它会编译,但运行时seg会出错。我遗漏了什么吗?“当我注释掉g_print()”哪一个?旁边有/*debug*/
。