Android: ¿micrófono de muestra sin grabación para obtener amplitud / nivel en vivo?
Estaba tratando de obtener el nivel de amplitud de un micrófono en Android de esta manera:
MediaRecorder recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
Timer timer = new Timer();
timer.scheduleAtFixedRate(new RecorderTask(recorder), 0, 1000);
private class RecorderTask extends TimerTask {
private MediaRecorder recorder;
public RecorderTask(MediaRecorder recorder) {
this.recorder = recorder;
}
public void run() {
Log.v("MicInfoService", "amplitude: " + recorder.getMaxAmplitude());
}
}
Desafortunadamente, esto solo devuelve 0 todo el tiempo.
Parece que para que esto funcione tengo que empezar a grabar. ¿Es eso correcto?
Si es así, ¿necesito grabar durante 500 ms, obtener amplitud, detener la grabación y repetir?
Finalmente, ¿tengo que grabar en un archivo? No necesito guardar este archivo de audio, ¿no puedo obtener la amplitud actual o la amplitud más alta desde la última llamada de la entrada de micrófono en vivo actual sin grabar?
Cualquier ayuda es apreciada, gracias.