본문 바로가기

나의 플랫폼/안드로이드

[ Android ] SoundPool 시작 및 정지

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
어플리케이션으로 배경을 깔기 위해 음악실행을 알아보는 중에
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);
요렇게요^^