Как вы можете обеспечить плавный переход между двумя фрагментами звука?
В приложении JavaFX я использую javafx.scene.media.MediaPlayer
для воспроизведения вступительного фрагмента, который выполняется main / looping-кусок.Медиа проигрывается просто отлично, но проблема в переходе и цикле.
Вот что я сейчас делаю:
private static void foo(final Media intro, final Media loop) {
final MediaPlayer introPlayer = new MediaPlayer(intro);
introPlayer.play();
final MediaPlayer loopPlayer = new MediaPlayer(loop);
loopPlayer.pause(); // An attempt to load the media so it will be ready to be played.
introPlayer.setOnEndOfMedia(loopPlayer::play());
loopPlayer.setOnEndOfMedia(() -> loopPlayer.seek(Duration.ZERO));
//loopPlayer.setCycleCount(Integer.MAX_VALUE); // Similar to the above line, but there is still a delay between loops.
}
MediaPlayer :: pause действительно помогает некоторым, но естьочень заметная задержка между концом вводного носителя и началом циклического воспроизведения.Кроме того, существует еще одна заметная задержка между концом циклического носителя и повтором.
Я дополнительно попытался использовать javafx.scene.media.AudioClip
, поскольку он предположительно имеет меньше служебных данных, чем javafx.scene.media.MediaPlayer
.Я написал свой собственный слушатель, чтобы сказать, когда трек закончился (и сразу после этого начать цикл), но я все еще видел подобную задержку.
Здесь были некоторые похожие посты, которые я нашел, но не дал решенияк проблеме:
JavaFX MediaPlayer воспроизводит цикл фоновой музыки с небольшой вступительной музыкой
Это определенно актуально (по совпадению, это почти годовщина этогосообщение), но я уже использую медиа-файл в формате .wav и все еще испытываю задержку.
JavaFX AudioClip.play ()
Что похоже на то, что япопробовал с Audioclip, кроме того, я использовал запланированный исполнитель, чтобы воспроизвести звук.(Там, где я все еще испытывал задержку).
И, как последнее замечание, я проверил свой звук в Audacity, где он плавно перешел и зациклился.
Что рекомендуют некоторыерешения для этих типов проблем?
Редактировать:
- Добавлено дополнение к блоку кода с упоминанием MediaPlayer :: setCycleCount (Integer)