Android: échantillon de microphone sans enregistrement pour obtenir l'amplitude / niveau en direct?

J'ai essayé d'obtenir le niveau d'amplitude d'un microphone sur Android comme suit:

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

Malheureusement, cela ne renvoie 0 tout le temps.

Il semble que pour que cela fonctionne, j'ai réellement commencer l'enregistrement. Est-ce exact?

Si oui, dois-je l'enregistrer pour 500ms, obtenir l'amplitude, l'arrêt de l'enregistrement et de répétition?

Enfin, dois-je l'enregistrer dans un fichier? Je n'ai pas besoin d'enregistrer ce fichier audio, je ne peux pas juste obtenir l'amplitude du courant ou de plus grande amplitude depuis le dernier appel de la actuelle en direct d'entrée de microphone sans enregistrement?

Toute aide est appréciée, merci.

source d'informationauteur Tom