2016-10-25 4 views
3

私はMIDIを使って1つの音だけを演奏するこのシンプルなプログラムを持っています。問題は、プログラムが進行中のメモを再生するにもかかわらず、なぜか分からないということです。どんな助け?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

シーケンサーを閉じる必要があります。 1つのオプションは、ちょうどあなたのコードの末尾にsequencer.close()を追加することですが、SequencerがAutoCloseableを実装しているので、より良いアプローチは、try-と資源句でそれを置くことです:

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

私はそれを見ているのを見て –

関連する問題