스마트기기개발관련/안드로이드 개발

안드로이드 Android SoundPool 시작 및 정지

AlrepondTech 2012. 11. 13. 17:11
반응형

 

 

 

 

=================================

=================================

=================================

 

 

 

 

 

 

출처: http://gogorchg.tistory.com/entry/Android-SoundPool-%EC%8B%9C%EC%9E%91-%EB%B0%8F-%EC%A0%95%EC%A7%80

어플리케이션으로 배경을 깔기 위해 음악실행을 알아보는 중에
SoundPool이라는 클래스에 대해 알게 되었습니다.

우선, 저의 가장 큰 목적은! 
어플리케이션이 돌아가는 동안  음악 소리가 계속 나야 한다는 것이다.



그래서 SoundPool 클래스를 static 변수로 만들어서 

 

초기화는 첫번째 Activity에서 해주고 

 

모든 제어는 이 클래스 변수 하나만 가지고 조절하는 쪽으로 했다.



 

public static SoundManager soundManager;

public static int musicStreamId;

@Override

protected void onCreate(Bundle pSavedInstanceState) {

// 배경 음악 셋팅

   if(soundManager == null){

soundManager = new SoundManager();

soundManager.initSounds(getBaseContext());

soundManager.addSound(1, R.raw.sound);

   }

super.onCreate(pSavedInstanceState);

 



@Override

 

 

protected void onResume() { // 배경 음악 실행 후 스트림 ID저장 (종료시 필요) musicStreamId = soundManager.playLoopedSound(1); super.onResume();}

 

 

 


음악 정지 부분 (Test는 static 변수를 저장 시킨 클래스 명입니다. )

Test.soundManager.stopSound(Intro.musicStreamId);



 SoundManager클래스 : 구글링으로 가져왔는데 사이트 주소를 잊어버렸어요..

 

만드신분 죄송...ㅠㅠ

 

 

package com.motiveflux.rcraft;

 

import java.util.HashMap;

 

import android.content.Context;

import android.content.SharedPreferences;

import android.media.AudioManager;

import android.media.SoundPool;

 

 

 

public class SoundManager {

 

private  SoundPool mSoundPool; 

private  HashMap<Integer, Integer> mSoundPoolMap; 

private  AudioManager  mAudioManager;

private  Context mContext;

 

public SoundManager()

{

 

}

 

public void initSounds(Context theContext) { 

 mContext = theContext;

     mSoundPool = new SoundPool(4, AudioManager.STREAM_MUSIC, 0); 

     mSoundPoolMap = new HashMap<Integer, Integer>(); 

     mAudioManager = (AudioManager)mContext.getSystemService(Context.AUDIO_SERVICE);       

 

public void addSound(int Index,int SoundID)

{

mSoundPoolMap.put(Index, mSoundPool.load(mContext, SoundID, 1));

}

 

public int playSound(int index) { 

 

     int streamVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC); 

     return mSoundPool.play(mSoundPoolMap.get(index), streamVolume, streamVolume, 1, 0, 1f); 

}

 

public int playLoopedSound(int index) { 

 

     int streamVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC); 

     return mSoundPool.play(mSoundPoolMap.get(index), streamVolume, streamVolume, 1, -1, 1f); 

}

 

public void stopSound(int streamId) { 

    mSoundPool.stop(streamId);

}

}

 


playSound와 playLoopedSound함수의 리턴 값은 streamId 입니다. 종료 할 떄 필요하죠^^


 우선 기본 샘플은 첨부 시켰습니다.
이 샘플 만드신분 다시 한번 죄송한 말씀을 드리면서..

오늘도 모두들 즐코딩! 

// 배경 음악 셋팅

아!!! 중요한 부분이 있습니다.!!!!

항상 초기화를 할 때 사용하실 모든 음악을 Index로 설정을 해놓으세요!!!

 

  if(soundManager == null){

soundManager = new SoundManager();

soundManager.initSounds(getBaseContext());

soundManager.addSound(Const.SOUND_INTRO_INDEX, R.raw.bgm_intro);

soundManager.addSound(Const.SOUND_BTN_INDEX, R.raw.btn);
        soundManager.addSound(Const.SOUND_EXIT_INDEX, R.raw.exit); 
        .....

  }

모든 소리를 다 추가해주시고, 저 인덱스를 가지고 실행만 시키시면 됩니다.
soundManager.playSound(Const.SOUND_BTN_INDEX);
요렇게요^^ 

  

 

 

 

=================================

=================================

=================================

 

 

반응형