마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

media player 이용 시 반복 재생 문의드립니다.

0 추천
package com.example.user.myapplication;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;

public class MainActivity extends AppCompatActivity {
    MediaPlayer mp1;
    MediaPlayer mp2;
    MediaPlayer mp3;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mp1 = MediaPlayer.create(this, R.raw.pianodo);
        mp2 = MediaPlayer.create(this, R.raw.piano_le);
        mp3 = MediaPlayer.create(this, R.raw.piano_mi);
    }
    public boolean onKeyDown(int keycode, KeyEvent event) {
        switch (keycode) {
            case KeyEvent.KEYCODE_D:
                mp1.start();
                return true;
            case KeyEvent.KEYCODE_F:
                mp2.start();
                return true;
            case KeyEvent.KEYCODE_G:
                mp3.start();
                return true;
            default:
                return super.onKeyDown(keycode, event);
        }
    }
}

피아노 앱을 만들려고 연습 중입니다.

이렇게 코드를 짜니 음이 재생이 됩니다. 근데 만약 d버튼을 눌러서 '도'음을 재생하면

'도'음이 끝나기 전까진 다른 버튼을 눌러도 다른 음이 재생이 안됩니다.

저는 누를 때마다 다시 음이 재생되게 하고 싶습니다. 어떤 명령어를 써야할까요?

도움 부탁드립니다...

의무개발자 (230 포인트) 님이 2017년 4월 9일 질문

2개의 답변

0 추천
public resetAll() {

 // 재생 되는 소리 중지
 mp1.pause();
 mp2.pause();
 mp3.pause();

 // 이어서 재생되는게 아니라 맨 처음부터 재생되게 위치 조정
 mp1.seekTo(0);
 mp2.seekTo(0);
 mp3.seekTo(0);
}

같은 메소드를 만들어

mp1.start 같은 거 호출 이전에, 호출 해 주시면 될 듯 합니다.
익명사용자 님이 2017년 4월 10일 답변
–2 추천
MediaPlayer 는 한번에 두가지 이상의 소리를 재생하지 못합니다

http://www.androidpub.com/9707
라이덩 (160 포인트) 님이 2017년 4월 11일 답변
잘 못 된 정보입니다.
코드 구성 및 파서 성능을 보면,  SoundPool을 사용하는게 깔끔하긴 한데,
SoundPool, MediaPlayer 모두 C단의 AudioTrack으로 출력되는 것이며,
audio session id로 관리 되기 때문에,  단말이 지원하면,
두개 이상 소리 재생 가능합니다.
감사합니다. 사운드풀로 해결하였습니다.!
...