performance - Javafx 在不中断播放的情况下平滑地改变音频的速度
问题描述
改变 mp3 文件的播放速度的最佳方法是什么,从 1.0 逐渐变为 1.5 而不会中断声音,听者也不会注意到明显的增加步骤?我玩弄了 setRate,但我没有让事情顺利进行。
public class AudioSyncTest extends Application {
private String song;
private Media songSound;
private MediaPlayer mediaPlayer;
Pane pane = new Pane();
@Override
public void start(Stage stage) throws Exception {
song = "/audio/I love the rain.mp3";
songSound = new Media((getClass().getResource(song).toString()));
mediaPlayer = new MediaPlayer(songSound);
mediaPlayer.seek(Duration.ZERO);
mediaPlayer.setRate(1);
mediaPlayer.play();
Button b = new Button("Speed up smoothly..");
b.setOnAction(actionEvent ->
{
backgroundTask();
});
pane.getChildren().add(b);
Scene scene = new Scene(pane, 280, 200);
stage.setScene(scene);
stage.show();
}
我尝试了后台任务......但也没有运气。
public void backgroundTask() {
Task<Void> task = new Task<>() {
double currentSpeed = 1;
double increment = 0.01;
@Override
public Void call() {
for (int i = 0; i < 50; i++) {
try {
Thread.sleep(100);
currentSpeed+= increment;
mediaPlayer.setRate(currentSpeed);
System.out.println("incremented: " + currentSpeed);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
//mediaPlayer.setRate(ThreadLocalRandom.current().nextDouble(0.5, 1.5));
return null;
}
};
new Thread(task).start();
}
任何帮助,将不胜感激!亲切的问候,马丁