Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : [C++] Sound Problem unter Linux



hpf
30-06-2005, 10:54
Hallo ersteinmal,
also ich habe folgendes Problem, ich schreibe im moment ein Voice over IP tool unter Linux, welches auf die OpenH323 Bibliothek aufsetzt (und somit auch auf die PWLIB). So, nun passiert folgendes (wohlbemerkt nicht auf allen systemen) wenn ich den client starte funktioniert erstmal alles ganz gut, aber sobald dieser angerufen wird, bekommt der ne cpu auslastung von 100% (und macht auch keine Soundausgabe), selbst wenn die verbindung shon abgebaut ist, bleibt die auslastung (aber immer mit der statusmeldung alles sei in ordnung). Dies tritt wohlbemerkt auch nur auf, wenn ich das tool mit /dev/dsp öffne, mit der loopback device nicht. So, ich hab nun die vermutung, dass das Sound device nicht mehr will, wenn es schon von einem anderen task geöffnet ist, obwohl es im duplexmodus geöffnet wird. Meine vermutung rührt daher, das mein voip tool die sample rate auf 16000Hz herunterstellen will, und es dadurch zu nem block im tool kommt, kann das sein ???
ich bin für jeden tip dankbar.

mfg
hpf

oracle2025
30-06-2005, 12:11
Verwende ALSA unter Linux, und nutze das dmix Plugin, das wandelt IMHO alle Sampleraten passend für die jeweilige Soundkarte um.

hpf
30-06-2005, 12:56
erstmal thx für die schnelle antwort, aber das klappt leider nur bei alsa programmen, die pwlib, baut aber leider auf oss auf :(

mfg hpf

oracle2025
30-06-2005, 15:40
probier mal aoss und dmix, aoss ist ein LD_PRELOAD, das oss auf also umlenkt

anda_skoa
30-06-2005, 16:52
oss ist einfach zu limitiert.

Das bettelt quasi gerade zu nach Zugriffproblemen, weil es vom Treiber bzw der Fähigkeit der Karte abhängt, ob mehr als ein Prozess das Device öffnen kann.
Normalfall: nur ein Prozess kann.

Wenn man als Entwickler oss benutzen will weil man dessen API auch unter anderen Betriebsystemen außer Linux hat, dann sollte man sich dieser Einschränkung bewußt sein und entsprechend dokumentieren.

Ciao,
_

hpf
30-06-2005, 16:57
@ anda_skoa
thx, aber ich muss leider oss nutzen, kann man denn irgendwie über eine c++ methode rausfinden, ob schon irgendein prozess das sound device geöffnet hat ??, dann könnte ich immerhin mit nem fehler abbrechen. dann weiß der anwender wenigstens, dass er die anderen prozesse abschalten muss.

anda_skoa
30-06-2005, 17:00
@ anda_skoa
thx, aber ich muss leider oss nutzen

Das nenn ich Künstlerpech :)

Stellt sich natürlich zusätzlich die Frage wie lange oss unter Linux noch unterstützt wird.



kann man denn irgendwie über eine c++ methode rausfinden, ob schon irgendein prozess das sound device geöffnet hat ??

Vermutlich nicht Betriebsystemunabhängig.
Eventuell ein non blocking open benutzen und den Fehlerfall behandeln?

Ciao,
_

hpf
30-06-2005, 17:06
also, das soll bei nem kunden ausschließlich unter linux laufen, das linux selbst soll wohl auf der distribution die es im moment hat (suse 7.3) bleiben. das öffnen der soundkarte geschieht in der pwlib, ich könnte das überschreiben, aber es liefert leider keinen fehler zurück wenn ich es im non blocking mode öffne, hängt sich aber trotzdem auf. würde es im blocking mode darauf bestehen, dass kein anderer prozess das device geöffnet hat (würde das durch open geprüft?)??

mfg
hpf

anda_skoa
30-06-2005, 18:41
also, das soll bei nem kunden ausschließlich unter linux laufen, das linux selbst soll wohl auf der distribution die es im moment hat (suse 7.3) bleiben.

Du könntest eventuell mit einem Aufruf von fuser arbeiten.
Oder vielleicht steht da auch etwas in /proc



das öffnen der soundkarte geschieht in der pwlib, ich könnte das überschreiben, aber es liefert leider keinen fehler zurück wenn ich es im non blocking mode öffne, hängt sich aber trotzdem auf. würde es im blocking mode darauf bestehen, dass kein anderer prozess das device geöffnet hat (würde das durch open geprüft?)??


Vielleicht mit O_EXCL in den open flags.
Oder mit einem fcntl oder ioctl Aufruf.

Scheint aber nicht so leicht zu sein, die meisten oss Applikationen haben das Problem.

Ciao,
_

hpf
03-07-2005, 17:02
danke nochmal für die schnelle hilfe.
dann muss ich wohl mit dieser einschränkung von oss leben :(.

mf hpf