Page 1 of 1

Alsa: Handle von snd_pcm_open

Posted: 30. Dec 2019 11:29
by Gerd
Hallo

Ich bin noch nicht lange mit Linux befasst und meine Programmiererfahrung bezieht sich noch
größtenteils auf Windows.

Gegenwärtig erkunde ich das ALSA-Audiosystem.

Gleich dazu eine Frage betreffs "snd_pcm_open". Ist das eine Art "Fire&Forget" oder sollte ich das
Handle nachher freigeben. Mir geht es um saubere Programmierung: Ich kann Sound ausgeben mit
und ohne Freigabe, wie ich feststelle, ohne das es Probleme gibt, aber ich fühle mich ohne Freigabe
nicht wohl dabei.

Das Problem ist, das ich bei meinen Experimenten schon Fehlermeldungen erhielt, als ich Handles
freigeben wollte. Daher meine Frage. Wenn ich ein Handle nicht mehr freigeben kann, scheint es
vom System ja bereits verworfen zu sein ?!

Re: Alsa: Handle von snd_pcm_open

Posted: 01. Jan 2020 19:50
by Janka
Wenn ich es richtig verstanden habe, geht es um snd_pcm_close(), nicht snd_pcm_open().

Bist du sicher, dass du nicht versuchst, zweimal dasselbe Handle freizugeben, bzw. ein Handle freizugeben, das du bei snd_pcm_open() gar nicht bekommen hast, weil letzteres einen Fehler zurücklieferte?

Re: Alsa: Handle von snd_pcm_open

Posted: 04. Jan 2020 15:28
by Gerd
Janka wrote:
01. Jan 2020 19:50
Wenn ich es richtig verstanden habe, geht es um snd_pcm_close(), nicht snd_pcm_open().
Nicht nur. In dem Fall geht es auch um snd_pcm_drain().
Bist du sicher, dass du nicht versuchst, zweimal dasselbe Handle freizugeben, bzw. ein Handle freizugeben, das du bei snd_pcm_open() gar nicht bekommen hast, weil letzteres einen Fehler zurücklieferte?
Ich muss mir mein Programm nochmal genauer ansehen. Die fraglichen Funktionen und Rückgaben
verarbeite ich in Strukturarrays, weil ich das ganze in eine Art "Black Box" kapseln will, um nachher auf
einfachste Weise Sound ausgeben zu können. Kann sein, das mir da ein Fehler unterlaufen ist.

Aber die Grundfrage bleibt, weil die Dokumentationen hier nicht eindeutig sind: Muss jedes Handle
nachher freigegeben werden (wie ich es erwarten würde), oder ist es automatisch nur von temporärer
Bedeutung, und verfällt, wenn die entspr. Audiodaten KOMPLETT abgespielt wurden ?

Sorry, wenn die Frage seltsam erscheint, aber das sind meine ersten Gehversuche in Linux ;-)

Re: Alsa: Handle von snd_pcm_open

Posted: 04. Jan 2020 22:30
by Janka
Solche Fragen kann dir nur das Supportteam der jeweiligen Library beantworten. Es ist aber ziemlich wahrscheinlich, dass man eine vorhandene close()-Funktion auch benutzen muss.

Im Zweifel guckst du in die Quellen der Library und versuchst herauszufinden, was die close()-Funktion macht und ob sie von anderen Teilen der Library automatisch aufgerufen wird.