개발

자바 에플리케이션에서 사운드 이용하기

에드몽단테스 2007. 9. 28. 10:12

애프릿에서 사운드를 사용하는 방법은 애플리케이션보다 간단하고 사용하기도 쉬우며 자료도 많이 있는 것 같습니다.
애플리케이션에서 사운드를 찾기 위해 여러사이트를 찾아봤지만 역시 가장 좋은 사이트는 JAVA API이군요.
모르는 영어 재해석해가며 방법을 찾았는데 다시 적으려니 원문해석이 어려워(ㅡㅡ;) 다시 글을 올리지 못함을 양해바랍니다.
원문 및 자세한 내용은 http://java.sun.com/docs/books/tutorial/sound/index.html 를 참고하시기 바랍니다.

import javax.sound.sampled;

public class SoundTest
{
    public void play()
    {
        AudioInputStream au = null;
        AudioFormat format = null;
        File file = new File("C:\\sample.wav");

            try {
                au = AudioSystem.getAudioInputStream(file);
                format = au.getFormat();
            } catch (UnsupportedAudioFileException ex) {
                ex.printStackTrace();
                return;
            } catch (IOException ex) {
                ex.printStackTrace();
                return;
            }

            SourceDataLine line = null;
            DataLine.Info info = new DataLine.Info(SourceDataLine.class, format);

            if(AudioSystem.isLineSupported(info))
            {
                try {
                    line = (SourceDataLine)AudioSystem.getLine(info);
                    line.open(format);
                    line.start();

                    int total = 0, red = 0;
                    byte[] bytes = new byte[4096];
                    while((red = au.read(bytes, 0, bytes.length)) > -1)
                    {
                        line.write(bytes, 0, red);
                    }
                    line.flush();
                    line.drain();
                    line.stop();
                } catch (IOException ex){
                  ex.printStackTrace();
                } catch (LineUnavailableException ex) {
                    ex.printStackTrace();
                }
            }
            else
                System.out.print("Liner Not Supported!");   
            }
   }
}

대략 설명을 하자면 파일로부터 오디오 스트림을 얻어내서 라인에다 쏴주면 소리가 나는 방식입니다.
시스템으로부터 라인을 얻어내는 방법은 두 가지인데 하나는 믹서를 통해 얻어내는 방법과
시스템에서 그냥 가져오는 방법입니다.
위의 방법은 시스템에서 그냥 가져오는 방법입니다.
물론 시스템에서 라인을 제공하지 않으면 소리는 나지 않겠죠.

반응형