ubuntuusers.de

Java will den Sound für sich alleine

Status: Ungelöst | Ubuntu-Version: Kubuntu 7.04 (Feisty Fawn)
Antworten |

Fury1306

Avatar von Fury1306

Anmeldungsdatum:
5. Mai 2007

Beiträge: 318

Hallo!

Ich bekomme bei Javaanwendungen im Firefox (getestet auf der Pokerseite auf www.bwin.com und dem Snookerspiel auf www.flyordie.com ) keinen Sound wenn bei Programmaufruf eine andere Anwendung oder Website Sound abspielt (z.B. www.youtube.com ).

Wenn ich diese Javaanwendungen starte wenn keine andere Anwendung gerade Sounds abspielt habe ich dort Sound allerdings nirgendwo mehr sonst.

Der Sound wird erst eine ganze Weile nachdem ich die Javaanwendung beendet habe wieder freigegeben.

Manchmal muss ich auch den Firefox komplett beenden damit ich wieder Sound habe.

Soweit ich ich es gefunden habe hab ich überall ALSA eingestellt.

Kann aber nicht ausschließen, dass ich doch noch irgendwo eine falsch Einstellung habe, da ich ein Anfänger in Sachen Linux bin.

Edit:
Hab gestern Nacht noch Kde-tv installiert und den Ton über Line-In eingerichtet.
Das klappt. -Also gleichzeitig Fernsehen mit Sound und Java.

Fury1306

(Themenstarter)
Avatar von Fury1306

Anmeldungsdatum:
5. Mai 2007

Beiträge: 318

Niemand ne Idee?

Hat sonst niemand das Problem?

Fury1306

(Themenstarter)
Avatar von Fury1306

Anmeldungsdatum:
5. Mai 2007

Beiträge: 318

Mir ist schon klar, dass ihr vermutlich weitere Infos braucht.

Da ich mir aber nicht sicher bin welche könnt ihr gerne nachfragen.

Bin ich mit dem Problem alleine. Ist es vorher noch bei niemandem aufgetreten?

mythos

Anmeldungsdatum:
14. Juli 2006

Beiträge: 1080

ich würde dir gerne helfen, aber da meine soundkarte hw-mixing unterstützt, kann bei mir der effekt gar nicht auftreten. hoffe trotzdem dass du eine lösung findest.

mfg
mythos

oliver1974

Avatar von oliver1974

Anmeldungsdatum:
2. Juli 2006

Beiträge: 266

Hallo,

Das Problem hat nicht nur Ubuntu, sondern scheint bei vielen Distris aufzutreten... Komischerweise
findet man so gut wie überhaupt keine Infos dazu im Netz... absolut verblüffend.

Ich habe das gleiche Problem hier gerade bei einer Mandriva Installation.... Selbe Phänomen, offensichtlich
geht Java stur direkt über /dev/dsp.... und der ist dann natürlich entweder von aRTS (Kde) oder ALSA
belegt, wenn ne Ausgabe stattfindet.. umgekehrt kickt die Java-Anwendung alle anderen Sound-Anfragen
anderer Programme (auch der von ALSA) weg, wenn sie zuerst an die Reihe kommt.

Ich habe bei Suse mal ein RPM-Paket gesehen, was passend zu den einzelnen JVM-Versionen ausgeliefert
wurde, und was mit "ALSA-Plugin" in der Bezeichnung trug.. also scheinen zumindest die Suse - Leute
was darüber zu wissen, eventuell lohnt es sich, mit denen mal Kontakt aufzunehmen.

Ich hab auch schon so einen Hals, ich finde es ziemlich verblüffend, dass das irgendwie keinen interessiert.. aber
das schrieb ich ja schon.

Offensichtlich macht sich hier bemerkbar, dass Java in der Open-Source-Szene nicht so gut gelitten war...
was sich mit der Änderung der Lizenzbedingungen der ganzen Java-Geschichte ja jetzt vielleicht ändert....
und soviele Java-Programme fanden auch nicht gerade Einsatz auf den Linux-Boxen.... Ich vermute mal fast,
das die "Eclipse" Entwicklungsumgebung mit Abstand die meistverbreitete Java-App im Linux-Umfeld sein
dürfte, dass sagt ja schon alles...

Ich nehme mir mal ausgiebig alsa + dmix Plugin zur Brust, eigentlich müsste man da was darüber hinkriegen.
Wenn sonst noch einer Tipps hat, immer her damit.

oliver1974

Avatar von oliver1974

Anmeldungsdatum:
2. Juli 2006

