我一直在编写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