I there. I’m developing a RTS (Real time strategy) and experienced some performance problems with the following code. Moving Images and Animations and so on got frame laggs everytime a sound is played…
import java.io.File;
import java.io.IOException;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.FloatControl;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.UnsupportedAudioFileException;
class whoknows
{
private Clip clip;
public whoknows()
{
}
public void loadPath(String pathi)
{
initPlayer(pathi);
}
private void initPlayer(String patho)
{
try
{
AudioInputStream ais = AudioSystem.getAudioInputStream(new File(patho));
AudioFormat format = ais.getFormat();
DataLine.Info info = new DataLine.Info(Clip.class, format,((int) ais.getFrameLength() * format.getFrameSize()));
clip = (Clip) AudioSystem.getLine(info);
clip.open(ais);
FloatControl gainControl = (FloatControl) clip.getControl(FloatControl.Type.MASTER_GAIN);
gainControl.setValue(1.0F);
}
catch (Exception e)
{
e.printStackTrace();
}
}
public void play()
{
clip.start();
}
}
well its adapted for this post, but thats basically it… is there a better methode playing sounds ? I already advanced to this method from using AudioClips : DD
and… if I play a background music file with the following code, I got generell laggs all the time and the animation and movements are not constant anymore…
import java.io.*;
import javax.sound.sampled.*;
class Music
{
public Music()
{
}
public void play()
{
File f = new File("music/vortex.au"); // yes, a sun .au file : D
AudioInputStream ais;
AudioFormat format;
Clip cl;
try
{
ais = AudioSystem.getAudioInputStream(f);
format = ais.getFormat();
if ((format.getEncoding() == AudioFormat.Encoding.ULAW) ||
(format.getEncoding() == AudioFormat.Encoding.ALAW))
{
AudioFormat tmp = new AudioFormat(
AudioFormat.Encoding.PCM_SIGNED,
format.getSampleRate(),
format.getSampleSizeInBits() * 2,
format.getChannels(),
format.getFrameSize() * 2,
format.getFrameRate(),
true);
ais = AudioSystem.getAudioInputStream(tmp, ais);
format = tmp;
}
DataLine.Info info = new DataLine.Info(
Clip.class,
ais.getFormat(),
((int) ais.getFrameLength() *
format.getFrameSize()));
System.out.println(info.toString());
cl = (Clip) AudioSystem.getLine(info);
cl.open(ais);
cl.start();
}
catch (IOException e)
{
System.out.println("error at reading the file");
}
catch (UnsupportedAudioFileException e)
{
System.out.println("File typ not supported!");
}
catch (LineUnavailableException e)
{
System.out.println("line not available!");
}
/*catch (InterruptedException e)
{
System.out.println("cancel!");
}*/
}
}
It seems these codes are working but are not designed for games like this because of the problems…
help : D