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.