如何确保两段音频之间的过渡是无缝的?
在 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 播放带有小介绍音乐的背景音乐循环
这个绝对是相关的(巧合的是,它几乎是那个帖子的周年纪念日),但我已经在使用 .wav 格式的媒体文件并且仍然遇到延迟。
JavaFX AudioClip.play()
这与我尝试使用 Audioclip 的方法类似,但我使用了预定的执行器来计时重播音频的时间。(我仍然遇到延迟)。
最后,我在 Audacity 中测试了我的音频,它们可以无缝地转换和循环播放。
对于这些类型的问题,有哪些推荐的解决方案?
编辑:
在代码块中添加了一个附录,提到 MediaPlayer::setCycleCount(Integer)
爪哇
声音的
javafx
java-8
音频播放器
临摹微笑
白衣非少年
相关分类