Я учусь программировать, и правда в том, что я понятия не имею. Я программирую приложение, которое состоит из аудиодатчика, и когда в доме слышен шум, оно активируется. В настоящее время у меня есть этот код.
Activity DetectNoise
public class DetectNoise {
// This file is used to record voice
static final private double EMA_FILTER = 0.6;
private MediaRecorder mRecorder = null;
private double mEMA = 0.0;
public void start() {
if (mRecorder == null) {
mRecorder = new MediaRecorder();
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
mRecorder.setOutputFile("/dev/null");
try {
mRecorder.prepare();
mRecorder.start();
mEMA = 0.0;
} catch (IllegalStateException e) {
Log.e("Error",e.toString());
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
Log.e("Error",e.toString());
e.printStackTrace();
}
}
}
public double getAmplitude() {
if (mRecorder != null)
//return (mRecorder.getMaxAmplitude()/1100.0);
return 20 * Math.log10(mRecorder.getMaxAmplitude() / 2000);
else
return 0;
}
public double getAmplitudeEMA() {
double amp = getAmplitude();
mEMA = EMA_FILTER * amp + (1.0 - EMA_FILTER) * mEMA;
return mEMA;
}
Activity One
private int mThreshold;
private static final int POLL_INTERVAL = 300;
mSensor = new DetectNoise();
private Handler mHandler = new Handler();
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); }
Проблема в том, что при любом звуке он активируется. Я хочу, чтобы он активировался только тогда, когда звук длится около 5 или 7 секунд.
Кто-нибудь может мне помочь? Большое спасибо за все