【发布时间】:2019-06-20 22:00:40
【问题描述】:
如何确保两段音频之间的无缝过渡?
在 JavaFX 应用程序中,我使用 javafx.scene.media.MediaPlayer 播放一段介绍片段,该片段由主/循环片段进行。媒体播放得很好,但问题是过渡和循环。
这是我目前正在做的事情:
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 playing background music loop with small intro music
这个肯定是相关的(巧合的是,它几乎是 那篇文章的周年纪念日),但我已经在使用 .wav 格式 媒体文件,但仍然会遇到延迟。
这与我尝试使用 Audioclip 的方法类似,但我使用了 计划的执行者何时重播音频。 (我还在的地方 遇到延迟)。
最后,我已经在 Audacity 中测试了我的音频,它们可以无缝地转换和循环播放。
对于这些类型的问题有哪些推荐的解决方案?
编辑:
- 在代码块中添加了附录,提及 MediaPlayer::setCycleCount(Integer)
【问题讨论】:
标签: java audio javafx java-8 audio-player