2016-10-25 10 views
3

저는 MIDI를 사용하여 하나의 음을 연주하는이 간단한 프로그램을 가지고 있습니다. 문제는 프로그램이 계속 진행하는 메모를 재생할지라도 그 이유는 모르겠습니다. 어떤 도움이 필요합니까?Java 간단한 MIDI 프로그램이 끝나지 않았습니다

Sequencer sequencer = MidiSystem.getSequencer(); 
    sequencer.open(); 
    Sequence sequence = new Sequence(Sequence.PPQ, 1); 
    Track track = sequence.createTrack(); 

    ShortMessage noteOnMsg = new ShortMessage(); 
    noteOnMsg.setMessage(ShortMessage.NOTE_ON, 0, 60, 100); 
    ShortMessage noteOffMsg = new ShortMessage(); 
    noteOffMsg.setMessage(ShortMessage.NOTE_OFF, 0, 60, 100); 

    track.add(new MidiEvent(noteOnMsg, 0)); 
    track.add(new MidiEvent(noteOffMsg, 120)); 
    sequencer.setSequence(sequence); 

    sequencer.start(); 
    Thread.sleep(5000); 
    sequencer.stop(); 

답변

1

시퀀서를 닫아야합니다. 하나의 옵션은 코드의 끝에 sequencer.close()을 추가하는 것입니다 만, 시퀀서는 AutoCloseable를 구현하기 때문에, 더 나은 방법은 시도 -과 - 자원 절에 넣어하는 것입니다

try (Sequencer sequencer = MidiSystem.getSequencer()) { 
    sequencer.open(); 
    Sequence sequence = new Sequence(Sequence.PPQ, 1); 
    Track track = sequence.createTrack(); 

    ShortMessage noteOnMsg = new ShortMessage(); 
    noteOnMsg.setMessage(ShortMessage.NOTE_ON, 0, 60, 100); 
    ShortMessage noteOffMsg = new ShortMessage(); 
    noteOffMsg.setMessage(ShortMessage.NOTE_OFF, 0, 60, 100); 

    track.add(new MidiEvent(noteOnMsg, 0)); 
    track.add(new MidiEvent(noteOffMsg, 120)); 
    sequencer.setSequence(sequence); 

    sequencer.start(); 
    Thread.sleep(5000); 
    sequencer.stop(); 
} 
-2

당신은

if (sequencer != null && sequencer.isOpen()) { 
    sequencer.stop(); 
    sequencer.setMicrosecondPosition(0); 
} 

나는이 당신을 도와 희망을 사용해야합니다.

+0

을 당신이 무엇에 관해 얘기하는지? 쓸모없는 쓰레기? 당신은 여기에서 그것을 가지고 http://stackoverflow.com/questions/3779434/java-stop-midi-playback ?? – gpasch

+0

왜? 대답 할 때 보셨나요? :) –

+0

나는 그것을보고있는 것을 본다. –