본문 바로가기
Java

JLayer를 이용해서 음악 재생하기

by 방구석 몽상가 2018. 10. 12.
"[Java] 음악(mp3 파일) 다루기"

1. 준비

MP3를 다룰 수 있는 여러 라이브러리가 존재하지만, Java에서는 대표적으로 JLayer가 사용된다.


1.1 JLayer 라이브러리 추가

<http://www.javazoom.net/javalayer/javalayer.html>

위 사이트에서 소스코드, jar 파일 등을 다운받은 뒤, Java Build Path에 폴더 내 jar 파일을 추가해주면 된다.

2. 음악 데이터를 담을 클래스 정의

JLayer 라이브러리 내 Player 클래스를 사용하면 손 쉽게 음악을 재생할 수 있다. 그러나 음악 파일을 분석할 수 있도록 해야 하므로 라이브러리의 기존 코드를 참고하여 클래스를 재정의한다.


2.1 음악 파일 내부

음악은 영상처럼 여러 개의 프레임으로 이루어져 있으며, 한 프레임은 여러 개의 sample 값들로 이루어져 있다.

Sample 클래스 정의

한 프레임의 Sample 값들을 저장하기 위한 클래스를 정의한다.

Frame의 VO 클래스로, sample 값들을 생성자로 입력받아 저장한다.

 

Player 클래스 정의

음성 파일을 불러와 해당 음성 파일에 대한 정보를 저장하고 재생할 수 있는 클래스를 정의한다.

생성자로부터 파일의 경로를 받아 해당 파일을 decoding하여 samples 변수에 저장한다.

 

아래 코드는 JLayer의 decoder 함수를 이용하여 decoding한 뒤 Buffer 값을 얻어낸다.

 

3. 음악 데이터 출력하기

위에서 정의한 MyPlayer 클래스 내에 음악을 재생하는 함수를 정의한다.

미리 담아둔 sample 데이터를 AudioDevice 객체를 통해 출력하면 음악을 재생할 수 있다. 이 때 세부적으로 데이터를 처리하기 위해 MyPlayer의 멤버변수 musicbuffers을 초기화하여 사용할 수 있다.

이제 메인함수에서 객체를 생성한 뒤 Play 함수를 호출하면 음악이 재생된다.

 

4. Thread를 사용하여 음악 재생

위의 방법은 음악 재생 중간에 음악을 중단시키거나 다른 일을 할 수 없다. 따라서 Thread 클래스를 정의하여 이를 해결하자.


댓글