2016-10-25 4 views
3

Ich habe dieses einfache Programm, das nur eine Note mit MIDI spielt. Das Problem ist, obwohl es die Note spielt, läuft das Programm weiter, aber ich weiß nicht warum. Irgendeine Hilfe?Java einfaches MIDI-Programm endet nicht

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(); 

Antwort

1

Der Sequenzer muss geschlossen sein. Eine Möglichkeit ist, nur sequencer.close() bis zum Ende des Codes hinzufügen, aber da Sequencer implementiert AutoCloseable, der bessere Ansatz ist, um es in einer Try-mit-Ressourcen-Klausel:

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

Sie benötigen

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

Ich hoffe, dass diese Hilfe Sie zu nutzen.

+0

was redest du da ?? nutzloser Kram ?? du hast es von hier http://stackoverflow.com/questions/3779434/java-stop-midi-playback ?? – gpasch

+0

Warum? Hast du geschaut, als du antwortest? :) –

+0

Ich sehe, dass Sie schauen –