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
Vous devez vous connecter pour publier un commentaire.
Yep vous appelez l'enregistreur.start() en premier, et vous ne devez pas oublier d'appeler enregistreur.stop() à la fin aussi!
Voir http://code.google.com/p/android-labs/source/browse/trunk/NoiseAlert/src/com/google/android/noisealert/ pour une application par exemple, vous voudrez peut-être prendre un coup d'oeil à SoundMeter.java et NoiseAlert.java
La solution de Toumal fonctionne, cependant je n'étais pas en mesure d'obtenir assez élevée, un taux de rafraîchissement de mes besoins. Je me suis donc retrouvé à l'aide de la SoundMeter.java classe qui Toumal liés, mais modifié pour utiliser le code de cette réponse
Voici le code que j'ai utilisé, qui offre un bien meilleur taux de rafraîchissement:
Utilisation AudioRecord Classe au Lieu de MediaRecorder
Découvrez ce site: http://www.doepiccoding.com/blog/?p=195 , il donne une bonne explication et un code de travail 🙂
Vous pouvez également utiliser mediaRecoder de la classe, à l'affichage des données en temps réel sur l'INTERFACE utilisateur vous devez utiliser le Gestionnaire de:
Cette partie afficher les données sur l'INTERFACE utilisateur:
N'oubliez pas de gestionnaire d'appel dans la méthode onCreate:
500 est le délai en millisecondes pendant lequel l'INTERFACE utilisateur sera mis à jour
comme vous pouvez le voir ici, vous n'avez pas besoin d'enregistrer la sortie dans un fichier si vous définissez une destination de sortie comme ci-dessous, il ne sauvera pas n'importe où: