无法从MIDI听到任何声音

时间:2016-04-19 18:30:49

标签: java midi

我从java开始,并试着用midi播放一些声音。我正在关注“Head First”一书。问题是我听不到任何声音,这是我的代码

package pakedz;
import javax.sound.midi.*;

public class odtwarzaczMuzyki {
  public void graj(){
   try {
    Sequencer sekwenser = MidiSystem.getSequencer();
    System.out.println("Mamy sekwenser");
    sekwenser.open();

    Sequence sekwencja = new Sequence(Sequence.PPQ,4);
    Track sciezka = sekwencja.createTrack();

    ShortMessage a = new ShortMessage();
    a.setMessage(144, 1, 20, 100);
    MidiEvent nutaP = new MidiEvent(a, 1);
    sciezka.add(nutaP);
    ShortMessage b = new ShortMessage();
    b.setMessage(128, 1, 44, 100);
    MidiEvent nutaK = new MidiEvent(b, 16);
    sciezka.add(nutaK);

     sekwenser.setSequence(sekwencja);

 } catch (Exception ex) { 
    System.out.println("KUTASMARIAN");
}

 };

 public static void main (String[] args){
 odtwarzaczMuzyki radio = new odtwarzaczMuzyki();
 radio.graj();

 }

} 

我正在使用java 8.0

1 个答案:

答案 0 :(得分:1)

需要在Sequencer中调用start()方法。以下是修改后的(未经测试的)代码。

建议您查看Javadocofficial tutorials

package pakedz;
import javax.sound.midi.*;

public class odtwarzaczMuzyki {
  public void graj(){
    try {
      Sequencer sekwenser = MidiSystem.getSequencer();
      System.out.println("Mamy sekwenser");
      sekwenser.open();

      Sequence sekwencja = new Sequence(Sequence.PPQ,4);
      Track sciezka = sekwencja.createTrack();

      ShortMessage a = new ShortMessage();
      a.setMessage(144, 1, 20, 100);
      MidiEvent nutaP = new MidiEvent(a, 1);
      sciezka.add(nutaP);
      ShortMessage b = new ShortMessage();
      b.setMessage(128, 1, 44, 100);
      MidiEvent nutaK = new MidiEvent(b, 16);
      sciezka.add(nutaK);

      sekwenser.setSequence(sekwencja);
      sekwenser.start();

    }
    catch (Exception ex) { 
      System.out.println("KUTASMARIAN");
    }
  };

  public static void main (String[] args) {
    odtwarzaczMuzyki radio = new odtwarzaczMuzyki();
    radio.graj();
  }
}