앱 만들기/안드로이드 study

BGM 사운드 루프 ( 자연스럽게 반복 시키기)

나도처음이야 2020. 5. 28.
반응형

게임 혹은 자신이 원해서 BGM 사운드 등을 끊임없이

자연스럽게 반복시킬 필요가 있다. MP3 플레이어의 자동 재생 처럼 말이다.

그냥 loop() 메서드 등을 사용하면, 뚝! 하고 끊기는 음이 들린다. 즉, 해당 노이즈 가 발생해서 부드럽지 못하다.

그렇기에 하기 코드를 이용하면, 다음 곡을 미리 버퍼링 해두기에 부드럽게 연결이 가능하다.

물론 안드로이드 기기 성능에 따라 조금의 차이는 있을 수 있다.

class LoopMediaPlayer { 

           public static final String TAG = LoopMediaPlayer.class.getSimpleName(); 

           private Context mContext = null;

           private int mResId = 0;

           private int mCounter = 1;

 

           private MediaPlayer mCurrentPlayer = null;

           private MediaPlayer mNextPlayer = null;

 

           public static LoopMediaPlayer create(Context context, int resId) {

                     return new LoopMediaPlayer(context, resId);

           }

          

           public LoopMediaPlayer(Context context, int resId) {

                     mContext = context;

                     mResId = resId;

 

                     mCurrentPlayer = MediaPlayer.create(mContext, mResId);

                     createNextMediaPlayer();

           }

 

           public void stop() {

 

                     mCurrentPlayer.stop();

           }

 

           public void start() {

 

                     mCurrentPlayer.start();

           }

 

           public void pause() {

 

                     mCurrentPlayer.pause();

           }

 

           public void release() {

 

                     mCurrentPlayer.release();

           }

 

           public void setVolume(float left, float right){

                    

                     mCurrentPlayer.setVolume(left, right);

           }

          

    public void setLooping(boolean loop){

                    

                     mCurrentPlayer.setLooping(loop);

           }

   

    public boolean isPlaying(){

                    

                     return mCurrentPlayer.isPlaying();

          }

         

          

private void createNextMediaPlayer() {

                     mNextPlayer = MediaPlayer.create(mContext, mResId);
// 다음 곡을 미리 설정해주는 함수 

                     mCurrentPlayer.setNextMediaPlayer(mNextPlayer);
// 현재 곡이 끝나면 리스너를 호출한다.

                     mCurrentPlayer.setOnCompletionListener(onCompletionListener);

                    

           }

 
// 

           private MediaPlayer.OnCompletionListener onCompletionListener = new MediaPlayer.OnCompletionListener() {

                     @Override

                     public void onCompletion(MediaPlayermediaPlayer) {
// 현재 미디어 플레이어 메모리를 반환하고

                                mediaPlayer.release();
// 다음곡을 현재에 세팅한다.

                                mCurrentPlayer = mNextPlayer;

                                 createNextMediaPlayer();

                     }

           };

}

즉, 위의 붉은 코드에서 처럼 

현재 미디어 소스 재생시 다음 곡을 미리 설정하여 버퍼링 하고, 

음원이 끝날때 메모리 해제 및 자연스럽게 다음곡을 재생하면서 연이어 곡을 반복하게 해주는 코드이다.

 

만약에 한곡을 현재, 다음곡으로 설정해준다면

노이즈 없이 아주 부드럽게 계속 반복되는 코드가 되는 것이다.

이렇게 탄생한 앱이 바로 "Rain Sound ☆ 빗소리" 이다.

 

 

Rain Sound ☆ 빗소리 - Google Play 앱

안녕하세요~ 다운로드 받아주셔서 감사합니다. 빗소리가 사람의 마음을 차분하게 해준다고 하죠~ 때로는 흥분되게 하는경우도 많은거 같습니다. It's raining 이란 곡처럼요 ^^ 그래서 빗소리를 앱�

play.google.com

 

오늘도 필자의 티스토리를 찾아주셔서 감사드립니다.

좋은 하루보내세요. 감사합니다.

반응형

댓글