본문 바로가기
Android

[Android] Sound Play 사운드 재생

by bryan.oh 2019. 11. 24.
반응형

Android Sound


안드로이드 사운드 재생 방법입니다.

1. SoundPool
2. MediaPlayer

차이점이라면

SoundPool알림사운드,게임효과등 짧은 사운드클립에 적합하고
MediaPlayer노래와 같이 더 사운드파일을 재생할 때 적합합니다.

 

1. SoundPool 로 재생하는 방법

우선 res > raw 폴더에 sound file 을 넣습니다. (모두 소문자로! 대쉬(-)는 언더바(_)로 바꾸고)

raw 폴더가 없다면 res 에서 우클릭 -> new -> Directory 클릭 해서 raw 폴더를 만듭니다.

사운드 파일은 아래 첨부합니다.

sound_dingdong.mp3
0.05MB
success.wav
0.03MB

 

그럼 이제 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;

	// sound media initialize
	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 를 사용하시면 됩니다.

 

 

 

2019/11/24 - [Android] - [개발인생]블로거의 앱 - 로또버스

 

글 작성자의 앱 - 로또버스

초스피드 로또 당첨 확인 1초에 15개 이상 당첨확인! 이번 글은 제가 만든 안드로이드 앱에 대한 글입니다. 기존의 대부분 앱은 하나씩 QR을 스캔하고 동행 복권 사이트로 넘깁니다. 이렇게.... 귀찮죠..? QR 맞..

hello-bryan.tistory.com

 

728x90
반응형

댓글