Ваш код фактически не будет воспроизводить ничего слышимого, потому что поток немедленно закрывается. В моем примере я добавил команду thread.sleep. Следующая проблема: избавьтесь от строки clip.loop, потому что вы этого не хотите.
Идея в моей версии этого состоит в том, чтобы разделить игрока на его собственный класс, который будет играть от основного. Таким образом, вы можете сделать так, чтобы экземпляр проигрывателя проигрывал мелодию один раз, а затем переключал ее так, как вам нравится. Я выбрал воспроизведение каждого волнового файла один за другим в примере, но вы можете воспроизводить произвольно или целый массив волновых файлов, если хотите:
Класс:
package scrapAudioClips;
import java.io.File;
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;
public class AudioPlayer {
public void play(String filename) {
//The filename and time to play are passed into the method.
try {
AudioInputStream stream1;
AudioFormat format = null;
DataLine.Info info;
Clip clip;
stream1 = AudioSystem.getAudioInputStream(new File(filename));
format = stream1.getFormat();
info = new DataLine.Info(Clip.class, format);
clip = (Clip) AudioSystem.getLine(info);
clip.open(stream1);
//These next two lines will get the length of the wave file for you...
long frames = stream1.getFrameLength();
double durationInSeconds = (frames+0.0) / format.getFrameRate();
// plays the song
clip.start();
// clip.loop(Clip.LOOP_CONTINUOUSLY); You don't need this anymore.
Thread.sleep((long)(durationInSeconds * 1000)); // This allows you to actually hear the audio for the time in seconds..
} catch (Exception e) {
System.out.println("File not recognized");
}
}
}
Main:
package scrapAudioClips;
public class scrapAudio {
public static void main(String[] args) {
AudioPlayer player = new AudioPlayer();
//you may play sequentially or in any random order you want with any loop structure you like...
player.play("Alesis.wav"); //You just pass the file name in...
player.play("wavefile1.wav");//Make your own playlist class as an array...
player.play("wavefile2.wav");//loop it randomly or in sequence...
}
}