是否有可能获得有关繁忙的 Alsa 设备的信息?
Is it possible to get information about a busy Alsa device?
目前我正在尝试通过调用 snd_pcm_open
函数然后将其传递给 snd_pcm_info
来获取有关设备的信息来获取有关 Alsa 设备的信息。我打算专门从snd_pcm_query_chmaps
获取频道信息。我收到的错误代码是:Device or resource busy
。我很好奇是否有另一种方法可以获取此信息或以某种方式打开 pcm,而其他应用程序永远不会 "busy"。如果可能的话,我将如何以一种即使设备很忙也能正常工作的方式获取这些信息?
我的代码的相关片段是
snd_pcm_t* pcm;
int err;
if ((err = snd_pcm_open(&pcm, name, SND_PCM_STREAM_PLAYBACK, 0)) == 0 || (err = snd_pcm_open(&pcm, name, SND_PCM_STREAM_CAPTURE, 0)) == 0) {
snd_pcm_info_t* pcm_info;
if (snd_pcm_info_malloc(&pcm_info) == 0) {
if (snd_pcm_info(pcm, pcm_info) == 0) {
printf("Card number: %d\n", snd_pcm_info_get_card(pcm_info));
printf("Device number: %d\n", snd_pcm_info_get_device(pcm_info));
printf("Subdevice number: %d\n", snd_pcm_info_get_subdevice(pcm_info));
}
snd_pcm_info_free(pcm_info);
}
snd_pcm_close(pcm);
} else {
printf("Erroring opening PCM device with error: %s\n", snd_strerror(err));
}
要在不打开 PCM 设备的情况下获取有关它的信息,请打开其卡的控制设备并调用 snd_ctl_pcm_info(). (See the aplay source code 了解如何使用它。)
通道映射信息在某些混音器控件的TLV信息中提供;使用 snd_pcm_query_chmaps_from_hw() 辅助函数来读取它。
目前我正在尝试通过调用 snd_pcm_open
函数然后将其传递给 snd_pcm_info
来获取有关设备的信息来获取有关 Alsa 设备的信息。我打算专门从snd_pcm_query_chmaps
获取频道信息。我收到的错误代码是:Device or resource busy
。我很好奇是否有另一种方法可以获取此信息或以某种方式打开 pcm,而其他应用程序永远不会 "busy"。如果可能的话,我将如何以一种即使设备很忙也能正常工作的方式获取这些信息?
我的代码的相关片段是
snd_pcm_t* pcm;
int err;
if ((err = snd_pcm_open(&pcm, name, SND_PCM_STREAM_PLAYBACK, 0)) == 0 || (err = snd_pcm_open(&pcm, name, SND_PCM_STREAM_CAPTURE, 0)) == 0) {
snd_pcm_info_t* pcm_info;
if (snd_pcm_info_malloc(&pcm_info) == 0) {
if (snd_pcm_info(pcm, pcm_info) == 0) {
printf("Card number: %d\n", snd_pcm_info_get_card(pcm_info));
printf("Device number: %d\n", snd_pcm_info_get_device(pcm_info));
printf("Subdevice number: %d\n", snd_pcm_info_get_subdevice(pcm_info));
}
snd_pcm_info_free(pcm_info);
}
snd_pcm_close(pcm);
} else {
printf("Erroring opening PCM device with error: %s\n", snd_strerror(err));
}
要在不打开 PCM 设备的情况下获取有关它的信息,请打开其卡的控制设备并调用 snd_ctl_pcm_info(). (See the aplay source code 了解如何使用它。)
通道映射信息在某些混音器控件的TLV信息中提供;使用 snd_pcm_query_chmaps_from_hw() 辅助函数来读取它。