Beiträge: 266

Na, dann holen wir den Thread doch mal wieder nach oben....

Leider siehts diesbezüglich nicht gut aus.. Das Zusammenspiel Java + ALSA bei Karten ohne Hardwaremixing
(und das betrifft ja gleich ne ganze Latte Onboard-Soundchips) ist zum Würgen.

Ich zitiere mal (Hervorhebungen von mir) aus
http://www.jsresources.org/faq_audio.html#alsa_mixing

"
5.5.

How can I enable mixing with the "Direct Audio Device" mixers on Linux?

The "Direct Audio Device" implementation on Linux is based on ALSA. Mixing is available in the Mixer instance if ALSA provides mixing.This is the case if the soundcard can do mixing in hardware and its ALSA driver supports this feature. This is true for some common soundcards like Soundblaster LIFE! and Soundblaster Audigy and cards based on the Trident 4D Wave NX chipset. If this feature is available at all, it needs no special configuration. It is enabled by default.

Using ALSA's dmix plug-in does not work together with Java Sound. The reason is that the "Direct Audio Device" mixer implementation based on ALSA queries the available hardware devices. However, a dmix device in ALSA is no hardware device, so it is not recognized. Discussions about this issue led to the conclusion that there is no easy way to integrate a query for additional devices.
"

Wenn ich gestern abend nicht ZU müde war als ich das gelesen habe, dann ist die Ausgabe über die "Direct Audio Device" Implementation seit Java 1.5 Standard,
demzufolge sitzen wir schön im Mist.. dmix geht ums verrecken nicht mit Java + ALSA.

Das ist wirklich ganz großer Mist... anders kann man das nicht ausdrücken.

Meine letzte Hoffnung ist jetzt dieses ominöse java-alsa Paket bei OpenSUSE, muss mal nachsehen, was da drin steckt.

Mich irritiert immer noch, dass das Problem so wenig Widerhall findet.. man muss im Internet wirklich mit der Lupe suchen, bis man wass zu dem Thema
findet, und dann ist es immer das gleiche: Eine einsame Frage in irgendeinem Forum, aber keine Antworten darauf.

Dass ich erst mit der Suchmaschinen-Alternative aus Redmond (Live Search) was informatives fand entbehrt auch nicht einer gewissen Ironie.

EDIT: Hmmm, Korrektur.. Das Direct Audio Device wird nur dann (automatisch) benutzt, wenn entweder Software oder Hardware
Mixing unterstützt weden, ansonsten wird die Java Sound Audio Engine benutzt, und die geht wieder über die alte OSS
Schnittstelle....

Hmmm, mal sehen, ob man da was mit dem aoss wrapper zaubern kann?

pepre Team-Icon

Supporter
Avatar von pepre

Anmeldungsdatum:
31. Oktober 2005

Beiträge: 6474

Wohnort: Erlangen

.asoundrc könnte helfen. Man kann damit ein OSS-Device definieren, welches über dmix geroutet wird.

oliver1974

Avatar von oliver1974

Anmeldungsdatum:
2. Juli 2006

Beiträge: 266

Über die Alsa config files wollte ich eigentlich von Anfang an gehen...

Aber man muss ja erstmal raffen, wie die ganze Sound-Geschichte von Java gehandelt
wird, darüber muss man ja erstmal ein Studium absolvieren, ehrlich!!!

Dass Java mal über OSS, dann wieder über ALSA geht... seufz. Das muss man erstmal nachvollziehen.

Machts ja auch nachher bei der Distribution der Software nicht einfacher. Da kann man erstmal den
User nur bitten: "Bitte bringen Sie ihr Sound-System ihrer Linux - Installation auf Vordermann", inklusive
einer Einführung in OSS, ALSA und JavaSoundAPi (damit er versteht, warum er das machen muss.... andere
Anwendungen (..native Linux - Apps, die halbweg aktuell sind..) gehen ja einfach so, wenn sie normal über ALSA gehen...)

Na, erstmal testen, ob das so geht, wie ich mir das denke... Wenn ja, ist das fast ein Tutorial wert, weil wie gesagt.. im
Netz findet man bisher fast nix dazu. Das wäre ja (fast) eine Pioniertat, diese ganzen Informationen zusammenzufassen.

oliver1974

Avatar von oliver1974

Anmeldungsdatum:
2. Juli 2006

Beiträge: 266

Sooo...

Ich hab mich jetzt mal AUSGIEBIG mit dem Thema "Java und Sound" beschäftigt... Es läuft einem kalt den Rücken runter...

