首页 > 解决方案 > 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();
}

任何帮助,将不胜感激!亲切的问候,马丁

标签: performancejavafxmediaplayback

解决方案


推荐阅读