마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

SoundManager 사용하기 질문

0 추천
public class SoundManager {
 private static SoundManager s_instance;
 
 private SoundPool m_SoundPool;
 private HashMap m_SoundPoolMap;
 private AudioManager m_AudioManager;
 private Context m_Activity;
 
 public static SoundManager getInstance() {
  if(s_instance == null) {
   s_instance = new SoundManager();
  }
  return s_instance;
 }
 public void Init(Context _context) {
  m_SoundPool = new SoundPool(4, AudioManager.STREAM_MUSIC, 0);
  m_SoundPoolMap = new HashMap();
  m_AudioManager = (AudioManager)_context.getSystemService(Context.AUDIO_SERVICE);
  m_Activity = _context;
 }
 public void addSound(int _index, int _soundID) {
  int id = m_SoundPool.load(m_Activity, _soundID, 1);
  m_SoundPoolMap.put(_index, id);
 }
 
 public void play(int _index){
  float streamVolume = m_AudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
  streamVolume = streamVolume / m_AudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
  m_SoundPool.play((Integer) m_SoundPoolMap.get(_index), streamVolume, streamVolume, 1, 0, 1f);
 }
 public void playLooped(int _index){
  float streamVolume = m_AudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
  streamVolume = streamVolume / m_AudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
  m_SoundPool.play((Integer) m_SoundPoolMap.get(_index), streamVolume, streamVolume, 1, -1, 1f);
 }
}

 

이렇게 책을보고 Manager를 구현하였습니다.

사용할때 어떻게 사용해야 하는지 잘 몰라서 질문합니다.

앱에서 어떤 클래스부분에 어떻게 선언하여 사용할 수 있는지 알고 싶습니다.

ㅠㅜ
라대 (200 포인트) 님이 2013년 11월 25일 질문

2개의 답변

0 추천
액티비티를 상속받은 클래스에서

onCreate부분에서

SoundManager.getInstance().init(this);

로 초기화 하시고 사용하시면 될것 같습니다..

this부분은 context이니 액티비티의 context를 받은 클래스면 어디서든 사용할수 있겠죠?
모나미153 (17,540 포인트) 님이 2013년 11월 25일 답변
한번 해보겠습니다. ^^ 감사합니다.
0 추천

저도 워낙 초보이고 어떤 용도로 어떻게 사용하시려는건지는 모르겠지만..

최근에 고민하고 사용해 본 적이 있어 도움이 될까 남겨봅니다

SoundPool을 사용하여 소리를 재생하려 할 때는

 

--- 세팅 ---

1. SoundPool 에 사용할 리소스들을 load

2. load 할때 int 타입으로 SoundPool에 등록된 key값이 리턴됩니다.

이것을 임의로 사용하실 tag와 함께 hashmap에 put

--- 재생 ---

3. hashmap에서 재생할 소리의 key값을 tag를 활용해 get 해옴

4. key값을 이용해 play

 

아주 간략히만 보여드리면


SoundPool sPool = new SoundPool(3, AudioManager.STREAM_MUSIC, 0);
Map <String, Integer> sMap = new HashMap<String, Integer>();

// 위처럼 가정합니다

int sKey = sPool.load(PlayClass.this, R.raw.alarm, 1);
sMap.put("alarm", sKey);

// 위와같이 load후 map에 put해두는게 좋습니다 매번 재생할때마다 새로 load 하기는 좀..
// 사용할 다른소리들도 한번에 load 해두는게 좋을 것 같네요

// 재생시

sKey = sMap.get("alarm");
// 아까 put 해두었던 alarm 에 해당되는 key값이 나오죠

sPool.play(sKey, 1, 1, 0, 0, 1);

도움 되셨을지 모르겠네요 ㅎ 최근에 알아본거라 저도 고민한 기억이 있어서..

Solve 1 (200 포인트) 님이 2013년 11월 25일 답변
...