PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [Java] Sound Problem



rocksteady
07-03-2003, 10:59
Hallo,
ich habe ein Problem mit dem Abspielen von wav Dateien unter Linux. Ich möchte in meinem Programm (Applikation,kein Applet!) bei zwei bestimmten Events Sounds abspielen. Ein Sound soll abgespielt werden wenn sich ein bestimmtes Fenster öffnet, der zweite bei einem bestimmten Buttonklick. Dazu definiere ich zwei AudioClip Objekte, die ich dann im Konstruktor initialisiere. Unter Windows 98 funktioniert das ganze einwandfrei, aber unter Linux leider nur ab und zu. Meistens bleibt der Sound aus. Ich schätze es liegt daran, dass die wav Dateien nicht vollständig geladen werden, weil das Programm fortfährt. Gibt es irgend eine Möglichkeit, Audio-Dateien vollständig laden zu lassen wie es mit Bildern mit der Klasse MediaTracker auch geht? Oder weiß jemand woran das liegen könnte?
Ich hoffe, mir kann jemand helfen.

Hier noch der Quellcode zu den entprechenden Stellen:



public class test implements ActionListener,Runnable
{
...
AudioClip startSound,buttonSound;
...
public test()
{
...
//Sounds laden:
try
{
String pfad="file://"+System.getProperty("user.dir")+"/";
startSound = Applet.newAudioClip(new URL(pfad+"sound1.wav"));
buttonSound = Applet.newAudioClip(new URL(pfad+"sound2.wav"));
}catch(Exception e){System.out.println(e.toString());}
...
}

//an den entsprechenden Stellen:
...
startSound.play();
...
buttonSound.play();
...


mfg

anda_skoa
07-03-2003, 14:15
Ich glaube ein Clip wird immer erst beim Abspielen geladen.
Die Leute bei Sun solten aber trotzdem mal ihren MediaTracker so implementieren, wie sie es in der Doku ankündigen.
Dort steht nämlich auch Audio Clips drin.

Was mich wundert ist, dass man die Applet Sachen in einer Applikation benutzen kann.
Wenn du nicht gesagt hättest, dass es manchmal funkioniert, hätte ich gesagt, es liegt daran.

Ist das Sounddevice zum Abspielzeitpunkt frei?

Eventuell geht es mit der javax.sound API besser.

Ciao,
_
P.S: Bitte Code tags um deinen Code setzen (der # Button)

rocksteady
07-03-2003, 14:59
Hallo,
mit der Sound Api hab ich mich zugegebenermaßen bis jetzt noch nicht beschäftigt. Werd ich aber demnächst mal tun, vielleicht gehts damit wirklich besser. Diese Lösung (Applet Methoden in einer Applikation benutzen) hab ich aus irgend einem Buch, Insel oder Go To Java, weiß ich nicht mehr genau. Ich dachte halt dass dieser Ansatz fürs simple abspielen von zwei wav Dateien ausreichend wäre. Müsste ja eigentlich grundsätzlich funktionieren, denn unter
Win98 klappt es ja immer. Was mich halt wundert ist, dass es unter Linux mal geht und mal wieder nicht. Ob das Sounddevice zum Abspielzeitpunkt frei ist kann ich leider nicht sagen, ich beschäftige mich noch nicht allzu lange mit Linux, daher bin ich in diesen Dingen noch nicht so firm.
Aber trotzdem danke für die schnelle Antwort!

mfg

anda_skoa
07-03-2003, 16:10
Ich wusste ja gar nicht, dass es geht, Applet Methoden in einer Applikation zu verwenden.

Aber wenn das offensichtlich erlaubt ist, dann ist der AudioClip aus java..awt.applet wirklich die einfachste Möglichkeit.

Werde dein Programm mal zu Hause probieren, ob es vielleicht an einem blockiertem Sounddevice liegen könnte.

Ciao,
_

rocksteady
07-03-2003, 19:13
Hallo, ich glaube, du hattest recht mit dem Sounddevice. Das erste mal als ich das Programm nun startete funktionierte der Sound, bei den darauf folgenden Versuchen nicht mehr. Mit /usr/sbin/lsof | grep /dev/dsp hab ich nun heraus gefunden welcher Prozess das Sounddevice blockiert. Nachdem ich den Prozess gekillt habe funktioniert die Soundausgabe wieder.
Es liegt also scheinbar nicht an meinem Programm :)
Der blockierende Prozess ist übrigens artsd!
Danke für deine Hilfe, allein wär ich nie drauf gekommen!
Schönes Wochenende wünsch ich!

mfg

anda_skoa
07-03-2003, 19:49
Du kannst mal versuchen, die JVM mit artsdsp zu starten
#> artsdsp java HauptKlasse

Ciao,
_

rocksteady
07-03-2003, 20:50
Das funktioniert leider hier nicht, der Sound bleibt trotzdem aus. Aber macht nix, den Prozess zu killen ist ja kein großer Aufwand. Ich kann ja auch die Option, dass arts beim KDE Start automatisch startet, deaktivieren.

Gruß,
rocksteady