Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用JavaFX播放声音_Java_Audio_Javafx_Media - Fatal编程技术网

如何使用JavaFX播放声音

如何使用JavaFX播放声音,java,audio,javafx,media,Java,Audio,Javafx,Media,我刚开始使用JavaFX。我知道它的基本原理。我尝试使用media和mediaplayer类来播放一种声音,称为“sound.mp3”。我在eclipse中编程,声音文件在src文件夹中,与“(default package)”文件夹相同。这是我的密码: import javafx.scene.media.*; import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.layout.

我刚开始使用JavaFX。我知道它的基本原理。我尝试使用media和mediaplayer类来播放一种声音,称为“sound.mp3”。我在eclipse中编程,声音文件在src文件夹中,与“(default package)”文件夹相同。这是我的密码:

import javafx.scene.media.*;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class Main extends Application {

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) {
        primaryStage.setTitle("Hello World!");

        String ssound = "sound.mp3";
        Media sound = new Media(ssound);
        MediaPlayer mediaPlayer = new MediaPlayer(sound);
        mediaPlayer.play();

        StackPane root = new StackPane();
        primaryStage.setScene(new Scene(root, 800, 450));
        primaryStage.show();
    }
}
请告诉我我做错了什么

以下是来自控制台的错误消息:

Exception in Application start method
Exception in thread "main" java.lang.RuntimeException: Exception in Application start method
    at com.sun.javafx.application.LauncherImpl.launchApplication1(Unknown Source)
    at com.sun.javafx.application.LauncherImpl.access$000(Unknown Source)
    at com.sun.javafx.application.LauncherImpl$1.run(Unknown Source)
    at java.lang.Thread.run(Thread.java:724) Caused by: java.lang.IllegalArgumentException: uri.getScheme() == null!
    at com.sun.media.jfxmedia.locator.Locator.<init>(Unknown Source)
    at javafx.scene.media.Media.<init>(Unknown Source)
    at Main.start(Main.java:16)
    at com.sun.javafx.application.LauncherImpl$5.run(Unknown Source)
    at com.sun.javafx.application.PlatformImpl$5.run(Unknown Source)
    at com.sun.javafx.application.PlatformImpl$4$1.run(Unknown Source)
    at com.sun.javafx.application.PlatformImpl$4$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.application.PlatformImpl$4.run(Unknown Source)
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(Unknown Source)
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at com.sun.glass.ui.win.WinApplication.access$100(Unknown Source)
    at com.sun.glass.ui.win.WinApplication$3$1.run(Unknown Source) ... 1 more
应用程序启动方法中出现异常 线程“main”java.lang.RuntimeException中的异常:应用程序启动方法中的异常 位于com.sun.javafx.application.LaunchImpl.launchApplication1(未知源) 位于com.sun.javafx.application.launchempl.access$000(未知来源) 位于com.sun.javafx.application.launchempl$1.run(未知源) 在java.lang.Thread.run(Thread.java:724)处,由以下原因引起:java.lang.IllegalArgumentException:uri.getScheme()==null! 位于com.sun.media.jfxmedia.locator.locator。(未知来源) 位于javafx.scene.media.media。(未知来源) 在Main.start(Main.java:16) 位于com.sun.javafx.application.launchempl$5.run(未知源) 位于com.sun.javafx.application.PlatformImpl$5.run(未知来源) 位于com.sun.javafx.application.PlatformImpl$4$1.run(未知来源) 位于com.sun.javafx.application.PlatformImpl$4$1.run(未知来源) 位于java.security.AccessController.doPrivileged(本机方法) 位于com.sun.javafx.application.PlatformImpl$4.run(未知源) 在com.sun.glass.ui.InvokeLaterDispatcher$Future.run(未知源) 在com.sun.glass.ui.win.WinApplication.\u runLoop(本机方法) com.sun.glass.ui.win.WinApplication.access$100(未知来源) 在com.sun.glass.ui.win.WinApplication$3$1.run(未知源)。。。还有一个
这是我目前正在使用的:

Media hit = new Media(new File(soundFilename).toURI().toString());

只是其他答案的工作汇编:

String musicFile = "StayTheNight.mp3";     // For example

Media sound = new Media(new File(musicFile).toURI().toString());
MediaPlayer mediaPlayer = new MediaPlayer(sound);
mediaPlayer.play();
将音乐文件添加到项目文件夹中,
bin
src
旁边

任何IDE都会提示您添加以下内容:

import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import java.io.File;
工作起来很有魅力

mApplause = new AudioClip(this.getClass().getResource("/sounds/applause.mp3").toExternalForm());
这就是我所用的,而且很有效,我知道这可能不再重要了,但因为当我在搜索其他东西时,它进入了我的谷歌搜索,我想我会回答它的


这意味着它告诉toExternal Form以形成路径文件的url形式。

这取决于音频文件的位置。(也只接受.wav) 如果剪辑在src文件夹之外,则需要使用

new Media("file:sound.wav")

如果不是,那没关系,你还好吗?

这里的其他答案对我不起作用,但这确实起到了作用:

Media sound = new Media(getClass().getResource("sounds/sound.mp3").toExternalForm());
MediaPlayer mediaPlayer = new MediaPlayer(sound);
mediaPlayer.play();

我也有同样的问题。在我的例子中,是关于对javaFX的访问。假设您使用IntelliJ IDEA,请转到运行->编辑配置,选择“修改选项”,单击“添加VM选项”,然后粘贴以下内容: --模块路径/path/TO/YOUR/JAVAFX/LIB——添加模块JAVAFX.controls、JAVAFX.fxml、JAVAFX.base、JAVAFX.media (将/PATH/TO/YOUR/JAVAFX/LIB替换为计算机上JAVAFX安装目录中“LIB”文件夹的目录。 这类似于本官方教程中所说的:;但添加了模块javafx.media和javafx.base


注意,根据我的搜索和经验,JavaFX 11 <强>不能< /强> .mp3文件(与WAV文件不同)。您可能需要考虑将JavaFX更新为16,播放.mp3文件。

基于<代码> URI.GETStudio()= NULL/<代码>,我假定您需要为声音文件提供URI,而不只是文件名。源必须表示有效的URI,并且是不可变的。只支持HTTP、文件和JAR URL。"您应该只使用AudioClip类播放短音频文件。它存储整个声音的原始、未压缩的音频数据,对于长音频剪辑来说,这些数据可能相当大。有关更多信息:谢谢!我曾尝试使用JOAL播放声音,但它在每个wav文件的末尾播放了一个令人讨厌的弹出声音,而且也被证明过于复杂只是为了播放声音。这解决了我的问题。这不是一个完整的答案。这不是播放声音。