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);
요렇게요^^
'나의 플랫폼 > 안드로이드' 카테고리의 다른 글
[ Android ] not enough memory for AudioTrack (2) | 2011.07.07 |
---|---|
[ Android ] 어플리케이션 꺠끗하게 종료하는 법. (0) | 2011.07.07 |
[ Android : AndEngine ] 텍스쳐 깨짐 현상. (3) | 2011.07.05 |
[ Android ] 어플리케이션 종료 (0) | 2011.07.05 |
[ Android : java ] 랜덤한 정수 얻기 (0) | 2011.07.04 |