1

私は、実行時に 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 にリセットされます。なぜこれが起こっているのか誰にも分かりますか?ありがとう。

4

1 に答える 1

1

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;
}
于 2016-06-25T08:15:26.483 に答える