안녕하세요~ 두결입니다.
지난시간에는 게임시간 표시를 위한 이미지 디자인을 한후 전체 게임시간을 표시해 보았습니다.
이번시간에는
6단계로 넘어가기전에 배경음악 및 효과음을 넣어보도록 하겠습니다.
▣ 배경음악 및 효과음 준비하기
먼저, 배경음악과 효과음이 있어야겠죠?
효과음도 그렇지만 특히 배경음악같은 경우는 저작권 문제가 있기때문에 본인 직접 제작하지 않는 이상
다운받아 사용할때 좀 주의가 필요합니다.
앱의 배경음악으로 사용할때는 더욱 문제가 되죠...
앱을 만들면 나중에 스토어에 올리게 되고 그러면 상업적인 용도로 사용이 될수 있기때문에 더욱 그렇죠~
그래서, 안전하게 사용할수 있는 배경음악을 사용하도록 하겠습니다.

유튜브 스튜디오의 오디오 보관함에서 제공하는 배경음악 및 효과음은 무료로 다운로드하여 사용할수 있습니다.
단, 유튜브 스튜디오에 가입을 해야합니다. ^^
검색조건에 어린이로 하면 괜찮은 배경음악이 많이 있습니다.
여기에서 적당한 배경음악과 효과음을 찾아서 저장해보겠습니다.

위와같이 배경음악은 bgsound1~3.mp3. 효과음은 oksound, ngsound.wav로 저장하였습니다.
이제 이 배경음악과 효과음을 프로젝트 리소스에 등록해볼까요?

res-> 오른쪽버튼
New->Android Resource Directory 선택!!

Resource type에서 raw를 선택한후 OK!!

그러면, 위와같이 raw 폴더가 생성이 됩니다.
이제 위에서 준비한 3개의 파일을 복사한후 붙여넣기 해주겠습니다.

위와같이 5개의 파일이 잘 등록이 되었네요..^^
▣ 배경음악 재생하기
배경음악을 리소스에 등록까지 하였으니
이제 재생을 해보겠습니다.
배경음악 재생관련해서는
이전에 했던 강좌 참고해주시길 바랍니다.
https://eun9073.tistory.com/34
모바일앱개발 강좌 #16 - 배경음악 리소스에 등록하기, MediaPlayer사용하여 배경음악 재생하기, Medi
안녕하세요~ 두결입니다. 지난시간에는 SoundPool을 사용하여 간단한 효과음을 재생하는 방법과 사운드파일 로드가 완료된 시점에 재생하는 방법에 대해서 알아보았습니다. 이번시간에는 앱에 배
eun9073.tistory.com
MediaPlayer mediaPlayer;
// 배경음악 재생 함수
public void PlayBackgroundSound()
{
mediaPlayer = MediaPlayer.create(this, R.raw.bgsound1);
mediaPlayer.setLooping(true);
mediaPlayer.start();
}
MediaPlayer객체 변수를 하나 선언하고
PlayBackgroundSound()라는 함수를 만들어서 여기에서 "bgsound1"이란 리소스 음악파일을 재생시켜보았습니다.
@Override
protected void onDestroy()
{
super.onDestroy();
if(mediaPlayer !=null)
{
mediaPlayer.stop();
mediaPlayer.release();
mediaPlayer = null;
}
}
그리고, 앱이 종료될때 MediaPlayer객체를 해제해주었습니다.
배경음이 잘 나오는지 실행해보겠습니다.
https://youtube.com/shorts/AXRmyXUKZRM?si=aeD1yuEPjqsqZQ6k
네 음악이 잘 나오네요..^^
▣ 효과음 재생하기
다음으로 효과음을 재생해보도록 하겠습니다.
mp3파일을 재생할때는 MediaPlayer로 했었는데요..
간단한 wave파일은 SoundPool을 이용하면 됩니다.
SoundPool관련 내용은 아래 강좌 참고해주세요~
https://eun9073.tistory.com/33
모바일앱개발 강좌 #15 - SoundPool을 사용하여 간단한 효과음 재생하기, 사운드파일 로드가 완료된
안녕하세요~ 두결입니다. 지난시간에는 체크박스를 화면에 표시하고 체크박스의 선택된 값을 가져오는 방법과 Radio버튼 선택시, CheckBox선택 완료 시 프로그래스바의 진행율을 설정하는 방법에
eun9073.tistory.com
SoundPool soundPool;
int nSoundIDOK;
int nSoundIDNG;
soundPool = new SoundPool.Builder().build();
nSoundIDOK = soundPool.load(getApplicationContext(), R.raw.oksound,1);
nSoundIDNG = soundPool.load(getApplicationContext(), R.raw.ngsound,1);
PlayBackgroundSound(); // 배경음악 재생하기..
위와같이 SoundPool객체를 생성하고 OK, NG Sound를 load()하였습니다.
// 같은그림인지 체크해주는 함수
private void CheckSameImage(ImageView imgvFirst, int nFirstID, int nFirstPos,
ImageView imgvSecond, int nSecondID, int nSecondPos)
{
if(nFirstID == nSecondID)
{
bPairOK[nFirstPos]= true;
bPairOK[nSecondPos]= true;
// 모든 그림을 찾았는지 체크
bNotFindAllPair = false;
for(int i=0;i<nCurImageCount;i++)
{
if(!bPairOK[i])
{
bNotFindAllPair = true;
}
}
if(!bNotFindAllPair)
{
ShowPopupNextStage(); // 다음단계 설정 팝업창 띄우기
bGameStart =false;
}
soundPool.play(nSoundIDOK,1f,1f,1,0,1f);
}
else
{
FlipCardAnimation(imgvFirst);
FlipCardAnimation(imgvSecond);
soundPool.play(nSoundIDNG,1f,1f,1,0,1f);
}
}
같은그림인지를 체크해주는 CheckSameImage()함수에서
같은그림일때는 OK Sound를 틀린그림일때는 NG Sound를 재생하였습니다.
@Override
protected void onDestroy()
{
super.onDestroy();
if(mediaPlayer !=null)
{
mediaPlayer.stop();
mediaPlayer.release();
mediaPlayer = null;
}
if(soundPool !=null)
{
soundPool.release();
soundPool = null;
}
}
마지막으로 앱이 종료될때 soundPool객체도 해제해주었습니다.
여기까지 잘 되는지 실행해보겠습니다.
https://youtube.com/shorts/_UixvbdrK6s?si=s29qNH4nOFJfxR_z
배경음악도 잘나오고 카드짝을 맞추면 "띵동", 틀리면 "띠" 소리가 잘 나오네요..^^
네 이번시간은 여기까지만 하도록 하구요~
다음시간에는 소리를 싫어하시는 분들도 계실테니 Sound On/Off기능을 넣기위한 설정창을 만들어 보도록 하겠습니다.
그럼, 다음 이시간에~
감사합니다. ^^
