Как вы обнаружили, MediaPlayer#Play(Media)
воспроизводит звуки одновременно. Что вы хотите добиться, так это воспроизвести другой звук, если текущий закончился. Вы можете сделать это, зарегистрировав обработчик событий через MediaPlayer#setOnEndOfMedia(Runnable)
. В прослушивателе событий вы можете получить следующий звук и воспроизвести его, например, следующим образом:
public static void play(List<String> paths) {
LinkedList<Media> sounds = paths.stream().serial()
.map(path -> Main.gameDir + "/assets/sound/" + path + ".mp3")
.map(file -> new Media(new File(file).toURI().toString()))
.collect(Collectors.toList(LinkedList::new));
[ThisClass].play(sounds);
}
public static void play(LinkedList<Media> sounds) {
if (sounds.isEmpty())
return;
MediaPlayer player = new MediaPlayer(sounds.poll());
player.setOnEndOfMedia(() -> [ThisClass].play(sounds));
player.play();
}
Вам нужно заменить [ThisClass]
своим собственным именем класса. Я также взял на себя смелость добавить параметр generi c в список, который вы предоставляете, и сделал его менее конкретным c (нет необходимости в ArrayList, List достаточно) и заменил ваш явный l oop потоками.