월요일에 이어 이번엔 자바에서 미디 파일(mid)을 불러들여 연주하는 프로그램 만들기(Sequencer, Sequence 이용).

java midiPlayTest test.mid 형태로 실행하면 test.mid 미디파일을 연주한다.

미디곡 연주가 끝난 뒤 시퀀서를 멈추고 닫게 하려고 하다가 연주가 끝난걸 어떻게 알 수 있나를 몰라 한참 헤메다. 결국 while 무한루프와 isRunning() 메서드를 이용해 성공.

14/5/30 금


미디 파일(mid) 불러와 연주하는 자바 코드 (midiPlayTest.java)

import javax.sound.midi.*;
import java.io.File;

public class midiPlayTest {
      public static void main(String[] args){
            midiPlayTest midiP = new midiPlayTest();
            if(args.length < 1){
                  System.out.println("불러올 미디 파일명을 입력하세요.");
                  System.out.println("ex)java midiPlayTest test.mid");
            }else{
                  String fileName = args[0];
                  midiP.playFile(fileName);
            }
      }
      
      public void playFile(String fName){
            try{
                  System.out.println("playFile Start");
                  //시퀀서(미디파일 재생장치) 객체 생성
                  Sequencer sequencer = MidiSystem.getSequencer();
                  //시퀀서 열기
                  sequencer.open();

                  //파일로부터 시퀀스(음원) 취득
                  File myMidiFile = new File(fName);
                  Sequence mySeq = MidiSystem.getSequence(myMidiFile);
                  //시퀀서에 시퀀스 설정
                  sequencer.setSequence(mySeq);
                  //시퀀서 기동(재생시작)
                  sequencer.start();
                  
                  System.out.println("연주 중");
                  while(true){
                        if(!sequencer.isRunning()){
                              //시퀀서 정지(재생종료)
                              sequencer.stop();
                              //시퀀서 닫기
                              sequencer.close();
                              break;
                        }
                  }
                  System.out.println("연주 종료.");
            }catch(Exception ex){
                  System.out.println("Midi Error!!!");
                  ex.printStackTrace();
            }
      }
}