Also:

Das Thema "Java Sound API" ist, genau wie das "Java Media Framework" ein ungeliebtes Kind von SUN... Irgendwie
kümmern die sich nicht (mehr) um diese Geschichten.

Das Java Media Framework (JMF) ist z.B. seit ca. 2004 nicht mehr verändert worden.. daran arbeitet wohl keiner
mehr dran. Katastrophal in den Augen so mancher... Zurecht, da z.B. unter Linux eine ganze Latte von Codecs nicht
unterstützt werden, in Windows aber sehr wohl... was natürlich für eine Cross-Plattform Geschichte wie Java natürlich
Irrsinn hoch drei ist....

Nun, es ging ja hier um Java und Sound... aber hier ist es ähnlich....

Ich gehe jetzt nicht in die Tiefe, was ich so in diversen anderen Programmierforen gelesen habe (...wieviel Leute
SUN abgestellt hat (oder HATTE) um die Java Sound API zu pflegen... aber es waren unglaublich wenig), nur die
Ergebnisse:

1.) Die Java Sound API kann Soundkarten OHNE Hardwaremixing NICHT so ansprechen, dass softwaremixing über ALSA möglich wäre...
dmix + Java Sound API geht nicht, PUNKT!!!!!! (Ja, alle mal mit den Kopf schütteln an der Stelle)
2.) Findet Java ein ALSA-Sounddevice, das hardwaremixing unterstützt, ist alles super, es nimmt das Device und fertig.
3.) Findet Java ein ALSA-Sounddevice, aber das Device oder dessen Treiber unterstützt kein Hardwaremixing, fällt es auf OSS zurück.
4.) Demzufolge muss man versuchen, OSS + ALSA zum (simultanen) Zusammenspiel zu überreden.. Hier kommt der gute alte "aoss"
Befehl zum Tragen.. Auf meiner Mandriva Installation hier ging das sogar auf Anhieb, ohne Rumfummeln an ".asoundrc" oder Konsorten.
Wie das auf Ubuntu aussieht, weiß ich jetzt nicht, da ich momentan keine Kubuntu-Installation habe, die ich wirklich täglich nutze...
Müsste jemand hier mal gegenchecken.. Eventuell sind ja da noch Anpassungsarbeiten an der ".asoundrc" erforderlich.

Also:
"aoss java (...hier die Optionen und die aufzurufende Klasse)"

Klappte dann bei mir wunderbar.

Voraussetzung ist allerdings, dass der Programmierer nicht versucht, den direkten Zugriff auf das ALSA Device zu ERZWINGEN,
was er durchaus machen kann.... dann gibts eigentlich keine Lösung.

Auch ist es nicht gut, eine Riesen-Java-Applikation in aoss "einzupacken", ich hab hier spaßeshalber
mal die Netbeans IDE mit aoss gewrapped, und es hat mir echt fast das ganze System zerrissen.. ich musste per
SSH von aussen rauf und alle Java-Prozesse abschiessen, sonst war gar nix mehr zu wollen, da das Teil
fast komplett eingefroren war, nicht mal mehr ein Wechsel zu den Textkonsolen war mehr möglich...

Jedenfalls weiß ich das ganze jetzt, weil ich selber gerade an einem Java-Spielchen arbeite.. und mich mit der Java Sound API herumschlagen
darf...

mythos

Anmeldungsdatum:
14. Juli 2006

Beiträge: 1080

hi oliver,
ich habe mit großem interesse deine recherchen verfolgt und bin geschockt zu welchem schluss du gekommen bist. da kann man nur den kopf schütteln. danke, dass du das thema aufgegriffen hast.

mfg
mythos

Fury1306

(Themenstarter)
Avatar von Fury1306

Anmeldungsdatum:
5. Mai 2007

Beiträge: 318

Danke für die Antworten.

Es scheint also nicht ohne Verrenkungen möglich zu sein beide Soundausgaben gleichzeitig zu hören.

Kann ich denn irgendwie die Soundausgabe von Alsa/Java irgendwie gewaltsam beenden wenn ich lieber dem jeweils anderen die Soundkarte zur Verfügung stellen will?

Bin übrigens von Kubuntu auf Ubuntu gewechselt.

oliver1974

Avatar von oliver1974

Anmeldungsdatum:
2. Juli 2006

Beiträge: 266

