Android: amostra de microfone sem gravação para obter amplitude / nível ao vivo?

Eu estava tentando obter o nível de amplitude de um microfone no Android da seguinte forma:

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());
    }
}

Infelizmente, isso retorna 0 o tempo todo.

Parece que, para que isso funcione, eu tenho que realmente começar a gravar. Isso está correto?

Nesse caso, preciso gravar por 500ms, obter amplitude, parar a gravação e repetir?

Finalmente, tenho que gravar em um arquivo? Não preciso salvar esse arquivo de áudio. Não consigo obter a amplitude atual ou a amplitude mais alta desde a última chamada da entrada de microfone ao vivo atual sem gravar?

Qualquer ajuda é apreciada, obrigado.

questionAnswers(4)

yourAnswerToTheQuestion