私はゲームロジックがメインで起こっているゲームを持っています。私が見つけたドキュメントに従ってサウンド再生を追加しました:
//////////////////////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ライブラリまたは他の賢い解決策はありますかこの場合のマルチスレッド?