Na ja, dass mit "aoss" ist ja nicht jetzt so eine große Verrenkung... einfach mal spaßeshalber
den Aufruf fes entsprechenden Java Programmes ändern (wenn aoss installiert ist, natürlich),
kann man ja an der Verknüfung zum Programm ja dementsprechend anpassen bzw. sich ein
winziges Wrapper-Script schreiben.

Zum beenden der Soundausgabe... Hmm, also bei mir war die Ausgabe auch dann
wirklich frei wenn keine Instanz mehr von "java" (also jetzt wirklich der Prozess) lief,
also sollte sauberes beenden eigentlich reichen... Wenn nicht, vielleicht das
alsa Startskript neu aufrufen (liegt ja in /etc/init.d) mit dem "restart" Parameter.

Das ist jetzt aber nur mal so ins blaue geschossen.

chip273

Anmeldungsdatum:
31. Mai 2007

Beiträge: Zähle...

Also ich habe zwar noch selber schwierigkeiten mit meinem Soundsystem, aber eventuell mal eine Idee.
Wäre es möglich Java dazu zu zwingen den Ton über das Netzwerk zu routen, auf den selben Rechner ? und dann hier die daten per Alsa in die bereits vorhandenen software gemischten daten einmixen ?

Aoss vor jedem aufruf mal zu tippen ist ja sicher kein grosses problem, wie schauts aber aus wenn nicht ich das java programm starte sondern der Browser ? wie mache ich z.B. Firefox klar das ich den ton gern über aoss hätte ?

oliver1974

Avatar von oliver1974

Anmeldungsdatum:
2. Juli 2006

Beiträge: 266

chip273 hat geschrieben:

Also ich habe zwar noch selber schwierigkeiten mit meinem Soundsystem, aber eventuell mal eine Idee.
Wäre es möglich Java dazu zu zwingen den Ton über das Netzwerk zu routen, auf den selben Rechner ? und dann hier die daten per Alsa in die bereits vorhandenen software gemischten daten einmixen ?

Direkt von Java aus wird da wohl nix gehen... vermute ich. Ist schwer überhaupt was an Infos zu der Java Sound API zu bekommen,
geschweige denn solche Details. Ich könnte mir nur vorstellen, dass der Java VM nachgelagert man was "drehen" könnte,
um ihn dazu zu bewegen, doch über dmix zu gehen... aber im Prinzip macht ja aoss das irgendwie schon.

Aoss vor jedem aufruf mal zu tippen ist ja sicher kein grosses problem, wie schauts aber aus wenn nicht ich das java programm starte sondern der Browser ? wie mache ich z.B. Firefox klar das ich den ton gern über aoss hätte ?

Na ja, man muss "aoss" ja nicht jedesmal tippen.. für solche Fälle macht man sich ein Skript oder es sich andersweitig irgendwie bequem.

Unschöner ist da eher, dass manche Programme halt so einen Abgang hinlegen, wenn sie mit aoss gewrapped werden... wie bei
mir Netbeans halt.

Was Firefox angeht... kommt drauf an, wie die Java VM da aufgerufen wird.. läuft die als Kindprozess von Firefox? Eventuell könnte man
dann versuchen, auch Firefox mit "aoss" zu wrappen.. aber ob dann der Rest noch geht (Flash und Co.) oder das Ding überhaupt hochfährt...
Noch keine Ahnung.

Fury1306

(Themenstarter)
Avatar von Fury1306

Anmeldungsdatum:
5. Mai 2007

Beiträge: 318

Hallo,

ich hol den Thread nochmal nach vorne, da mich das Problem noch immer ärgert.

Ich möchte ungern versuchsweise an irgendwelchen Konfigurationsfiles rummachen, da ich als Anfänger da schnell den Überblick verliere und ich, wenn dann gar nichts mehr geht, keine Ahnung hab an welcher Umstellung es liegt.

Gibt es vielleicht einen Befehl den ich ins Terminal eingeben kann der folgendes bewirkt (etwas flapsig formuliert)

Soundkarte-stell-dich-tot

Daraufhin lässt Java die Soundkarte aus dem Klammergriff und eine andere Anwendung kann nach

Soundkarte-Wiederbelebung

auf die Soundkarte zugreifen.

Das Ganze sollte natürlich in beide Richtungen funktionieren (2. Alternative Java hat erst keinen Sound und bekommt ihn nachher) und die Javaanwendung sollte natürlich weiterlaufen nur halt ohne Sound.

Der ganze Ablauf ist natürlich nur als Beispiel gedacht. Falls es Lösungen gibt die etwas ähnliches erreiche z.B. über eine GUI nehme ich die natürlich auch gerne.

Antworten |