Zurzeit versuche ich Informationen über ein Alsa-Gerät zu erhalten, indem ich die snd_pcm_open
-Funktion aufruft und diese an snd_pcm_info
übergebe, um Informationen über das Gerät zu erhalten. Ich plane speziell, die Kanalinformation von snd_pcm_query_chmaps
zu erhalten. Der Fehlercode, den ich bekomme, ist: Device or resource busy
. Ich war neugierig, ob es einen anderen Weg gab, um diese Informationen zu bekommen, oder irgendwie den PCM so zu öffnen, dass er nie von anderen Anwendungen "beschäftigt" wird. Wie würde ich diese Informationen, wenn überhaupt, auf eine Weise erhalten, die auch dann funktioniert, wenn das Gerät beschäftigt ist?Ist es möglich, Informationen über ein beschäftigtes Alsa-Gerät zu erhalten?
Der entsprechende Ausschnitt aus meinem Code ist
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));
}
Ich habe später festgestellt, dass es eine Möglichkeit gibt, die Kanal-Map-Informationen von der Funktion "snd_pcm_query_chmaps_from_hw" zu erhalten, da die Dokumentation sagte, dass sie das PCM nicht öffnen muss. Dein Zeiger auf 'snd_ctl_pcm_info' war jedoch mehr als hilfreich :) – Greenbeard