Я работал над редактированием некоторого кода в книге 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