안드로이드 개발시 버튼을 눌러 여러 음악중에서 하나의 음악을 재생하고 다시 버튼을 눌러 그 다음 음악을 재생하고 싶습니다.

조회수 2978회

a,b,c음악 중에서 재생버튼을 누르면 a음악이 재생되고 확인버튼을 누르면 b음악이 재생되고 다시 확인버튼을 누르면 c음악이 재생되는 기능을 구현하고 싶은데요... a음악에서 b음악으로 넘어가는 것까지는 해봤느데... c음악으로 넘어가는것을 어떻게 해야할지 모르겠어요ㅠㅠㅠㅠ제발 도와주 세요 ㅠㅠㅠㅠㅠ

 Button btn1,btn2; //재생버튼과   확인버튼
MediaPlayer mp,mp1,mp2;

protected void onCreate(Bundle savedInstanceState) {
btn1 = (Button)findViewById(R.id.button1);
btn1.setOnClickListener(listener);
btn2 = (Button)findViewById(R.id.button2);
btn2.setOnClickListener(listener);
mp = MediaPlayer.create(MainActivity.this, R.raw.music);
mp1 = MediaPlayer.create(MainActivity.this, R.raw.music1);
mp2 = MediaPlayer.create(MainActivity.this, R.raw.music2);
}

Button.OnClickListener listener = new Button.OnClickListener()
 {
public void onClick(View v)
{
 switch(v.getId()){
//재생버튼 누르는 경우
 case R.id.button1:
mp = MediaPlayer.create(MainActivity.this, R.raw.music);
//객체를 통해 음원 재생
 mp.start();
 break;

//확인버튼을 누르는 경우
 case R.id.button2:
//그 전에 재생되던 음악멈춤
 mp.pause();
//그 다음 음원을 가져와 다시 객체 생성
mp = MediaPlayer.create(MainActivity.this, R.raw.music1);
 mp.start();
 break;
        }
  }  };
  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 질문을 정리하보면, 확인 버튼을 누를 때마다 음악 3개를 순환 재생하고 싶다고 이해했는데 맞나요?

    모듈러 연산과 배열을 적절히 응용하시면 원하시는 문제를 해결할 수 있을 것 같네요.

    다음은 질문자의 코드를 기준으로 수정하면 다음과 같이 하면될 것 같네요.

    일단 mp, mp1, mp2 변수는 mp로 하고, 음원 부분을 배열로 바꿉니다.

    private int songs[]; // 음원 목록
    private int playing = -1; // 현재 연주중인 음원 지시자
    
    private ... onCreate(...) {
      // onCreate 함수 내에서
      songs = new int[3];
      songs[0] = R.raw.music;
      songs[1] = R.raw.music1;
      songs[2] = R.raw.music2;
    }
    

    버튼 부분에서 재생버튼의 경우 다음과 같이 합니다.

    playing=0;
    if( mp!=null ) {
        mp.stop(); // 혹은 pause
    }
    mp = MediaPlayer.create(MainActivity.this, songs[ playing ]);
    mp.start();
    

    확인버튼의 경우는 다음과 같이 합니다.

    playing = (playing+1)%songs.length; // 목록의 끝에 도달하면 다시 첫번째를 선택.
    if( mp!=null ) {
        mp.stop(); // 혹은 pause
    }
    mp = MediaPlayer.create(MainActivity.this, songs[ playing ]);
    mp.start();
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)