Java MIDI序列器延迟
我一直在编辑Head First Java书籍中的一些代码,以允许MIDI序列器动态更新注释 这是通过拥有一个网格16 x 16的JCheckbox来实现的,其中包含ActionListener,用于查找用户输入。每次检测到更改时,sequencer都会停止播放,删除当前曲目,重新构建曲目(通过检测选中的框),然后从当前播放位置恢复播放 这是可行的,但每次更改都会导致轻微延迟。有人知道如何处理这个问题吗Java MIDI序列器延迟,java,midi,Java,Midi,我一直在编辑Head First Java书籍中的一些代码,以允许MIDI序列器动态更新注释 这是通过拥有一个网格16 x 16的JCheckbox来实现的,其中包含ActionListener,用于查找用户输入。每次检测到更改时,sequencer都会停止播放,删除当前曲目,重新构建曲目(通过检测选中的框),然后从当前播放位置恢复播放 这是可行的,但每次更改都会导致轻微延迟。有人知道如何处理这个问题吗 public void buildTrackAndStart() { int[] t
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
public void buildTrackAndStart(){
int[]trackList=null;
顺序。删除跟踪(跟踪);
track=sequence.createTrack();
对于(int i=0;i<16;i++){
trackList=newint[16];
int键=仪器[i];
对于(int j=0;j<16;j++){
JCheckBox jc=(JCheckBox)checkboxList.get(j+(16*i));
if(jc.isSelected()){
trackList[j]=键;
}否则{
轨迹列表[j]=0;
}
}//闭合内环
makeTracks(trackList);
track.add(makeEvent(176,1127,0,16));
}//关闭外部
添加(makeEvent(192,9,1,0,15));
试一试{
序列器。设置序列(序列);
sequencer.setLoopCount(sequencer.LOOP_连续);
sequencer.start();
sequencer.setTempoInBPM(120);
}catch(异常e){e.printStackTrace();}
}//关闭buildTrackAndStart方法
您需要在Java sequencer播放时动态添加事件。使用默认的Java sequencer是很困难的,因为在这种情况下它的行为是未指定的,请参阅JavaSound常见问题解答,您需要在Java sequencer播放时动态添加事件。使用默认Java sequencer很困难,因为它在这种情况下的行为是未指定的,请参阅JavaSound常见问题解答您可能想在一个盲镜头上发布此消息-在序列运行时是否可以创建新曲目并替换对旧曲目的引用?您能提供makeTracks()函数的源代码吗?您可能只想在一个盲镜头上发布此消息-当序列运行时,是否可以创建新轨迹并替换对旧轨迹的引用?能否提供makeTracks()函数的源代码?