Можно ли получить информацию о занятом устройстве Alsa?
В настоящее время я пытаюсь получить информацию об устройстве Alsa, позвонив в snd_pcm_open
Функция затем передать это snd_pcm_info
получить информацию об устройстве. Я планирую специально получить информацию о канале от snd_pcm_query_chmaps
, Код ошибки, который я получаю: Device or resource busy
, Мне было любопытно, есть ли другой способ получить эту информацию или как-то открыть PCM таким образом, чтобы он никогда не был "занят" другими приложениями. Как бы я получил эту информацию, если это вообще возможно, таким образом, чтобы она работала, даже если устройство занято?
Соответствующий фрагмент моего кода
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));
}
1 ответ
Чтобы получить информацию об устройстве PCM, не открывая его, откройте устройство управления его карты и вызовите snd_ctl_pcm_info (). (См. Исходный код aplay, чтобы узнать, как его использовать.)
Информация о канальной карте предоставляется в информации TLV некоторых элементов управления микшера; используйте вспомогательную функцию snd_pcm_query_chmaps_from_hw(), чтобы прочитать ее.