如何在 Java 中播放声音文件

Posted

技术标签:

【中文标题】如何在 Java 中播放声音文件【英文标题】:How to play a sound file in Java 【发布时间】:2017-04-07 10:00:03 【问题描述】:

我在许多论坛和 YouTube 教程中搜索了一些简单的代码来播放声音文件 (.mp3),但我发现的所有内容都不适合我。

我总是得到它找不到文件或其他错误的异常,但它总是以异常结束。

有什么我必须先配置的吗?

-编辑- 我再次尝试了以下代码以显示我得到了什么异常:

Here is my code

添加 JFXPanel 后,我得到了异常: 线程“main”MediaException 中的异常:MEDIA_UNAVAILABLE:D:\bip.mp3(系统找不到文件)// 是的,我检查了路径是否正确。

【问题讨论】:

这是我搜索的第一件事***.com/questions/6045384/playing-mp3-and-wav-in-java Playing .mp3 and .wav in Java?的可能重复 JavaFX: "Toolkit" not initialized when trying to play an mp3 file through MediaPlayer class的可能重复 @phihag 我已经找到了这篇文章,但我尝试了解决方案,但它仍然不起作用......我仍然得到相同的结果。也许我做错了什么? @CRHS 您链接到的代码(在图片中而不是在此处发布 - 为什么?)不包含任何解决方案。 【参考方案1】:

要避免初始化异常,您必须调用 Application.launch() 方法或简单地实例化一个新的 JFXPanel() 类(即使它不用于任何事物)。这将在应用程序启动时启动 JavaFxRuntime

所以在你的代码中添加以下行

 final JFXPanel fxPanel = new JFXPanel();

导入以下包

import javafx.embed.swing.JFXPanel;

现在您的代码将如下所示

import java.io.File;
import javafx.embed.swing.JFXPanel;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;

public class Test 

public static void main(String args[]) 

    final JFXPanel fxPanel = new JFXPanel();
    String bip = "D://bip.mp3";  //sound file path
    Media hit = new Media(new File(bip).toURI().toString());
    MediaPlayer mediaPlayer = new MediaPlayer(hit);
    mediaPlayer.play();

  

【讨论】:

现在我得到了这个:线程“main”中的异常 MediaException:MEDIA_UNAVAILABLE:D:\Waves.mp3(系统找不到文件) 检查媒体文件名和路径,因为当我尝试将 bip.mp3 更改为 bip1.mp3(没有这样的文件)时,我得到了同样的错误,所以请检查文件名是否正确。 那是有线的……我检查了 5 次,但结果仍然相同……我什至为我的文件选择了相同的名称以确保 :( 尝试添加这样的媒体 Media hit = new Media("file:///D://bip.mp3");文件后三个斜线。参考superuser.com/questions/352133/…【参考方案2】:

也许发布一个特定的错误可以解决你的问题,但无论如何我认为this 可以帮助你。我也实现了它,并且非常适合我。

这就是我的做法:

List<Media> mediaList = new ArrayList<>();
FileManager files = new FileManager();
files.loadMediaFiles(new File("your music directory goes here.."));

files.getFiles().stream().forEach((media) -> 
    mediaList.add(new Media(media));
);


MediaPlayer mediaPlayer = new MediaPlayer(playList.get(0));
MediaView mediaView = new MediaView(mediaPlayer);

playPauseButton.setOnAction((ActionEvent event) -> 
        if (mediaPlayer.getStatus() == Status.PAUSED || mediaPlayer.getStatus() == Status.READY || mediaPlayer.getStatus() == Status.STOPPED) 
            mediaPlayer.play();
            playPauseButton.setGraphic(pause);
         else 
            mediaPlayer.pause();
            playPauseButton.setGraphic(play);
        
    );

你也可以在 github 上查看我的app。

【讨论】:

以上是关于如何在 Java 中播放声音文件的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Java 游戏中播放声音?

Java:多次播放声音

如何在 Java 中播放除哔哔声以外的声音?

如何简单地预加载声音并在 Java 中播放?

如何在 iOS 应用程序中连续循环播放声音文件?

如何同时播放两个声音?