'Head First Java' 읽기.

자바에서 javax.sound.midi 라이브러리의 Sequencer, Sequence, Track, ShortMessage, MidiEvent를 이용, 미디 음을 내는 법을 배우다.

미디 메시지는 setMessgae() 함수로 설정할 수 있다.
setMessage(144, 1, 44, 100); //연주시작, 채널, 음 높이, 음 세기
첫 인자는 메시지 유형으로 나머지 3 인자는 메시지 유형에 따라 달라진다.
144: 연주시작, 128: 연주종료, 192: 악기변경

Eclipse를 이용해 코드를 작성하고 실행해 보니 내 컴의 미디관련 시스템이 꼬인건지 MidiUnavailableException 에러가 뜨고 실행이 되지 않는다.
대신 도스 커맨드 라인에서 실행하면 제대로 실행이 된다.
이클립스에서의 라이브러리 설정 등이 꼬인걸까?

14/5/26 월

아래는 G음을 일정시간 울리는 자바 예제 코드.

import javax.sound.midi.*;

public class MidiPlayTest {
      public static void main(String[] args){
            MidiPlayTest midiT = new MidiPlayTest();
            midiT.play();
      }
      
      public void play(){
            try{
                  System.out.println("1번 채널, 44번음 울리기");
                  Sequencer player = MidiSystem.getSequencer();
                  player.open();
                  
                  Sequence seq = new Sequence(Sequence.PPQ, 4);
                  
                  Track track = seq.createTrack();
                  
                  ShortMessage startM = new ShortMessage();
                  startM.setMessage(144, 1, 44, 100);
                  //연주시작, 1번 채널, 44번음표, 음크기 100
                  MidiEvent noteOn = new MidiEvent(startM, 1);
                  track.add(noteOn);
                  
                  ShortMessage endM = new ShortMessage();
                  endM.setMessage(128, 1, 44, 100);
                  //연주종료, 1번 채널, 44번음표, 음크기 100
                  MidiEvent noteOff = new MidiEvent(endM, 16);
                  track.add(noteOff);
                  
                  player.setSequence(seq);
                  player.start();
                  
            }catch(Exception ex){
                  System.out.println("Midi Error!!!");
                  ex.printStackTrace();
            }
      }
}