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