그림짝맞추기 앱개발

그림짝맞추기 앱만들기 18 - 배경음악 및 효과음 준비하기, 배경음악 재생하기, 효과음 재생하기

두결앱개발 2026. 3. 10. 08:23
반응형
SMALL

안녕하세요~ 두결입니다.

 

지난시간에는 게임시간 표시를 위한 이미지 디자인을 한후 전체 게임시간을 표시해 보았습니다.

 

 

이번시간에는

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기능을 넣기위한 설정창을 만들어 보도록 하겠습니다.

 

그럼, 다음 이시간에~

 

감사합니다. ^^

 

반응형
LIST