Comment éviter de contrôle automatique de gain avec AudioRecord?
Comment puis-je faire des enregistrements audio à l'aide de android.media.AudioRecord
sans smartphone-fabricant-dépendante de la fantaisie de traitement du signal comme le contrôle automatique de gain (AGC) et/ou la péréquation, de suppression de bruit, annulation d'écho, ... juste de la pure signal du microphone?
Arrière-plan
MediaRecorder.AudioSource
fournit neuf constantes,
DEFAULT
etMIC
d'abord d'être là,VOICE_UPLINK
,VOICE_DOWNLINK
, etVOICE_CALL
ajoutée de l'API de niveau 4,CAMCORDER
etVOICE_RECOGNITION
ajoutée de l'API de 7,VOICE_COMMUNICATION
ajouté dans l'API 11,REMOTE_SUBMIX
ajoutée de l'API de 19 mais n'est pas disponible pour les applications de tierce partie.
Mais aucun d'eux n'est un propre de l'emploi sur tous les smartphones. Plutôt, je dois trouver moi-même il me semble, le périphérique qui utilise les combinaisons de blocs de traitement de signaux pour lesquels MediaRecorder.AudioSource
constante.
Serait bien d'avoir un dixième constante comme PURE_MIC
ajoutée de l'API de niveau 20.
Mais tant que ce n'est pas disponible, que puis-je faire à la place?
OriginalL'auteur Hartmut Pfitzinger | 2013-01-17
Vous devez vous connecter pour publier un commentaire.
Bref, la réponse est "Rien".
La AudioSources correspondent à différentes logiques périphériques d'entrée audio selon les accessoires que vous avez connecté le téléphone et le courant de cas d'utilisation de, qui à son tour correspond à des périphériques physiques (primaire, micro intégré, secondaire micro, casque filaire, micro, etc), avec différents réglages.
Chaque combinaison de physique de l'appareil et le réglage est ajusté par le fabricant OEM pour répondre à ces deux exigences externes (par exemple, CTS, les exigences des opérateurs, etc) et de l'acoustique interne des exigences établies par le fabricant lui-même. Ce processus peut entraîner l'introduction de filtres divers - comme l'AGC, la suppression du bruit, de la péréquation, etc - dans l'entrée audio de chemin d'accès au matériel de codec ou de multimédia DSP.
Tout un
PURE_MIC
source pourrait être utile pour certaines applications, il n'est pas quelque chose qui est disponible aujourd'hui.Sur la plupart des appareils, vous pouvez contrôler les choses comme le gain du microphone, et peut-être même la chaîne de filtrage, en utilisant
amixer
à écrire pour le matériel du codec ALSA contrôles. Cependant, ce serait évidemment très spécifique à la plateforme approche, et je pense aussi que vous devez être en cours d'exécution comme la racine ou de l'audio de l'utilisateur pour être autorisé à le faire.Je travail avec le côté sud-ouest de l'audio, donc je ne suis pas impliqué dans le processus de réglage. Mais je m'attends à ce que un nettoyage de signal de parole (sans bruit de fond, de détourage, etc) est nécessaire dans le VOICE_RECOGNITION cas pour qu'il soit utilisable pour la synthèse de la parole de traitement de texte. Donc je suppose qu'au moins un suppresseur de bruit et un AGC / compresseur multibande serait utilisé.
ASR généralement bénéficier d'un son pur comme il le fait de sa propre quasi-AGC dans la fonction de vecteur d'extraction et est généralement formé avec le bruit. Le document "de l'Androïde 4,1 de Compatibilité de la Définition de" (Sep 7, 2012), S 5.3 énonce clairement: Avec VOICE_RECOGNITION, la réduction du Bruit et de contrôle de gain Automatique "DOIT être désactivée." Les fabricants espérons changer que pour Android >=4.1, puis PURE_MIC n'est pas nécessaire. Mais j'ai des doutes. Donc, ma question: Est-il une autre voie?
Avez-vous trouver le moyen d'obtenir pure audio à partir du microphone sans aucun traitement?
Plus de 2 ans après ma question et un peu plus de l'API niveaux plus tard, je ne vois pas d'autre moyen que d'essayer&erreur. Mais je serais encore heureux si quelqu'un pouvait ajouter un 2ème réponse avec un contenu différent.
OriginalL'auteur Michael
Certains dispositifs, ajoutez AGC effet à l'entrée de son tube par défaut. Par conséquent, vous avez besoin pour obtenir de référence correspondant à l'AudioEffect objet et de le forcer à désactiver.
Tout d'abord, obtenir AutomaticGainControl objet lié à la AudioRecord session audio, et puis tout simplement désactivé:
OriginalL'auteur AterLux
Remarque: la Plupart des sources audio (y compris par DÉFAUT) appliquer le traitement du signal audio. Pour enregistrer de l'audio brut sélectionnez non TRANSFORMÉS. Certains périphériques ne prennent pas en charge non transformés d'entrée. Appel AudioManager.getProperty("PROPERTY_SUPPORT_AUDIO_SOURCE_UNPROCESSED") tout d'abord pour vérifier qu'il est disponible. Si elle n'est pas, essayez d'utiliser VOICE_RECOGNITION au lieu de cela, qui n'emploie pas d'AGC ou de suppression de bruit. Vous pouvez utiliser non TRANSFORMÉS comme une source audio même lorsque la propriété n'est pas pris en charge, mais il n'ya aucune garantie que le signal non traité ou pas dans ce cas.
Android documentation Lien https://developer.android.com/guide/topics/media/mediarecorder.html#example
OriginalL'auteur Arun Shankar
MIC
devrait être bon, et pour le reste vous avez besoin de savoir si ils sont pris en charge.J'ai fait une classe pour cette:
OriginalL'auteur android developer