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...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| 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....
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
| import java.io.*; import javax.sound.sampled.*;
class Music { public Music() { }
public void play() {
File f = new File("music/vortex.au");
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!"); } } } |
It seems these codes are working but are not designed for games like this because of the problems...
help : D