【问题标题】:Creating audio player in java在java中创建音频播放器
【发布时间】:2021-04-18 20:49:20
【问题描述】:

我正在尝试使用 java 播放一个简单的 mp3 文件。我写的代码是:

public void playAudio(String fileSource) {

  try (InputStream music = new FileInputStream(fileSource)) {
    AudioStream audioStream = new AudioStream(music);

    AudioPlayer.player.start(audioStream);
  } catch (Exception e) {
    JOptionPane.showMessageDialog(null, "error");
  }
}

但是当我为该方法提供文件路径时,没有播放任何内容。缺少什么代码?谢谢。

【问题讨论】:

    标签: java audio inputstream


    【解决方案1】:

    你的例子可以播放midi、wav文件,也许还有其他文件,但不能播放mp3,因为专利问题,但是如果你可以使用JavaFX,那么你可以像这样播放mp3:

    import java.io.File;
    
    import javafx.scene.media.Media;
    import javafx.scene.media.MediaPlayer;
    
    public class MainClass {
    
        public static void main(String[] args) {
            
            com.sun.javafx.application.PlatformImpl.startup(()->{});
            
            Media sound = new Media(new File("C:\\Users\\SomeUser\\Desktop\\someFile.mp3").toURI().toString());
            MediaPlayer player = new MediaPlayer(sound);
            player.play();
            
            try {
                Thread.sleep(20000); //don't exit too early
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            
            com.sun.javafx.application.PlatformImpl.exit();
        }
    }
    

    否则您可以使用其他一些库,例如 Java Stream Player

    顺便说一下,您的初始示例的正确语法是:

    InputStream in = null;
    try {
        in = new FileInputStream("someFile.wav");
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
    AudioStream as = null;
    try {
        as = new AudioStream(in);
    } catch (IOException e) {
        e.printStackTrace();
    }
    AudioPlayer.player.start(as);
    

    【讨论】:

    • 谢谢,我已将文件转换为 wav,并且使用新语法可以正常工作。你能解释一下为什么流现在正在工作,它们已经在 try 块之外被声明了吗?我最初将它们括在括号中,因为我认为它们必须被关闭?
    • 太棒了!实际上我正在测试你的例子并且也得到了沉默:-) 然后我找到了其他一些例子。通常 try catch 语法是:try { // 要尝试的代码块 } catch(Exception e) { // 处理错误的代码块 } 你的 try 块中的圆括号 () 我猜是用于资源声明,但发生在您的示例是应用程序快速完成并在播放器开始播放之前销毁所有资源。
    • 现在我发现如果你把 Thread.sleep(10000);玩家声明后!如果您愿意,您也可以将所有代码放到一个大的 try 块中,尽管只有 new FileInputStream("someFile.wav")new AudioStream(in) 需要它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多