starałem się uzyskać poziom amplitudy mikrofonem na Androida tak:Android: przykładowy mikrofon bez nagrywania, aby uzyskać amplitudę/poziom na żywo?
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());
}
}
Niestety, ta funkcja zwraca 0 cały czas.
Wygląda na to, że aby to zadziałało, muszę zacząć nagrywać. Czy to jest poprawne?
Jeśli tak, czy muszę nagrywać przez 500 ms, uzyskać amplitudę, zatrzymać nagrywanie i powtórzyć?
Wreszcie, czy muszę nagrywać do pliku? Nie muszę zapisywać tego pliku audio, czy nie mogę uzyskać bieżącej amplitudy lub najwyższej amplitudy od ostatniego wywołania bieżącego wejścia mikrofonu na żywo bez nagrywania?
Każda pomoc jest doceniana, dzięki.
pozornie można użyć zamiast AudioRecord, nie ma potrzeby, aby nagrać plik – Tom
można przekierować wyjście audio/media do/dev/null i uniemożliwić w ten sposób faktyczne nagrywanie. Upewnij się również, że używasz recorder.prepare(), to nie zadziała inaczej. – kpax