我如何检查音乐何时结束

时间:2019-05-30 16:36:14

标签: java swing audio

我有一个带有2个按钮的JFrame:“打开”和“关闭”

我的问题是歌曲结束后,我无法确认它是否结束并再次播放

如何检查?非常感谢 下面是我在Swing上播放声音的方式

class MP3 {
private Player player;
private String filename;

public MP3(String filename) {
    this.filename = filename;
}
public void stop() {
    if (player != null)
        player.close();
}
public void play() {

    try {
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream(filename));
        player = new Player(bis);
    } catch (FileNotFoundException | JavaLayerException ex) {
        System.out.println(ex);
    }

    new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                player.play();
            } catch (Exception ex) {
                System.out.println(ex);
            }
        }
    }).start();
}

}

点击按钮时出现事件

private void btnPlayActionPerformed(java.awt.event.ActionEvent evt) {                                        
    sound = new MP3("src/Sound/02 - Cold Pizza.mp3");
    sound.play();
    btnPlay.setVisible(false);
    btnStop.setVisible(true);
}                                       

private void btnStopActionPerformed(java.awt.event.ActionEvent evt) {                                        
    sound.stop();
    btnStop.setVisible(false);
    btnPlay.setVisible(true);
}  

sound是主类中MP3类的一个实例

1 个答案:

答案 0 :(得分:0)

我是这样做的。我将mp3文件制成了wav文件。然后我做了两个物体

AudioInputStream songReader;
Clip song;
try{
   songReader =
              AudioSystem.getAudioInputStream(
              getClass().getResource("wally.wav"));
   song = AudioSystem.getClip();
   song.open(songReader);
}catch (Exception e){
    System.out.println("won't work");
}
try{
   song.stop();
   song.setFramePosition(0);
}catch(Exception e){
    System.out.println("Error playing your music");
}
try{
   song.start();
   song.loop(song.LOOP_CONTINUOUSLY);
}catch(Exception e){
   System.out.println("Won't work");
}

这使它可以无限播放,但是如果需要,可以使用song.stop()在任何时候停止它。希望这对您有用。