안드로이드 사운드 재생 방법입니다.
1. SoundPool
2. MediaPlayer
차이점이라면
SoundPool 은 알림사운드,게임효과등 짧은 사운드클립에 적합하고
MediaPlayer 는 노래와 같이 더 큰 사운드파일을 재생할 때 적합합니다.
1. SoundPool 로 재생하는 방법
우선 res > raw 폴더에 sound file 을 넣습니다. (모두 소문자로! 대쉬(-)는 언더바(_)로 바꾸고)
raw 폴더가 없다면 res 에서 우클릭 -> new -> Directory 클릭 해서 raw 폴더를 만듭니다.
그럼 이제 sound play 를 위한 class를 하나 생성합니다.
MySoundPlayer.java
package ai.vdotdo.hellobryan_test;
import android.content.Context;
import android.media.AudioAttributes;
import android.media.SoundPool;
import java.util.HashMap;
public class MySoundPlayer {
public static final int DING_DONG = R.raw.sound_dingdong;
public static final int SUCCESS = R.raw.success;
private static SoundPool soundPool;
private static HashMap<Integer, Integer> soundPoolMap;
public static void initSounds(Context context) {
AudioAttributes attributes = new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_GAME)
.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
.build();
soundPool = new SoundPool.Builder()
.setAudioAttributes(attributes)
.build();
soundPoolMap = new HashMap(2);
soundPoolMap.put(DING_DONG, soundPool.load(context, DING_DONG, 1));
soundPoolMap.put(SUCCESS, soundPool.load(context, SUCCESS, 2));
}
public static void play(int raw_id){
if( soundPoolMap.containsKey(raw_id) ) {
soundPool.play(soundPoolMap.get(raw_id), 1, 1, 1, 0, 1f);
}
}
}
SoundPool 은 Builder 를 이용해서 생성해야 합니다.
참고) new SoundPool(maxStreams, streamType, srcQuality); 로 생성하는 방식은 api21 이후에 deprecated 됐습니다.
사용하려는 Activity 에서는
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MySoundPlayer.initSounds(getApplicationContext());
findViewById(R.id.button).setOnClickListener((v)->{
MySoundPlayer.play(MySoundPlayer.DING_DONG);
});
}
MySoundPlayer.initSounds(getApplicationContext()); 로 초기화 하고
사용할 땐
MySoundPlayer.play(MySoundPlayer.DING_DONG);
또는
MySoundPlayer.play(MySoundPlayer.SUCCESS);
하면 됩니다.
2. MediaPlayer 사용.
MediaPlayer mediaPlayer = MediaPlayer.create(context, R.raw.sound_dingdong);
mediaPlayer.start();
간단하쥬?
MediaPlayer 는 사운드 외에 동영상도 재생합니다.
상황에 맞게 SoundPool 과 MediaPlayer 를 사용하시면 됩니다.
[출처] https://hello-bryan.tistory.com/83