Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中播放不同的声音文件_Java_Audio - Fatal编程技术网

在Java中播放不同的声音文件

在Java中播放不同的声音文件,java,audio,Java,Audio,我尝试在Java中不同的时间播放多个声音文件。我是通过停止一个文件,然后在几秒钟后启动另一个文件来实现的。然而,每当我这样做时,Java要么冻结,要么在我尝试切换文件时抛出错误。这是我用来播放不同文件的函数: public void backgroundSound(String musicFile){ System.out.println("1"); if(this.clip!= null){ if(this.clip.isRunning()){

我尝试在Java中不同的时间播放多个声音文件。我是通过停止一个文件,然后在几秒钟后启动另一个文件来实现的。然而,每当我这样做时,Java要么冻结,要么在我尝试切换文件时抛出错误。这是我用来播放不同文件的函数:

public void backgroundSound(String musicFile){
    System.out.println("1");
    if(this.clip!= null){
        if(this.clip.isRunning()){
            this.clip.close();
         }
    }
    System.out.println("2");
    try{
        File soundFile = new File(musicFile);
        AudioInputStream audioIn =
            AudioSystem.getAudioInputStream(soundFile);
        this.clip = AudioSystem.getClip();
        this.clip.open(audioIn); // line 538
        this.clip.start();
        this.clip.loop(Clip.LOOP_CONTINUOUSLY);
    }

    catch (UnsupportedAudioFileException e) {
            e.printStackTrace();
      } catch (IOException e) {
     e.printStackTrace();
      } catch (LineUnavailableException e) {
     e.printStackTrace();
      }
}
任何帮助都将不胜感激

以下是使用
this.clip.flush()
而不是
this.clip.close()时的堆栈跟踪:


你有具体的错误吗?java完全冻结在我身上并停止工作,因此很难确定具体的错误。但是,如果我将this.clip.close()更改为this.clip.flush(),java会在以下行抛出一个错误:this.clip.open(audioIn)当我更改音乐文件时,我们需要这个错误。你能在带有debug的IDE中运行它并查看堆栈跟踪吗?有关更具体的详细信息,我相信错误来自此.clip.close(),因为当我运行音乐文件时,它会在打印语句1和2之间冻结。下面是堆栈跟踪:
javax.sound.sampled.LineUnavailableException: line with format PCM_SIGNED 44100.0 Hz, 16 bit, stereo, 4 bytes/frame, little-endian not supported.
        at com.sun.media.sound.DirectAudioDevice$DirectDL.implOpen(DirectAudioDevice.java:492)
        at com.sun.media.sound.DirectAudioDevice$DirectClip.implOpen(DirectAudioDevice.java:1278)
        at com.sun.media.sound.AbstractDataLine.open(AbstractDataLine.java:107)
        at com.sun.media.sound.DirectAudioDevice$DirectClip.open(DirectAudioDevice.java:1059)
        at com.sun.media.sound.DirectAudioDevice$DirectClip.open(DirectAudioDevice.java:1149)
        at MyGame.backgroundSound(MyGame.java:538)
        at MyGame.actionPerformed(MyGame.java:161)
        at javax.swing.Timer.fireActionPerformed(Timer.java:291)
        at javax.swing.Timer$DoPostEvent.run(Timer.java:221)
        at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
        at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:666)
        at java.awt.EventQueue.access$400(EventQueue.java:81)
        at java.awt.EventQueue$2.run(EventQueue.java:627)
        at java.awt.EventQueue$2.run(EventQueue.java:625)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:636)
        ...