Soundpool을 사용하는것은 안드로이펍에 너무 잘 나와있어서 더 설명하는건 의미 없는 것 같습니다.
그 외에 Soundpool에 대해 몇가지 더 설명을 하자면
1. Soundpool은 소리가 자동으로 겹친다.
java에서 음악파일을 overlap 시켜서 실행하려다 실패해서 안드로이드에서 어떻게 하려나, 생각했는데 Soundpool은 알아서 실행 시킬 때 마다 overlap 돼서 나옵니다. 다수의 효과음을 겹쳐서 들려줘야 했는데, 편하게 해결.
2. 하나의 Soundpool에서 여러개의 음악파일을 열어도 overlap 된다.
test해보기 전에는 Soundpool을 여러개 만들어야 하나, 생각했었는데 해보니까 잘 됩니다. 밑에 Source code에서 버튼 하나는 1번파일을, 다른 거 하나는 2번파일을 열어놓고 동일한 Soundpool에서 실행하지만 두개가 독립적으로 실행됩니다.
참고로, 소스코드에 등장하는 파일은 제 SD카드에 있던걸로, 별도의 파일을 준비해서 테스트 해보세요.
public class MainActivity extends Activity { private Button playButton; private Button playButton2; Sound sound; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); playButton = (Button)findViewById(R.id.playButton); playButton2 = (Button)findViewById(R.id.playButton2); sound = new Sound(); sound.setSoundFile("/sdcard/test/BGM1.ogg", "test"); sound.setSoundFile("/sdcard/test/BGM4.ogg", "test2"); playButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub sound.playSound("test"); } }); playButton2.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { sound.playSound("test2"); } }); } } class Sound { private SoundPool soundPool; private HashMapsoundBeep; public Sound() { soundPool = new SoundPool(5, AudioManager.STREAM_MUSIC, 0 ); soundBeep = new HashMap (); } public void setSoundFile(String path, String key) { soundBeep.put(key, soundPool.load(path, 1)); } public void playSound(String key) { soundPool.play(soundBeep.get(key), 1f, 1f, 0, 0, 1f); } }
반응형
'Programming' 카테고리의 다른 글
Android OpenGL ES 1.1에서 사각형 그리기 (0) | 2012.01.05 |
---|---|
Android OpenGL ES 사용에 앞서 알아두면 좋은것 (0) | 2012.01.05 |
[Android]Android MapView 간단한 정리. (0) | 2010.11.04 |
[C/C++]C++ 에서 String을 띄어쓰기 단위로 간단하게 파싱하기. String Stream (0) | 2010.10.09 |
[Qt4] Signal 과 Slot (0) | 2010.09.12 |