web-dev-qa-db-fra.com

Comment jouer des sons avec JavaFX

Je viens de commencer à travailler avec JavaFX. Je sais comment fonctionnent les bases. J'ai essayé d'utiliser les classes media et mediaplayer pour reproduire un son, appelé "sound.mp3". Je programme en Eclipse et j'ai le fichier son dans le dossier src, le même dossier que "(package par défaut)". Voici mon code:

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();
    }
}

S'il vous plaît dites-moi ce que je fais mal.

Voici le message d'erreur de la console:

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

Juste une compilation de travail de ce que les autres réponses disent:

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

Media sound = new Media(new File(musicFile).toURI().toString());
MediaPlayer mediaPlayer = new MediaPlayer(sound);
mediaPlayer.play();

Ajoutez le fichier de musique dans votre dossier de projet, aux côtés de bin et src.

Tout IDE vous invitera à les ajouter également:

import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import Java.io.File;

Fonctionne comme un charme. 

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

Donc, c’est ce que j’ai utilisé et que cela a fonctionné. Je sais que cela n’a probablement plus d’importance, mais je me suis dit que j’allais y répondre. :) 

Signifiant la forme toExternal, il indique de former une forme url du fichier de chemin.

4
Enes

C'est ce que j'utilise actuellement:

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

cela dépend de l'endroit où se trouve le fichier audio. (De plus, il accepte uniquement les fichiers .wav) si le clip se trouve en dehors du dossier src,

new Media("file:sound.wav")

si ce n'est pas ok comment vas-tu 

0
Bonfra04