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

onkeydown onkeyup 문제 질문드립니다.

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

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

public class recorder extends AppCompatActivity {
    SoundPool pool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0);
    int recorder_do;
    int recorder_le;
    int recorder_mi;
    int recorder_fa;
    int recorder_sol;
    int recorder_la;
    int recorder_si;
    int recorder_dohigh;
    int recorder_lehigh;
    int recorder_mihigh;
    int recorder_fi;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_recorder);
        recorder_do = pool.load(this, R.raw.recorder_do, 1);
        recorder_le = pool.load(this, R.raw.recorder_le, 1);
        recorder_mi = pool.load(this, R.raw.recorder_mi, 1);
        recorder_fa = pool.load(this, R.raw.recorder_fa, 1);
        recorder_sol = pool.load(this, R.raw.recorder_sol, 1);
        recorder_la = pool.load(this, R.raw.recorder_la, 1);
        recorder_si = pool.load(this, R.raw.recorder_si, 1);
        recorder_dohigh = pool.load(this, R.raw.recorder_dohigh, 1);
        recorder_lehigh = pool.load(this, R.raw.recorder_lehigh, 1);
        recorder_mihigh = pool.load(this, R.raw.recorder_mihigh, 1);
        recorder_fi = pool.load(this, R.raw.recorder_fi, 1);
    }

    public void button(View view) {
        Intent intent = new Intent(this, MainActivity.class);
        startActivity(intent);
        this.finish();
    }

    public boolean recorderdo, recorderre, recordermi, recorderfa, recordersol, recorderla, recordersi, recorderdohigh;

    public boolean onKeyDown(int keyCode, KeyEvent event) {

        if (keyCode == KeyEvent.KEYCODE_W) {
            recorderdo = true;
        } else if (keyCode == KeyEvent.KEYCODE_A) {
            recorderre = true;
        } else if (keyCode == KeyEvent.KEYCODE_S) {
            recordermi = true;
        } else if (keyCode == KeyEvent.KEYCODE_D) {
            recorderfa = true;
        } else if (keyCode == KeyEvent.KEYCODE_F) {
            recordersol = true;
        } else if (keyCode == KeyEvent.KEYCODE_G) {
            recorderla = true;
        } else if (keyCode == KeyEvent.KEYCODE_E) {
            recordersi = true;
        } else if (keyCode == KeyEvent.KEYCODE_R) {
            recorderdohigh = true;
        }
        if (recorderdo && recorderre && recordermi && recorderfa && recordersol && recorderla && recordersi && recorderdohigh) {
            pool.play(recorder_do, 1, 1, 1, 0, 1);
        }
        if (recorderre && recordermi && recorderfa && recordersol && recorderla && recordersi && recorderdohigh) {
            pool.play(recorder_le, 1, 1, 1, 0, 1);
        }
        if (recordermi && recorderfa && recordersol && recorderla && recordersi && recorderdohigh) {
            pool.play(recorder_mi, 1, 1, 1, 0, 1);
        }
        if (recorderfa && recordersol && recorderla && recordersi && recorderdohigh) {
            pool.play(recorder_fa, 1, 1, 1, 0, 1);
        }
        if (recordersol && recorderla && recordersi && recorderdohigh) {
            pool.play(recorder_sol, 1, 1, 1, 0, 1);
        }
        if (recorderla && recordersi && recorderdohigh) {
            pool.play(recorder_la, 1, 1, 1, 0, 1);
        }
        if (recordersi && recorderdohigh) {
            pool.play(recorder_si, 1, 1, 1, 0, 1);
        }
        if (recorderla && recorderdohigh) {
            pool.play(recorder_dohigh, 1, 1, 1, 0, 1);
        }
        if (recorderdo && recorderre && recordermi && recordersol && recorderla && recordersi && recorderdohigh) {
            pool.play(recorder_fi, 1, 1, 1, 0, 1);
        }

            // Two buttons pressed, Do your stuff
        return true;
    }

    public boolean onKeyUp(int keyCode, KeyEvent event) {

        if (keyCode == KeyEvent.KEYCODE_W) {
            recorderdo = false;
        } else if (keyCode == KeyEvent.KEYCODE_A) {
            recorderre = false;
        } else if (keyCode == KeyEvent.KEYCODE_S) {
            recordermi = false;
        } else if (keyCode == KeyEvent.KEYCODE_D) {
            recorderfa = false;
        } else if (keyCode == KeyEvent.KEYCODE_F) {
            recordersol = false;
        } else if (keyCode == KeyEvent.KEYCODE_G) {
            recorderla = false;
        } else if (keyCode == KeyEvent.KEYCODE_E) {
            recordersi = false;
        } else if (keyCode == KeyEvent.KEYCODE_R) {
            recorderdohigh = false;
        }
        return true;
    }
}

 

안녕하세요. 전문가님들의 도움 덕에 하나하나 작은 발걸음을 내딛고 있습니다.

이제 거의 마지막 단계입니다. 이렇게 하니 리코더 음이 동시 입력을 통해 소리가 나긴 합니다.

근데 명령어가 중복되서 여러음이 동시에 납니다. 

한음씩만 나게 하는 방법은 없을까요?

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

1개의 답변

0 추천
pool.play하는 if문들을 if , else if 로 바꿔보세요

 

또는 play한뒤에 바로 return true 하는것도 방법이겠네요
Charlesz (4,420 포인트) 님이 2017년 6월 2일 답변
...