Java MIDI音序器延迟

时间:2012-03-30 17:47:32

标签: java midi

我一直在编写Head First Java书中的一些代码,以便让MIDI音序器动态更新音符。

这是通过使用一个16 x 16的JCheckboxes网格来实现的,其中包含查看用户输入的actionListeners。每次检测到更改时,音序器将停止播放,删除当前音轨,重新构建音轨(通过检测选中的方框),然后从当前播放位置恢复播放。

这样可行,但每次更改都会造成轻微延迟。有没有人知道如何处理这个问题?

public void buildTrackAndStart() {
    int[] trackList = null;

    sequence.deleteTrack(track);
    track = sequence.createTrack();

    for (int i = 0; i < 16; i++) {
        trackList = new int[16];

        int key = instruments[i];

        for (int j = 0; j < 16; j++ ) {
            JCheckBox jc = (JCheckBox) checkboxList.get(j + (16*i));
            if ( jc.isSelected()) {
                trackList[j] = key;
            } else {
                trackList[j] = 0;
            }
        } // close inner loop

        makeTracks(trackList);
        track.add(makeEvent(176,1,127,0,16));
    } // close outer

    track.add(makeEvent(192,9,1,0,15));
    try {
        sequencer.setSequence(sequence);
        sequencer.setLoopCount(sequencer.LOOP_CONTINUOUSLY);
        sequencer.start();
        sequencer.setTempoInBPM(120);
    } catch(Exception e) {e.printStackTrace();}
} // close buildTrackAndStart method

1 个答案:

答案 0 :(得分:0)

您需要在Java音序器播放时动态添加事件。使用默认的Java音序器很困难,因为在这种情况下它的行为是不确定的,请参阅JavaSound FAQ 1