Wie zu spielen sound in JavaFX?
Ich bin das Experimentieren mit JavaFX zu machen, ein kleines Spiel.
Möchte ich hinzufügen, sound.
Wie?
Versuchte ich MediaPlayer
mit media
definiert mit relativ source
Attribut wie:
attribute media = Media{
source: "{__FILE__}/sound/hormpipe.mp3"
}
attribute player = MediaPlayer{
autoPlay:true
media:media
}
Es nicht zu spielen.
Ich bekomme
FX Media Object caught Exception com.sun.media.jmc.MediaUnavailableException: Media unavailable: file: ... Sound.class/sound/hormpipe.mp3
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nur eine Vermutung, aber ist die Datei "hornpipe.mp3" und nicht "hormpipe.mp3" (mit einem m)?
var player = javafx.Szene.media.MediaPlayer {
repeatCount: javafx.Szene.media.MediaPlayer.REPEAT_FOREVER
Medien: Medien { source: "{__DIR__}clip.wav"
};
};
player.play();
Müssen Sie incluye audio-Datei im build/Verzeichnis zusammengestellt, sodass Netbeans kann es pack in die jar-Datei.
Nur eine Vermutung, aber ich denke, Ihr
{__FILE__}
wird, erweitern Sie den Namen Ihrer Datei. Versuchen Sie, ersetzen Sie es mit{__DIR__}
.Beachten Sie auch, dass
{__DIR__}
enthält die abschließenden /, so versuchen Sie dies:EDIT: ich habe einige Graben, und anscheinend, die Quelle von einem Medien-Objekt muss entweder ein remote-URL, oder ein absoluter Dateipfad sein, da die media-Dateien dürfen nicht in Gläsern (was ich hoffe, wird geändert mit zukünftigen Versionen, da ich wirklich wie JavaFX und wollen in der Lage sein, um desktop-apps mit es). Siehe: JavaFX FAQ.
Dieser arbeitete für mich:
Source-Datei sollte in der Projekt-root-Verzeichnis (nicht src, nicht dist).
OK, nutzten diese Frage, um MP3-audio funktioniert (irgendwie), habe ich gelernt, die folgenden (nicht viel).
1) für komprimierte Audio-Formate, ist sehr plattformabhängig. Meine ständig aktualisiert Mint 17.1->18 Maschine spielt mp3-fein mit Medien und MediaPlayer. Frisch installiert von Mint 18 wird nicht (mit den dev-tools).
So verwenden .wav-Dateien.
2) Eines der Dinge, die Sie brauchen, um bewusst mit Medien/MediaPlayer ist, dass, um zu spielen Sie mehrfach (immer wieder oder alle auf einmal, dh auf einen Knopf drücken/was auch immer in einem Spiel), haben Sie, um zu laichen N Anzahl der MediaPlayer-Objekte, und jeder wird einmal abgespielt und dann angehalten.
Also die Verwendung von javafx.Szene.media.AudioClip
AudioClip hat auch seine Probleme, zu denen auch die Speicherung der raw-audio-Daten im RAM-Speicher auf einmal statt der Pufferung. So gibt es die Möglichkeit, übermäßig viel Speicher zu verwenden.
Egal, welche Methode Sie am Ende gehen mit, eine Sache kritisch zu bewusst war, erwähnt daevon früher - das Pfad Problem. Mit NetBeans, Sie haben NetBeansProjects/yourproject/src/yourproject/foo.java. Die sounds in dem obigen Beispiel gehen, in NetBeansProjects/yourproject/Geräusche/roll.wav