2017-05-14 3 views
0

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)); 
} 

Antwort

1

Um Informationen zu einem PCM-Gerät zu erhalten, ohne sie zu öffnen, öffnen Sie das Steuergerät seiner Karte und snd_ctl_pcm_info() nennen. (Siehe die aplay source code für, wie man es benutzt.)

Die Kanalkarteninformation wird in den TLV Informationen einiger Mischerkontrollen zur Verfügung gestellt; Verwenden Sie die snd_pcm_query_chmaps_from_hw() Hilfsfunktion, um es zu lesen.

+0

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

Verwandte Themen