Ниже приведен метод, позволяющий воспроизводить аудиофайлы, в частности обычные файлы WAV или MIDI.Попробуйте ... если вы получите желаемый звук, дайте мне знать.
public Thread playWav(final File wavFile, final boolean... loopContinuous) {
String ls = System.lineSeparator();
// Was a file object supplied?
if (wavFile == null) {
throw new IllegalArgumentException(ls + "playWav() Method Error! "
+ "Sound file object can not be null!" + ls);
}
// Does the file exist?
if (!wavFile.exists()) {
throw new IllegalArgumentException(ls + "playWav() Method Error! "
+ "The sound file specified below can not be found!" + ls
+ "(" + wavFile.getAbsolutePath() + ")" + ls);
}
// Play the Wav file from its own Thread.
Thread t = null;
try {
t = new Thread("Audio Thread") {
@Override
public void run() {
try {
Clip clip = (Clip) AudioSystem.getLine(new Line.Info(Clip.class));
audioClip = clip;
clip.addLineListener((LineEvent event) -> {
if (event.getType() == LineEvent.Type.STOP) {
clip.drain();
clip.flush();
clip.close();
}
});
clip.open(AudioSystem.getAudioInputStream(wavFile));
// Are we to loop the audio?
if (loopContinuous.length > 0 && loopContinuous[0]) {
clip.loop(Clip.LOOP_CONTINUOUSLY);
}
clip.start();
}
catch (LineUnavailableException | UnsupportedAudioFileException | IOException ex) {
ex.printStackTrace();
}
}
};
t.start();
Thread.sleep(100);
}
catch (InterruptedException e) {
e.printStackTrace();
}
return t;
}
Чтобы использовать этот метод, просто вызывайте его везде и всегда, когда вы хотите воспроизвести определенный звуковой эффект:
File file = new File("resources/NotBad.wav");
playWav(file);
Убедитесь, что объект файла указывает на правильное местоположение файла.Если вы хотите зациклить аудиофайл, как, например, для фоновой музыки игры, укажите логическое значение true для необязательного параметра loopContinuous :
File file = new File("resources/BackgroundMusic.mid");
playWav(file, true);