# Java Sound Engine: Was liegt drunter?



## tuxedo (28. Aug 2007)

Hallo,

beschäftige mich gerade intensiv mit der Java Sound API. ich frag mich jetzt allerdings: Auf was baut Java da auf? Ich mein: Wie greift Java auf die Soundkarte zu? Ich sprech jetzt mal für Windows: Baut Java da auf DirectX auf? Oder nutzt Java da den gleichen Hardware Abstraction Layer (HAL) des Betriebssystems, auf dem DirectX auf aufsetzt? 

Wie ist das bei Linux? Braucht man hier Alsa oder OSS (ist für *mich *jetzt mal analog zu Windows das gleiche wie DirectX, will da nicht weiter ins Detail einsteigen) oder setzt Java auch unter Linux da an, wo auch Alsa oder OSS ansetzt (wie bei Windows mit dem HAL)? 

Mir gehts um folgende Aussage:

Wann ist eine Soundkarte kompatibel mit Java? Weil (fast) jede (normale) Karte ist ja DirectX fähig. 
Kann man (im Fall von Windows) sagen, dass eine Soundkarte DirectX fähig sein MUSS um mit Java zu funktionieren?

Gruß
Alex


----------



## ice-breaker (28. Aug 2007)

alex0801 hat gesagt.:
			
		

> Kann man (im Fall von Windows) sagen, dass eine Soundkarte DirectX fähig sein MUSS um mit Java zu funktionieren?



DirectX auf keinen Fall 
Es gibt von dem Entwickler der Sound-APi eine Seite mit vielen Beispiel und ner richtigen dicken FAQ, musste mal googlen, vllt wirst du darin fündig.


----------



## tuxedo (28. Aug 2007)

Du meinst www.jsresources.org ?? Ja, da war ich schon. Aber da steht nicht auf was die Java Sound Engine aufbaut ... 

Bin aber glaub ich anderweitig fündig geworden:

Anfangs hat die Java Sound Engine wohl nur (wieder im Fall von Windows) die Standardsoundkarte benutzt. Wenn man mehrere Audiogeräte verweden wollte war man aufgeschmissen. 
In Windows wird wohl DirectSound und in Linux Alsa als Grundlage genommen:



> Optimized direct audio access is implemented on all platforms (RFEs 4908240 and 4908879). It is enabled by default on systems which offer native mixing (i.e. Linux ALSA with hardware mixing, Solaris Mixer enabled, Windows DirectSound);



Info hab ich hier her:
http://java.sun.com/products/java-media/sound/techReference/tiger.html
-> http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4908240

DirectX ist quasi der Überbegriff der wohl auch DirectSound umfasst (so ganz genau hab ich das bis jetzt noch nicht rausgefunden). Ergo könnte man schon sagen: DirectX taugliche Audiogeräte sind mit Java kompatibel. 

- Alex


----------



## oliver1974 (28. Aug 2007)

Der Haken bei der ganzen Sache:



> It is enabled by default on systems which offer native mixing (i.e. Linux ALSA with hardware mixing..



Hardware mixing ist bei den ganzen Onboard Chips heutzutage
die absolute Ausnahme. Unter Linux hat man dann massive
Probleme beim Zugriff auf die Soundkarte.. entweder die ist schon
belegt, oder die Java Sound API klaut allen anderne Anwendungen
das Sound Device.... Der User wird begeistert sein...

Natürlich kann ALSA prinzipiell Software-Mixing.. aber eben nicht 
über den Zugriff über die Java Sound API.. und große Priorität scheint die ohnehin nicht für SUN zu haben.


----------



## sparrow (28. Aug 2007)

Allerdings ist es unter Linux möglich einen solchen Zugriff auf das OSS oder den Arts-Dämon beim Aufruf des Programms mitzugeben.

Gruß
Sparrow


----------



## oliver1974 (29. Aug 2007)

Dazu könntest du gerne noch ein paar Takte erzählen..   

..es findet sich nämlich zum Thema "Java Sound API" und Linux
nicht wirklich viel im Netz...

Das mit OSS und Arts ist aber auch so eine Sache... OSS ist heute nicht
mehr Standard, da kann man nicht mehr unbedingt von ausgehen
dass das installiert ist... (bzw. dieses Zusatzpaket "OSS über ALSA")
und Arts ist oft das erste, was von vielen deaktiviert wird, der Arts-Soundserver
hat nicht unbedingt so den besten Ruf.


----------



## sparrow (29. Aug 2007)

Als bekennender KDE-User unter Linux verwende ich Arts und hatte bisher keinerlei Probleme.
Mit einer Software die in irgend einer Weise Arts  unterstützt gibt es somit keinerlei Probleme was das blockieren der Soundkarte angeht.

Das funktioniert solange bis man ein Programm einsetzt das direkt auf das Gerät zugreifen will. Entweder bekommt es den Zugriff nicht weil Arts noch läuft (bei mir wäre das immer, da ich deaktiviert habe Arts bei Nichtbenutzung abzuschalten) oder sperrt seineseits das Gerät für sich.
Auch dieses Szenario wäre nicht schlimm, wird halt das Gerät nur für das zugreifende Programm verwendet, zu Problemem kommt es nur wenn man dann Sound von 2 Programmen haben möchte.
Bisher habe ich es aber immer geschafft das Programm über Arts ausgeben zu lassen indem ich das Programm über _artsdsp -m pfad/zum/Programm_ gestartet habe. Das biegt die Soundausgabe für das Programm automatisch auf Arts um.
Selbiges funktioniert auch bei OSS, nur ist mir da gerade der Befehl entfallen.

Bisher kenne ich kein Programm bei dem das nicht funktioniert hätte.
Wenn mir jemand eine ausführbare Beispieldatei schickt probier ich das gerne für ihn aus.


Gruß
Sparrow


----------



## oliver1974 (31. Aug 2007)

Könnte ich mal machen.. allerdings kann ich ja das eigentlich auch selber testen, habe ja mehrere Linux Systeme zu hause.. Und meine Tests waren da nicht so dolle.. Ja, es geht auch über OSS... so halb.

Toll war das ganze jedenfalls nicht.


----------

