Я добавил свой Icon в JLabel и добавил его в JFrame, и я пытаюсь воспроизвести саундтрек, который начинается с картинки. Моя проблема в том, что каждый раз, когда саундтрек повторяет GIF, не воспроизводится с одинаковой скоростью. Однажды gif и саундтрек заканчиваются одновременно, а затем второй раз, когда gif зацикливается вокруг саундтрека и заканчивается первым, и оттуда они просто сбрасываются syn c. Как я могу это исправить?
Код для GIF:
ImageIcon back = new ImageIcon("res/" + ("Animations/" + "Untitled" + ".gif"));
back = new ImageIcon(back.getImage().getScaledInstance((int)(Toolkit.getDefaultToolkit().getScreenSize().getWidth()), (int)(Toolkit.getDefaultToolkit().getScreenSize().getHeight()), Image.SCALE_DEFAULT));
Icon icon = back;
background = new JLabel(icon);
welcomePanel.add(background);
Затем в JFrame добавляется welcomePanel
.
Я не верю звуку проблема в этом случае, но на всякий случай это код звука:
openingMusic = new SoundPlayer("OpeningAudio2.wav");
openingMusic.loop();
openingMusic.setVolume(60f);
openingMusic.play();
Класс SoundPlayer
:
public class SoundPlayer {
AudioInputStream myobj;
Clip clip;
String fileName;
FloatControl volume;
final float muteVolume;
public SoundPlayer(String FileName) {
fileName = FileName;
try {
myobj = AudioSystem.getAudioInputStream(new File(fileName).getAbsoluteFile());
} catch (UnsupportedAudioFileException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
clip = AudioSystem.getClip();
} catch (LineUnavailableException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
clip.open(myobj);
volume = (FloatControl)clip.getControl(FloatControl.Type.MASTER_GAIN);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
muteVolume = volume.getMinimum();
}
public void play() {
clip.start();
}
public void loop() {
clip.loop(Clip.LOOP_CONTINUOUSLY);
}
public void changeVolume(float f) {
volume.setValue(f);
}
public void setVolume(float f) {
volume.setValue(f + muteVolume);
}
public void stop() {
clip.stop();
clip.close();
}
public void restart() {
clip.stop();
clip.close();
resetAudioStream();
clip.setMicrosecondPosition(0);
}
public void resetAudioStream() {
try {
myobj = AudioSystem.getAudioInputStream(new File(fileName).getAbsoluteFile());
} catch (UnsupportedAudioFileException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
clip.open(myobj);
} catch (LineUnavailableException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}