Javafx 在不中断播放的情况下平滑更改音频速度

时间:2021-04-25 17:56:20

标签: performance javafx media playback

改变 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();
}

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

0 个答案:

没有答案
相关问题