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

mediaplayer 재생 오류 문의드립니다.

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);
    }
    public boolean onKeyDown(int keycode, KeyEvent event) {
        mp1 = MediaPlayer.create(this, R.raw.pianodo);
        mp2 = MediaPlayer.create(this, R.raw.piano_le);
        mp3 = MediaPlayer.create(this, R.raw.piano_mi);
        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);
        }
    }
}

이렇게 코드를 적어서

핸드폰에 키보드를 연결하여 키를 누르면 피아노 건반 소리가 나오는 어플을 만드는게 목적입니다.

실행하니 각 음이 재생은 되는데 열 번 정도 누르고 나면 소리가 안납니다.

또한 영문키로 바꾸어줘야 소리가 납니다.

 

제가 원하는 것은 

 여러 키를 누르면 동시에 소리 재생

 영문키 누를 필요 없이 바로 키보드를 눌면 소리 재생

 키보드를 무제한 눌러도 계속 소리 재생

이 되면  좋겠습니다...고수님들의 조언 부탁드립니다..

의무개발자 (230 포인트) 님이 2017년 4월 5일 질문
저 방식으로 하시려면 키이벤트를 한글로받는 법을 찾으셔야할것같네요
소리가 안나는이유는 이벤트가 오지않았거나 미디어플레이어특성상 죽은것같은데
에러가발생했다면 스택을 보여주실래여?

1개의 답변

0 추천
onKeyDown 시 MediaPlayer객채를 생성해서 재생하고 release하지 않다보니, 여러번 누르면, 더이상 MediaPlayer 객체를 생성 못해서 소리가 안나는 겁니다. MediaPlayer create 하는 위치를 onCreate 등으로 옮기고 onDestory가 불릴때  release 하게 해주세요.

 

그리고 한글 입력시에는 KeyEvent.KEYCODE_D 가 아닌 다른 코드가 입력 될 겁니다.

입력되는 코드를 찍어서 매핑 시켜주세요
익명사용자 님이 2017년 4월 5일 답변
정말 감사합니다ㅜㅜ 이제 무한재생이 되네요!
그런데 혹시 소리가 끝나기전에 다시 재생이 되게 하는 방법은 무엇인지 아시나요..?
지금은 만약 d버튼을 눌러 '도'음이 재생되면 '도'음이 재생이 끝날 때까지
다른 버튼을 눌러도 다른 버튼 음이 재생이 안됩니다...부탁드립니다...
...