java - 如何检查音乐何时结束

标签 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 类的实例

最佳答案

我就是这样做的。我把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()随时停止它。希望这对您有用。

关于java - 如何检查音乐何时结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56382216/

相关文章:

java - 在 IE 中启用 pdf 缓存

java - 删除动态 jTextFields 的最后一个逗号

android - 在android中,在其他人接听电话之前,是否有任何方法可以在通话哔声中播放音频?

java - 如何在 jdialog 中添加内部框架

java - 使倒数计时器从 10 秒变为 1 秒

java - 由于 JPanel 实现了 ActionListener,paintComponent() 和 actionPerformed() 不同步

Java - Jframe 不显示按钮标签或文本字段

php - 将音频文件长度保存在数据库中

android - 我想制作音乐应用程序(录制语音播放钢琴或吉他)

java - Apache Camel 的 @Consume 如何在 Spring Boot 项目中进行映射?