Stavo cercando di ottenere il livello di ampiezza di un microfono su Android in questo modo:Android: microfono di esempio senza registrazione per ottenere l'ampiezza/livello live?
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());
}
}
Purtroppo, questo solo restituisce 0 per tutto il tempo.
Sembra che per questo funzioni devo effettivamente iniziare la registrazione. È corretto?
In tal caso, devo registrare per 500 ms, ottenere l'ampiezza, interrompere la registrazione e ripetere?
Infine, devo registrare su un file? Non è necessario salvare questo file audio, non è possibile ottenere l'ampiezza corrente o l'ampiezza massima dall'ultima chiamata dell'attuale ingresso microfono live senza registrazione?
Qualsiasi aiuto è apprezzato, grazie.
a quanto pare si può usare AudioRecord invece, non c'è bisogno di registrare un file – Tom
È possibile reindirizzare uscita audio/multimediale su/dev/null e impedire che qualsiasi registrazione effettiva accada in questo modo. Assicurati anche di usare recorder.prepare(), altrimenti non funzionerà. – kpax