8 votes

Comment utiliser l'audio Android avec une faible latence

Problème:

Comme vous l'avez peut-être entendu, Android ne fournit pas d'API audio à faible latence. Ce que je veux dire par audio à faible latence, c'est que vous devriez pouvoir obtenir des signaux audio du microphone et jouer le son sans beaucoup de délai entre les deux (par exemple, 5 à 7 ms)

J'ai essayé l'ancien java (avec AudioRecord et AudioTrack) et le "nouveau" OpenSL ES. Ils sont terribles et rendent l'application inutilisable. Le problème a été bien documenté ici. Au fait, l'API iOS peut produire une latence d'environ 5 à 7 ms.

Recherche de solutions de contournement:

Mais j'essaie quand même de faire de l'audio à faible latence. Quelque chose comme décrit dans cette réponse.

"Cependant, je n'ai pu accomplir cela de manière satisfaisante qu'en écrivant mon propre code qui effectuait le mixage en interne et accédait à l'API de lecture audio de bas niveau uniquement pour jouer la sortie mixée finale. Les méthodes de lecture de sons de haut niveau dans le framework compact .Net sont théoriquement capables de polyphonie, mais en pratique elles fonctionnent horriblement (beaucoup de glitches, de bégaiements et de distorsions)."

Cela a-t-il du sens pour Android ? Une réponse est décourageante.

Alors ma question. N'y a-t-il vraiment aucun moyen d'obtenir une latence audio de 10 ms avec Android ?

Pour être honnête, je ne m'attends pas à une solution dans un avenir proche, mais j'espère simplement qu'un grand esprit aura la réponse à ce problème.

4voto

numan salati Points 4684

Android 4.1+ dispose d'une API audio à faible latence qui devrait vous donner une latence inférieure à 10ms. Cependant, la valeur varie en fonction du matériel (bienvenue dans le monde riche et diversifié d'Android).

De plus, le descripteur de fonction "android.hardware.audio.low_latency" peut être utilisé pour filtrer les appareils ne prenant pas en charge la latence faible.

Consultez http://www.youtube.com/watch?v=Yc8YrVc47TI&feature=player_de%20tailpage#t=1366s

et ceci : http://createdigitalmusic.com/2012/07/android-high-performance-audio-in-4-1-and-what-it-means-plus-libpd-goodness-today/

3voto

Actuellement, il n'y a aucun moyen d'obtenir un audio à faible latence sur les appareils Android sans modifier le système d'exploitation, et même alors, une grande partie de la latence peut provenir de la mise en œuvre matérielle, de sorte que le logiciel ne peut pas y remédier. C'est dommage car le noyau Linux est très capable d'une latence audio <5ms, et de nombreux matériels ARM sont capables d'une latence décente. J'avais une version personnalisée de Linux tournant sur un ancien Palm TX et cela avait en fait une latence assez décente.

3voto

yano Points 863

Comme suite à la fonctionnalité de android.hardware.audio.pro qui a débuté dans Android 6, promet des temps de trajet de moins de 20 ms, ce qui pourrait signifier moins de 10 ms dans un sens.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X