2010-10-20 13 views
5

Est-ce que quelqu'un sait comment utiliser l'annulation d'écho acoustique intégrée à l'appareil Android? Il est situé quelque part dans le silicium et est utilisé pour les appels de haut-parleur GSM/CDMA. Nous aimerions vraiment en profiter pour une application VoIP au lieu de rouler la nôtre.Utilisation de l'annulation d'écho acoustique intégrée d'Android

Ben

+0

Une chance? Je regarde la même chose ... –

Répondre

0

Je suis au même endroit, porté avec succès Speex AEC à Android et utilisé dans 2 différents clients VoIP Android. La plupart de l'écho est annulé lorsque le haut-parleur est à plein volume - testé sur une variété d'appareils. Les documents officiels Speex et googling devraient être assez pour le faire fonctionner.

+0

Salut pouvez-vous me guider comment le faire fonctionner.Je me bats pour annuler l'écho lorsque les deux appareils sont en mode haut-parleur. –

+0

Salut, avez-vous utilisé tampon jitter dans votre code natif –

4

J'ai finalement réussi à obtenir l'annulation d'écho pour fonctionner sur mon processeur Arm5 (WM8650) (Android 2.2). Voici les étapes que j'ai suivies.

  1. J'enveloppées Speex avec JNI et appelé routines de traitement d'écho avant d'envoyer des trames PCM à l'encodeur. Aucun écho n'a été annulé, peu importe les réglages Speex que j'ai essayés. Comme Speex est très sensible au délai entre la lecture et les trames d'écho, j'ai implémenté une file d'attente et mis en file d'attente tous les paquets envoyés à AudioTrack. La taille de la file d'attente doit être approximativement égale à la taille du tampon AudioTrack interne. De cette façon, les paquets ont été envoyés à echo_playback à peu près au moment où AudioTrack envoie des paquets à la carte son depuis son tampon interne. Le délai a été supprimé avec cette approche mais l'écho n'était toujours pas annulé

  2. J'ai enveloppé la partie d'annulation d'écho WebRtc avec JNI et appelé ses méthodes avant d'envoyer des paquets au codeur. L'écho était toujours présent mais la bibliothèque essayait évidemment de l'annuler. J'ai appliqué la technique du tampon décrite en P2 et elle a finalement commencé à fonctionner. Le délai doit cependant être ajusté pour chaque périphérique. Notez également que WebRtc dispose d'une version mobile et complète de l'annulation d'écho. La version complète ralentit considérablement le processeur et devrait probablement être exécutée sur ARM7 seulement. La version mobile fonctionne mais avec une qualité inférieure

J'espère que cela aidera quelqu'un.

+0

Speex a été remplacé par Opus http://opus-codec.org/. –

+0

La taille de la file d'attente doit-elle être la même que celle de la mémoire tampon interne de l'AudioTrack PLUS la taille de la mémoire tampon interne de l'AudioRecord? –

0

Depuis API Niveau 11, il existe une nouvelle valeur pour MediaRecorder.AudioSource, c'est VOICE_COMMUNICATION. Android docs say: «La source audio du microphone est syntonisée pour les communications vocales telles que la VoIP, par exemple l'annulation d'écho ou le contrôle de gain automatique si disponible, sinon elle se comporte comme DEFAULT si aucun traitement vocal n'est appliqué. J'ai essayé cela, mais je n'ai pas réussi à le faire fonctionner. Le problème peut être l'appareil que j'avais utilisé, qui est Sony Tablet S. Worth essayer, cependant.

+0

C'est en effet vrai, mais depuis le niveau API 11, cela ne fonctionne pas vraiment sur la plupart des appareils que j'ai utilisés jusqu'à présent. Ça fait juste, eh bien, rien ... – PKlumpp