1

私はゲームロジックがメインで起こっているゲームを持っています。私が見つけたドキュメントに従ってサウンド再生を追加しました:

//////////////////////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ライブラリまたは他の賢い解決策はありますかこの場合のマルチスレッド?

4

2 に答える 2

3

はい、別のスレッドを使用する必要があります。恐れることは何もありません。Javaでのマルチスレッド化は簡単です。並行性パッケージを見てください。

http://docs.oracle.com/javase/tutorial/essential/concurrency/

于 2012-07-11T19:59:47.693 に答える
0

注意:スレッドを開始する方法と、プログラムを安全にマルチスレッド化する方法を知ることは、2つの異なることです。今のところ、複数のスレッドから同じ音楽に触れないようにしてください。

于 2012-07-11T20:10:05.960 に答える