JavaFX JavaFX - Hintergrundmusik in einem seperatem Task/Service

fhs14647

Mitglied
Werte Profis
Ich möchte für ein kleines Spiel die Hintergrundmusik in einem gesondertem Thread laufen lassen, die Musik soll sich in einer Loop-Schleife wiederholen. Ich habe das so gelöst, es funkt auch, nur bei Neustart des Songs überlappen sich komische Geräusche.
Meine Frage: wie wiederholt man in einem Task/Service ein Audiofile?

Vielen Dank vorab

Hier der Code



Java:
finalTask task =newTask(){

@Overrideprotected
Object call() throwsException{
int s = INDEFINITE;
AudioClip audio =newAudioClip(getClass().getResource("aquarium.mp3").toExternalForm());
audio.setVolume(0.5f);
audio.setCycleCount(s);
audio.play();
returnnull;}};
Thread thread =newThread(task);
thread.start();
 
Zuletzt bearbeitet:
Tasks haben doch ein #onSuccess-Listener (oder so ähnlich). Starte den Task doch dort einfach wieder neu... Geht das nicht?
Was die Geräusche angeht... Keine Ahnung.
 
Ich habs mal getestet, mp3 scheint Probleme bei Wiederholungen zu machen. Im 1. Versuch hat er es nur 1 mal abgespielt, egal ob ich CycleCount explizit angebe (2,3,4,5) oder INDEFINITE. Hab die Datei dann noch kürzer geschnitten und bei der Wiederholung hackte er scheinbar immer auf der 1. Sekunde im Unendlichmodus rum. Das könnte das komische Geräusch sein, wie du es nennst.

Lösung: MP3 in WAV umwandeln, das funktioniert sowohl mit CycleCount als auch unendlich ohne Probleme.

Übrigens, so ist es schöner, die Konstante zu benutzen:
Java:
audio.setCycleCount(AudioClip.INDEFINITE);
 
Hallo Tom299

Super, genau das war die Lösung. Da wäre ich nie darauf gekommen, dass es am Format liegen könnte. Vielen, vielen Dank, das hat mir immens geholfen!!!!!
 
Ich hab das auch nur zufällig rausgefunden, weil ich ein Beispiel mit einer WAV-Datei gesehen hatte. Trotzdem sollte das mit einer MP3-Datei auch möglich sein.

Hab gerade noch ein Beispiel mit dem MediaPlayer ausprobiert, der spielt bei mir auch die MP3 in Endlosschleife ohne Probleme.
 
Also ich meinte schon die MediaPlayer-Klasse von Java, nicht den Windows Media Player, nur um sicherzugehen 😉

Java:
            MediaPlayer mediaPlayer = new MediaPlayer(new Media(getClass().getResource("/audio/pling.mp3").toExternalForm()));
            mediaPlayer.setVolume(0.5);
            mediaPlayer.setCycleCount(MediaPlayer.INDEFINITE);
//            mediaPlayer.setCycleCount(3);
            mediaPlayer.play();
 

Neue Themen


Zurück
Oben