Alsa: Handle von snd_pcm_open

Antworten
Nachricht
Autor
Gerd
Beiträge: 2
Registriert: 28. Dez 2019 13:42

Alsa: Handle von snd_pcm_open

#1 Beitrag von Gerd » 30. Dez 2019 11:29

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 ?!
Linux-Mint 19.3 Cinnamon 64-Bit. Programmiersprache: C

Benutzeravatar
Janka
Beiträge: 3585
Registriert: 11. Feb 2006 19:10

Re: Alsa: Handle von snd_pcm_open

#2 Beitrag von Janka » 01. Jan 2020 19:50

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?
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.

Gerd
Beiträge: 2
Registriert: 28. Dez 2019 13:42

Re: Alsa: Handle von snd_pcm_open

#3 Beitrag von Gerd » 04. Jan 2020 15:28

Janka hat geschrieben:
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 ;-)
Linux-Mint 19.3 Cinnamon 64-Bit. Programmiersprache: C

Benutzeravatar
Janka
Beiträge: 3585
Registriert: 11. Feb 2006 19:10

Re: Alsa: Handle von snd_pcm_open

#4 Beitrag von Janka » 04. Jan 2020 22:30

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.
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.

Antworten