2016-10-20 20 views
0

私はJavaで一度に複数のサウンドを再生しようとしていましたが、一度に1つのサウンドを再生するのに問題はありませんが、一度に複数のサウンドを再生するJava

public static void play(String file) { 
     try { 
      clip = AudioSystem.getClip(); 
      clip.open(AudioSystem.getAudioInputStream(new File(file))); 
      clip.start(); 

      while (!clip.isRunning()) 
       Thread.sleep(10); 
      while (clip.isRunning()) 
       Thread.sleep(10); 

      clip.close(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

私は、このメソッドの使用方法の一例:時間は、それだけで

ここ

は私のコードです(私は、これは理にかなって願っています)1つの音を再生します

AudioPlayer.play("sound1.wav"); 

Iこれもできるようにしたい

また
AudioPlayer.play("sound1.wav"); 
AudioPlayer.play("sound2.wav"); 
AudioPlayer.play("sound3.wav"); 

、重要ではありませんが、また、同様にこのような何かやっていいだろう:あなたは、Javaのドキュメントからこのコードに従うべきであるクリップを再生するには

AudioPlayer.getPlayingSound("sound1.wav").setVolume(-0.85f); 
+0

あなたの 'while'ループが問題の原因です。彼らの全目的は、サウンドが終了するまでメソッドが戻るのを防ぐことです。 – VGR

答えて

1

を:

import java.net.URL; 
import javax.swing.*; 
import javax.sound.sampled.*; 

    public class LoopSound { 

    public static void main(String[] args) throws Exception { 
     URL url = new URL(
      "http://pscode.org/media/leftright.wav"); 
     Clip clip = AudioSystem.getClip(); 
     // getAudioInputStream() also accepts a File or InputStream 
     AudioInputStream ais = AudioSystem. 
      getAudioInputStream(url); 
     clip.open(ais); 
     clip.loop(Clip.LOOP_CONTINUOUSLY); 
     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       // A GUI element to prevent the Clip's daemon Thread 
       // from terminating at the end of the main() 
       JOptionPane.showMessageDialog(null, "Close to exit!"); 
      } 
     }); 
    }} 

あなたはクリップを同時に再生したいので、これを試すことができます:

import java.net.URL; 
    import javax.swing.*; 
    import javax.sound.sampled.*; 

    public class LoopSounds { 

    public static void main(String[] args) throws Exception { 
     URL url = new URL(
      "http://pscode.org/media/leftright.wav"); 
     Clip clip = AudioSystem.getClip(); 
     AudioInputStream ais = AudioSystem. 
      getAudioInputStream(url); 
     clip.open(ais); 

     URL url2 = new URL(
      "http://pscode.org/media/100_2817-linear.wav"); 
     Clip clip2 = AudioSystem.getClip(); 
     AudioInputStream ais2 = AudioSystem. 
      getAudioInputStream(url2); 
     clip2.open(ais2); 

     // loop continuously 
     clip.loop(Clip.LOOP_CONTINUOUSLY); 
     clip2.loop(Clip.LOOP_CONTINUOUSLY); 
     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       // A GUI element to prevent the Clip's daemon Thread 
       // from terminating at the end of the main() 
       JOptionPane.showMessageDialog(null, "Close to exit!"); 
      } 
     }); 
    } 
    } 
1

マルチスレッドを使用して複数のサウンドを同時に再生しようとする場合があります。

関連する問題