暂停Java Sequencer重置Tempo

时间:2016-06-21 04:50:21

标签: java reset midi javax.sound.midi tempo

我正在编写一些代码,这些代码在运行时会自动开始播放midi序列,并且用户可以通过按键随时暂停。他们的关键事件处理工作正常,但是,我得到了一个非常奇怪的错误,其中暂停了音序器:

public void pause() {
    // if the sequencer is playing, pause its playback
    if (this.isPlaying) {
        this.sequencer.stop();
    } else { // otherwise "restart" the music
        this.sequencer.start();
    }

    this.isPlaying = !this.isPlaying;
}

重置音序器的速度。歌曲/音序器开始以120000 MPQ播放(从我的输入加载)并重置为500000 MPQ。有谁知道为什么会发生这种情况?感谢。

1 个答案:

答案 0 :(得分:0)

原来,调用start()会将音序器的速度重置为默认值500000 mpq。对于遇到同样问题的人来说,解决方案就是:

public void pause() {
    // if the sequencer is playing, pause its playback
    if (this.isPlaying) {
        this.sequencer.stop();
    } else { // otherwise "restart" the music
        // store the tempo before it gets reset
        long tempo = this.sequencer.getTempoInMPQ();

        // restart the sequencer
        this.sequencer.start();

        // set/fix the tempo
        this.sequencer.setTempoInMPQ(tempo);
    }

    this.isPlaying = !this.isPlaying;
}