我正在编写一些代码,这些代码在运行时会自动开始播放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。有谁知道为什么会发生这种情况?感谢。
答案 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;
}