자바로 리듬게임 만들기 2 (Thread를 통해 음악 재생)
음악을 실행하기 위해선 외부 라이브러리가 필요하다. jlayer라는 라이브러리를 다운받은 다음 bulid path를 통해 넣어준다.
그 다음 하나의 작은 프로그램(Thread) 를 상속받아 음악을 재생할 수 있게 해준다.
즉 현재 실행되고 있는 게임과 별도로 음악을 재생하기 위한 또다른 작은 프로그램이라고 할 수 있다.
클래스
Music클래스는 배경음, 혹은 효과음을 넣을 수 있는 클래스이다.
해당 클래스는 JLayer파일을 다운받아 빌드작업을 해주어야 한다. (Player사용가능)
file에 음악관련 리소스를 가져와 넣어주고
음악파일 경로를 FileInputStream에 직접 지정해주며
이것을 BufferedInputStream을 거쳐서 Player로 받아 음악을 재생합니다.(buffered 안거쳐도 재생됨)
따라서 위의 멤버들을 선언해준 것이다. 위의 설명을 코드로 나타내면 아래처럼 된다.
생성자
여기서 isLoop란 true라면 곡이 반복되고 false라면 중단하는 것을 의미한다.
메소드
실행되고 있는 음악이 어떤 위치에서 실행되고 있는 지를 반환해주는 함수이다.
0.001초 단위까지 알려주어 노트에 맞추어 음악의 시간을 분석해 떨어지게 만든다.
나중에 사용할 것이다.
close는 음악을 종료시키기 위한 메소드이다.
interrupt()는 현재 음악을 실행시키고 있는 쓰레드를 종료시켜 음악이 멈추는 것을 의미한다.
Run
이 함수는 쓰레드를 사용하면 무조건 사용해야하는 함수로 음악을 실행시키는 함수이다.
do-while에 넣어 isLoop가 true라면 해당 곡을 무한 반복시킨다.
DynamicBeat()생성자
Main에서 DynamicBeat를 실행할때 같이 음악이 실행되어야 함으로
Music의 introMusic에 음악파일의 이름과 true을 넣어준 다음에 실행해주는 start()함수를 넣어 음악을 실행할 수 있게 해준다. 여기서 start()를 사용하는 이유는 음악을 실행시키는 스레드와 게임의 실행을 병행적으로 수행하기 위한 것이다.!