본문 바로가기
Java/Swing 미니프로젝트

[JAVA Project] 미니 프로젝트 리듬게임 만들기 2 - 배경 음악 설정 (JLayer)

by dev수니 2021. 4. 15.
반응형

 

 

인트로 음악은 다음의 사이트에서 다운받았다. 저작권이 없는 mp3 파일을 다운받아야 한다. 구글에 no copyright 를 치고 원하는 mp3파일 다운받아도됨. 필자가 사용한 음악 파일은 아래에 첨부해놨다.

www.bensound.com/royalty-free-music/electronica

 

JavaLayer | Support for JavaLayer at SourceForge.net

Click URL instructions: Right-click on the ad, choose "Copy Link", then paste here → (This may not be possible with some types of ads) More information about our ad policies

sourceforge.net

 

그리고 다운로드 된 mp3파일을 introMusic으로 파일명 설정하고 eclips 에서 Music pakage 생성하여 그 안에 copy 해주었다.

 

 

 

 

그리고 mp3파일을 자바에서 실행하려면 라이브러리를 따로 설치해줘야 하는데 javazoom.net 사이트가 사라져서 여기서 다운로드 받았다. (안들어가질 까봐 zip 파일도 아래에 첨부해놨다.)

sourceforge.net/projects/javalayer/support

 

JavaLayer | Support for JavaLayer at SourceForge.net

Click URL instructions: Right-click on the ad, choose "Copy Link", then paste here → (This may not be possible with some types of ads) More information about our ad policies

sourceforge.net

 

 

다운로드 받으면 다음과 같이 jlayer1.0.1 이라고 뜨는데 이 파일이어야 한다. 

 

 

압축을 풀어주면 다음과 같이 화면이 뜨는데 우리가 필요한 것은 jl1.0.1.jar파일이다.

 

 

해당 파일이 존재하는지 확인 후 eclipse로 가서 작업중인 프로젝트에 대고 마우스 우클릭 build Path -> Configure bulid Path 눌러준다.

 

 

여기서는 Add External JARs 눌러주고 jl1.0.1.jar 파일 선택하고 Apply 눌러 적용해주면 끝이다.

 

 

그리고 다음과 같이 Music 클래스 생성후 작성하였다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
package beat1;
 
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
 
import javazoom.jl.player.Player;
 
public class Music extends Thread {    // 쓰레드 상속
    
    private Player player;    // 다운로드 받은 Jlayer 라이브러리
    private boolean isLoop;    // 음악을 꺼지도록 설정
    private File file;
    private FileInputStream fis;
    private BufferedInputStream bis;
    
    public Music(String name, boolean isLoop) {    // 곡의 제목과 무한반복여부를 생성자로 받는다.
        try {    // 예외처리
            this.isLoop = isLoop;    // 변수 초기화
            file = new File(Main.class.getResource("../music/" + name).toURI());    
            // music 폴더 안에 있는 해당 이름의 파일을 실행시킨다는 의미. toURI 해당파일의 위치를 가져올 수 있도록 설정
            fis = new FileInputStream(file);
            bis = new BufferedInputStream(fis);    // 해당파일을 버퍼로 읽어올 수 있게 설정.
            player = new Player(bis);
            
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }
    
    public int getTime() {    // 현재실행되고 있는 음악이 현재 어떤 위치에서 실해오디고 있는 지 알려줌.
        if(player == null)
            return 0;
        return player.getPosition();
    }
    
    public void close() {    // 사용자가 해당 곡의 재생을 멈추고 싶을때 안정적으로 빠져나갈 수 있게
        isLoop = false;
        player.close();
        this.interrupt();    // interrupt : 해당 쓰레드를 중지상태로 만든다.
    }
    
    @Override
    public void run() {    // 쓰레드를 상속받으면 무조건 오버라이드
        try {
            do {    // 내부에 곡을 실행하는 코드 작성 (위에코드 복사)
                player.play();
                fis = new FileInputStream(file);
                bis = new BufferedInputStream(fis);
                player = new Player(bis);
            } while (isLoop);    // 반복문으로 true 값이면 무한반복하도록
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }
    
}
cs

 

 

DynamicBeat class 에도 생성한 Music 클래스 인스턴스 생성코드 추가

 

 

 

background.jpg
0.32MB
introMusic.mp3
1.67MB
jlayer1.0.1.zip
0.52MB

 

 

반응형

댓글