虽然循环不起作用在音频播放器中

时间:2016-05-18 16:37:37

标签: java swing audio while-loop javasound

我正在使用声音播放器而我正在尝试创建一个while循环,它知道何时终止它正在播放的JFrame。while循环应循环播放剪辑(录制)正在播放并在剪辑完成时结束。但是这里的交易是:while循环仅在打印出来时才有效,我不想让它做什么?

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

public class SoundClipTest extends JFrame {

public SoundClipTest() {
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

  try {
     // Open an audio input stream.
    File soundFile = new File("Testing/recording (2).wav");
    AudioInputStream audioIn = AudioSystem.getAudioInputStream(soundFile);
    //URL url = new URL("http://maximumdonline.com/miscwavs/pacman.wav");
    //AudioInputStream audioIn = AudioSystem.getAudioInputStream(url);
     // Get a sound clip resource.
     Clip clip = AudioSystem.getClip();

     // Open audio clip and load samples from the audio input stream.
     clip.open(audioIn);
     clip.start();
     this.setVisible(true);
     this.setVisible(false);
     boolean run = true;

     //problem While Loop
     while(clip.isActive()){
          //Only works when I print something out during the loop:
         //System.out.println(run);

     }
     //Test While Loop has ended.
     run = false;
     System.out.println(run);
     //Close JFrame
  } catch (UnsupportedAudioFileException e) {
     e.printStackTrace();
  } catch (IOException e) {
     e.printStackTrace();
  } catch (LineUnavailableException e) {
     e.printStackTrace();
  }
}

注意:大部分声音代码来自 https://www.ntu.edu.sg/home/ehchua/programming/java/J8c_PlayingSound.html 有用。我已经对它进行了测试,但我的while循环却在哭泣!

2 个答案:

答案 0 :(得分:3)

正确处理此任务的方法是向LineListener添加ClipClip实现了javax.sound.sampled.Line界面,因此我们可以使用Line.addLineListener(LineListener) ..

  

向此行添加侦听器。每当行的状态发生变化时,将使用描述更改的update()对象调用侦听器的LineEvent方法。

答案 1 :(得分:-1)

尝试将代码修改为

while (clip.isActive()) { if(!clip.isRunning()) clip.stop(); }

这对我来说很有把戏