Я хочу использовать MediaRecorder для записи звуков, а затем хочу рассчитать «амплитуду», для перемещения баров вверх и вниз с изменением звука. Я еще не нашел подходящего решения. какие-либо предложения.?? Отредактировано: мне удалось открыть мою руку, теперь проблема в том, что у меня есть Tried getMaxAmplitude(), чтобы найти амплитуду с помощью Handler после этого, я пытаюсь использовать это значение, чтобы показать движение бара вверх, но это не работает, тогда я напечатал значение getMaxAmplitude(), конечно, значение оказывается равным нулю. Что может быть неправильно здесь? Вот кусок кода общественности недействительным запуска() { попробовать {Я хочу использовать mediaplayer для записи звуков, а затем хочу рассчитать «амплитуду» для перемещения баров вверх и вниз с изменением звука
mRecorder.start();
while (this.mIsRunning) {
// creating these variables here so that
// the mode change can be handled
double amp = getAmplitude();
Message msg = mHandle.obtainMessage(MY_MSG, amp);
mHandle.sendMessage(msg);
}
} catch (Exception e) {
e.printStackTrace();
Message msg = mHandle.obtainMessage(ERROR_MSG,
e.getLocalizedMessage() + "");
mHandle.sendMessage(msg);
}
if (mRecorder != null) {
mRecorder.stop();
mRecorder.release();
mRecorder = null;
}
}
public double getAmplitude() {
if (mRecorder != null) {
powerDb = 20 * Math.log10(mRecorder.getMaxAmplitude()/2700.0);
return (powerDb);
}
else {
return 1;
}
}
public Handler mhandle = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case MY_MSG:
// mSplModeTV.setText(" " + msg.obj);
if (audioEngineFlag == 1) {
String s1 = msg.obj.toString();
float f = Float.valueOf(s1.trim()).floatValue();
Log.v(TAG, "amplitude=" + f); }
Великий никто не может помочь .. !!! по крайней мере, дайте мне знать, что делать .. если я хочу называть getMaxAmplitue() через каждые 0,5 сек. внутри обработчика, как я могу получить чтение непрерывно .. ?? – arun