je tentais d'obtenir le niveau d'amplitude d'un microphone sur Android comme ceci:Android: échantillonner un microphone sans enregistrer pour obtenir une amplitude/un niveau en direct?
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, je dois commencer à enregistrer. Est-ce exact?
Si oui, ai-je besoin d'enregistrer pendant 500ms, obtenir de l'amplitude, arrêter l'enregistrement et répéter?
Enfin, dois-je enregistrer dans un fichier? Je n'ai pas besoin de sauvegarder ce fichier audio, est-ce que je ne peux pas obtenir l'amplitude actuelle ou l'amplitude la plus élevée depuis le dernier appel de l'entrée actuelle du micro en direct sans enregistrement?
Toute aide est appréciée, merci.
apparemment on peut utiliser audiorecord à la place, pas besoin d'enregistrer un fichier – Tom
Vous pouvez rediriger sortie audio/média vers/dev/null et empêche tout enregistrement réel de se produire de cette façon. Assurez-vous également d'utiliser recorder.prepare(), cela ne fonctionnera pas autrement. – kpax