我有一个主要游戏逻辑发生的游戏。我根据我发现的文档添加了声音播放:
//////////////////////SOUND/////////////////////////
SourceDataLine soundLine = null;
int BUFFER_SIZE = 64*1024; // 64 KB
// Set up an audio input stream piped from the sound file.
try {
File soundFile = new File("tim ph3 samplepart1.wav");
AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(soundFile);
AudioFormat audioFormat = audioInputStream.getFormat();
DataLine.Info info = new DataLine.Info(SourceDataLine.class, audioFormat);
soundLine = (SourceDataLine) AudioSystem.getLine(info);
soundLine.open(audioFormat);
soundLine.start();
int nBytesRead = 0;
byte[] sampledData = new byte[BUFFER_SIZE];
while (nBytesRead != -1) {
nBytesRead = audioInputStream.read(sampledData, 0, sampledData.length);
if (nBytesRead >= 0) {
// Writes audio data to the mixer via this source data line.
soundLine.write(sampledData, 0, nBytesRead);
}
}
} catch (UnsupportedAudioFileException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
} catch (LineUnavailableException ex) {
ex.printStackTrace();
} finally {
soundLine.drain();
soundLine.close();
}
/////////////////////////////////////////////////////
它播放我在Eclipse项目文件夹中的文件中指定的文件。
问题?它会阻止主要出现的所有游戏逻辑。
这是有道理的 - 程序是顺序的,直到整首歌曲完成......我认为游戏无法继续。
这显然不会起作用,看起来我将不得不去进行可怕的多线程...但是在我做之前......我想...是否有一个Java库或其他一些聪明的人在这种情况下避免多线程的解决方案?
答案 0 :(得分:3)
是的,您需要使用单独的线程。没有什么可怕的。 Java中的多线程是一块蛋糕。查看并发包。
http://docs.oracle.com/javase/tutorial/essential/concurrency/
答案 1 :(得分:0)
注意:知道如何启动线程并知道如何安全地多线程化程序是两回事。现在,请确保避免从多个线程中触摸相同的音乐。