BlueJay
17-11-2007, 07:36
Hallo Leute,
ich versetze eine Application mit Soundeffekten, das läuft auch soweit.
Nur:
Mit Qt/C++ (aRTs, NAS) gab es eine friedliche Koexistenz der Programme, unter Java nicht mehr. So ist es z.B. nicht mehr möglich, Amarok und ein Java-Programm gleichzeitig zu hören, wer zuerst kommt, darf Files abspielen.
Bisheriger Code:
// Java-Soundmodul by uja 26.10.07
// Aufruf: my_soundmodul.play_sound(nr);
package grube;
import java.io.*;
import javax.sound.sampled.*;
public class soundmodul
{
String pfad="/grube/sounds/";
String[] wavfile= { "mausklick.wav","treffer.wav","zusammenfallen.wav","abfall.wav","levelup.wav","over.wav","explo.wav" };
Clip[] saund=new Clip[wavfile.length]; // Sound-Effekt-Puffer
// alle Sounds vorladen:
soundmodul()
{ for (int i=0; i<wavfile.length; i++)
{ try
{ // aus Jar laden:
AudioInputStream ais=AudioSystem.getAudioInputStream(this.getClass( ).getResourceAsStream(pfad+wavfile[i]));
AudioFormat af = ais.getFormat();
// Clip erzeugen und oeffnen, dabei in Frames umrechnen
DataLine.Info info = new DataLine.Info(Clip.class,af,((int) ais.getFrameLength()*af.getFrameSize()) );
saund[i] = (Clip)AudioSystem.getLine(info);
// ready for use:
saund[i].open(ais);
}
catch (Exception e) { System.out.println("Sound-Problem bei: "+pfad+wavfile[i]); }
}
}
void play_sound(int nr) { saund[nr].setFramePosition(0); saund[nr].start(); }
void stop_sound(int nr) { saund[nr].stop(); }
void close_soundall()
{ for (int i=0; i<wavfile.length; i++)
saund[i].close();
}
}
Wenn Amarok schneller ist, rennt's in die Exception rein.
Ist Java schneller, meldet mir Amarok: "Xine-Treiber nicht initialisiert."
Abhilfe?
so long,
Bluejay
ich versetze eine Application mit Soundeffekten, das läuft auch soweit.
Nur:
Mit Qt/C++ (aRTs, NAS) gab es eine friedliche Koexistenz der Programme, unter Java nicht mehr. So ist es z.B. nicht mehr möglich, Amarok und ein Java-Programm gleichzeitig zu hören, wer zuerst kommt, darf Files abspielen.
Bisheriger Code:
// Java-Soundmodul by uja 26.10.07
// Aufruf: my_soundmodul.play_sound(nr);
package grube;
import java.io.*;
import javax.sound.sampled.*;
public class soundmodul
{
String pfad="/grube/sounds/";
String[] wavfile= { "mausklick.wav","treffer.wav","zusammenfallen.wav","abfall.wav","levelup.wav","over.wav","explo.wav" };
Clip[] saund=new Clip[wavfile.length]; // Sound-Effekt-Puffer
// alle Sounds vorladen:
soundmodul()
{ for (int i=0; i<wavfile.length; i++)
{ try
{ // aus Jar laden:
AudioInputStream ais=AudioSystem.getAudioInputStream(this.getClass( ).getResourceAsStream(pfad+wavfile[i]));
AudioFormat af = ais.getFormat();
// Clip erzeugen und oeffnen, dabei in Frames umrechnen
DataLine.Info info = new DataLine.Info(Clip.class,af,((int) ais.getFrameLength()*af.getFrameSize()) );
saund[i] = (Clip)AudioSystem.getLine(info);
// ready for use:
saund[i].open(ais);
}
catch (Exception e) { System.out.println("Sound-Problem bei: "+pfad+wavfile[i]); }
}
}
void play_sound(int nr) { saund[nr].setFramePosition(0); saund[nr].start(); }
void stop_sound(int nr) { saund[nr].stop(); }
void close_soundall()
{ for (int i=0; i<wavfile.length; i++)
saund[i].close();
}
}
Wenn Amarok schneller ist, rennt's in die Exception rein.
Ist Java schneller, meldet mir Amarok: "Xine-Treiber nicht initialisiert."
Abhilfe?
so long,
Bluejay