web-dev-qa-db-ja.com

JavaFXでサウンドを再生する方法

私はJavaFXを使い始めました。基本的な仕組みを知っています。メディアとmediaplayerクラスを使用して、「sound.mp3」というサウンドを再生しようとしました。私はEclipseでプログラミングしていますが、「(デフォルトのパッケージ)」と同じフォルダーであるsrcフォルダーにサウンドファイルがあります。これが私のコードです:

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
12
user3010445

他の答えが言うことのちょうど実用的な編集:

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;

魅力のように機能します。

15
anaik
mApplause = new AudioClip(this.getClass().getResource("/sounds/applause.mp3").toExternalForm());

これが私が使ったもので、うまくいったので、おそらくもう問題ではないことはわかっていますが、他の何かを探しているときにグーグル検索で見つかったので、答えたいと思いました。 :)

ToExternalフォームの意味は、パスファイルのURLフォームを形成するように指示します。

5
Enes

これは私が現在使用しているものです:

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

オーディオファイルの場所によって異なります。 (これも.wavのみを受け入れます)クリップが使用する必要があるsrcフォルダーの外にある場合

new Media("file:sound.wav")

そうでなければ大丈夫です

0
Bonfra04