일정 값 초과시 사운드 재생

조회수 583회

dB (데시벨) 값을 측저하여 일정 값이 넘은면 사운드를 출력 하고싶은데

raw폴더에 mp3를 넣고 soundpool을 작동시키면 된다고 하는데 어떤식으로 작성하여야할지 모르겠어서 질문드리겠습니다.

package com.example.velmurugan.detectnoiseandroidexample;

import android.Manifest; import android.content.Context; import android.content.pm.PackageManager; import android.os.Handler; import android.os.PowerManager; import android.support.v4.app.ActivityCompat; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.widget.ProgressBar; import android.widget.TextView; import android.widget.Toast;

public class MainActivity extends AppCompatActivity { /* constants */ private static final int POLL_INTERVAL = 300;

/** running state **/
private boolean mRunning = false;

/** config state **/
private int mThreshold;

int RECORD_AUDIO = 0;
private PowerManager.WakeLock mWakeLock;

private Handler mHandler = new Handler();

/* References to view elements */
private TextView mStatusView,tv_noice;

/* sound data source */
private DetectNoise mSensor;
ProgressBar bar;
/****************** Define runnable thread again and again detect noise *********/

private Runnable mSleepTask = new Runnable() {
    public void run() {
        //Log.i("Noise", "runnable mSleepTask");
        start();
    }
};

// Create runnable thread to Monitor Voice
private Runnable mPollTask = new Runnable() {
    public void run() {
        double amp = mSensor.getAmplitude();
        //Log.i("Noise", "runnable mPollTask");
        updateDisplay("Monitoring Voice...", amp);

        if ((amp > mThreshold)) {
            callForHelp(amp);
            //Log.i("Noise", "==== onCreate ===");
        }
        // Runnable(mPollTask) will again execute after POLL_INTERVAL
        mHandler.postDelayed(mPollTask, POLL_INTERVAL);
    }
};
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // Defined SoundLevelView in main.xml file
    setContentView(R.layout.activity_main);
    mStatusView = (TextView) findViewById(R.id.status);
    tv_noice=(TextView)findViewById(R.id.tv_noice);
    bar=(ProgressBar)findViewById(R.id.progressBar1);
    // Used to record voice
    mSensor = new DetectNoise();
    PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
    mWakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "NoiseAlert");
}
@Override
public void onResume() {
    super.onResume();
    //Log.i("Noise", "==== onResume ===");

    initializeApplicationConstants();
    if (!mRunning) {
        mRunning = true;
        start();
    }
}
@Override
public void onStop() {
    super.onStop();
    // Log.i("Noise", "==== onStop ===");
    //Stop noise monitoring
    stop();
}
private void start() {

    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED) {

        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.RECORD_AUDIO},
                RECORD_AUDIO);
    }

        //Log.i("Noise", "==== start ===");
    mSensor.start();
    if (!mWakeLock.isHeld()) {
        mWakeLock.acquire();
    }
    //Noise monitoring start
    // Runnable(mPollTask) will execute after POLL_INTERVAL
    mHandler.postDelayed(mPollTask, POLL_INTERVAL);
}
private void stop() {
    Log.d("Noise", "==== Stop Noise Monitoring===");
    if (mWakeLock.isHeld()) {
        mWakeLock.release();
    }
    mHandler.removeCallbacks(mSleepTask);
    mHandler.removeCallbacks(mPollTask);
    mSensor.stop();
    bar.setProgress(0);
    updateDisplay("stopped...", 0.0);
    mRunning = false;

}


private void initializeApplicationConstants() {
    // Set Noise Threshold
    mThreshold = 8;

}

private void updateDisplay(String status, double signalEMA) {
    mStatusView.setText(status);
    //
    bar.setProgress((int)signalEMA);
    Log.d("SONUND", String.valueOf(signalEMA));
    tv_noice.setText(signalEMA+"dB");
}


private void callForHelp(double signalEMA) {

    //stop();

    // Show alert when noise thersold crossed
    Toast.makeText(getApplicationContext(), "Noise Thersold Crossed, do here your stuff.",
            Toast.LENGTH_LONG).show();
    Log.d("SONUND", String.valueOf(signalEMA));
    tv_noice.setText(signalEMA+"dB");
    if (signalEMA > 89)
        stop();

SoundPool sound_pool; sound_pool = new SoundPool( 10, AudioManager.STREAM_MUSIC, 0 ); int SoundID = sound_pool.load( this, R.raw.beep11_1, 1 ); // R.raw.sound에서 "sound"는 사운드 파일명 sound_pool.play( SoundID, 1, 1, 0, 1, 1 );

}

};

이것이 지금 메인엑티비티입니다 여기서 어떤식으로 해야할지 도움 부탁드리겠습니다.

  • (•́ ✖ •̀)
    알 수 없는 사용자

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

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

(ಠ_ಠ)
(ಠ‿ಠ)