[안드로이드] SoundManager
▣ 안드로이드 게임 프레임워크 만들기 3
SoundManager
사운드 매니저를 하나 만들어 놓으면 필요할 때마다 코드를 반복해서 작성하지 않아도 되고, 다른 프로젝트에서도 쉽게 사용할 수 있습니다. 지난 포스팅에서 해봤듯이 사운드를 재생하는 방법은 두가지 방법이 있는데요.
사운드폴▶ http://kd3302.tistory.com/46 미디어플레이어 ▶ http://kd3302.tistory.com/39 |
게임에 적용하기에는 사운드폴 클래스를 이용해서 개발하는게 용이 합니다. 앞선 포스팅에서 객체생성, 리소스 로딩, 사운드 출력이라는 세단계로 SoundPool을 이용해서 처리했는데요. 여기에서는 위의 세단계를 더욱 쉽게 이용할 수 있도록 SoundManager를 제작하도록 하겠습니다.
■ 먼저 두가지 방법의 차이점을 알아보도록 할게요.
사운드는 게임 전체에서 이용하기 때문에 접근성이 쉬워야 하는데요. SoundPool을 이용하려면 객체를 갖고 있거나 인스턴스에 접근할 수 있어야 합니다. 그러나 객체를 프레임워크에서 갖고 있다면 이외의 클래스에서는 접근하기가 어려워 집니다. 그렇기 때문에 싱글턴 패턴을 적용해서 어디서나 접근할 수 있게 해줘야 합니다.
■ 클래스를 생성합니다.
■ 이렇게 하면 프로젝트 어디서든 SoundManager에 접근할 수 있습니다.
다음으로 기본적인 사운드 처리를 구현하겠습니다.
먼저 멤버변수를 선언하고 초기화를 하겠습니다.
■ 먼저 멤버 변수를 선언 했는데요. 각각의 역할들을 살펴보면...
■ 이제 멤버 변수들을 초기화 하겠습니다.
■ 사운드폴을 생성하고, 리소스의 아이디값을 저장하기 위해서 해시맵을 생성했습니다.
다음으로 시스템에서 오디오매니저의 핸들값을 가져오고, 액티비티의 핸들값을 가져왔습니다.
■ 이제 사운드롤 불러올 addSound()메서드를 만들겠습니다.
■ 애드사운드 메서드는 매개변수로 인덱스 값과, 사운드 리소스의 아이디 값을 받습니다. 이렇게 관리하면 사운드폴이 제공하는 아이디 값이 아닌 매니저의 인덱스 값을 사용해서 사운드 관리를 할 수 있습니다.
■ 다음으로 재생하는 메서드를 작성하겠습니다.
게임은 배경음과 효과음 등 크게 두가지 사운드를 사용하는데요.
배경음은 재생시간이 길고, 소리 하나만 반복해서 재생합니다. 효과음은 재생 시간이 짧고,
끝나지 않아도 다시 재생할 수 있으며 반복하지는 않습니다.
이점을 염두해 두고 다음과 같이 SoundManager클래스에 두가지 종류의 메서드를
작성하겠습니다.
■ 추가한 두가지 메서드의 내용을 보면 오디오 매니저에서 스트림값을 얻어와서 최대 스트림값과 연산해서 사용자의 볼륨값에 맞춰 볼륨을 조절하는 코드를 추가했구요. 두개의 메서드는 매겨변수 부분에서 반복을 지정하는 부분을 제외하고 모두 동일합니다.
■ 이제 SoundManager클래스가 완성이 됐습니다.
이것을 사용하는 방법을 알아보도록 하겠습니다.