나는 현재 재생 한 음표를 사용자가 재생할 수있는 기능을 구현했습니다.Java Midi 시퀀서 - 재생 헤드로 재생 참고 사항
public void playNotes() throws InvalidMidiDataException,
MidiUnavailableException {
ArrayList<KeyPress> keyPressList = keyPressListCollection.getKeyPressList();
double bpm = keyPressListCollection.getMetronome().getBpm();
double millisPerTick = (60000.0/(bpm * 16.0));
double ticksPerMilli = 1/millisPerTick;
if (keyPressListCollection.isPlaying()) {
sequencer.stop();
sequencer.close();
}
sequencer = MidiSystem.getSequencer();
sequencer.open();
Sequence sequence = new Sequence(Sequence.PPQ, 16);
Track track = sequence.createTrack();
for (int i = 0; i < keyPressList.size(); i++) {
KeyPress keyPress = keyPressList.get(i);
ShortMessage noteOnMsg = new ShortMessage();
noteOnMsg.setMessage(ShortMessage.NOTE_ON, 0, keyPress.getKeyNumber(), keyPress.getVelocity());
ShortMessage noteOffMsg = new ShortMessage();
noteOffMsg.setMessage(ShortMessage.NOTE_OFF, 0, keyPress.getKeyNumber(), 0);
track.add(new MidiEvent(noteOnMsg, (long) (keyPress.getStartTime() * ticksPerMilli)));
track.add(new MidiEvent(noteOffMsg, (long) (keyPress.getEndTime() * ticksPerMilli)));
}
keyPressListCollection.setPlaying(true);
sequencer.setSequence(sequence);
sequencer.setTempoInBPM((float) bpm);
sequencer.start();
이 잘 작동하고 플레이 내 ArrayList에있는 메모를이다 : 여기
는 코드입니다. 그러나 나는 어떤 음표가 연주되고 있는지 또는 연주의 위치가 사용자에게 시각적으로 보여지기를 원합니다.질문 : 시퀀서가 처리하는 각 MidiEvent에 대해 메소드 호출을 작성하려면 어떻게해야합니까?