애플리케이션에서 종종 버튼음, 알림 등을 위해 효과음을 사용해야 할 때가 있습니다.
이럴 때 SoundPool 을 사용할 수 있습니다.
 
 private SoundPool sound_pool; 
 private int sound_beep;
 
 private void initSound()
 { 
  sound_pool = new SoundPool( 5, AudioManager.STREAM_MUSIC, 0 );
  sound_beep = sound_pool.load( getContext(), R.raw.beep, 1 );
 } 
            
 public void playSound()
 { 
  sound_pool.play( sound_beep, 1f, 1f, 0, 0, 1f );
 }


먼저 SoundPool 개체를 생성합니다.
첫번째 파라미터는 동시에 출력 가능한 스트림의 수입니다.
두번째 파라미터는 AudioManager에 정의된 스트림 타입이며,
세번째 파라미터는 sample rate 컨버터의 품질인데, 현재는 아무런 효과가 없으며 디폴트값을 이용하기 위해 0을 써주면 됩니다.

필요한 리소스를 로드합니다.
위의 예에서는 beep.ogg 를 이용했습니다.
소스에 리소스를 추가할 때는, res 밑에 raw라는 이름의 폴더를 만들고, 사운드 파일을 넣으면 됩니다.
load()의 세번째 파라미터는 우선순위인데, 현재는 아무런 효과가 없으며 나중에 호환성에 문제가 생기지 않도록 1을 써줍니다.

소리를 출력합니다.
play()를 사용하여 소리를 출력합니다.
첫번째 파라미터는 load()의 리턴값인, 리소스에 대한 식별 번호입니다. ( 일반적으로 리소스가 많아질 경우를 대비해서 map에 넣어두는 것이 좋습니다. )
두번째, 세번째 파라미터는 소리 크기입니다. ( AudioManager의 getStreamVolume()으로 읽어온 값을 사용할 수도 있습니다. )
네번째 파라미터는 우선순위인데, 0이 가장 낮은 우선순위입니다.
다섯번째 파라미터는 반복에 대한 정보로서, 0은 반복없음, 1은 1번 반복( 총 두 번 재생 ), -1은 무한 반복입니다.
여섯번째 파라미터는 재생 속도입니다. 2를 쓰면 2배로 빨리 재생됩니다.



크리에이티브 커먼즈 코리아 저작자표시 Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지/3.0에 따라 이용하실 수 있습니다