Problem:
您可能已经听说过,Android不提供低延迟音频API . 低延迟音频的意思是你应该能够从麦克风获取音频信号并播放声音,中间没有太大的时间间隔(例如,5-7毫秒)
我尝试过旧的java(带有AudioRecord和AudioTrack)和"new" OpenSL ES . 它们非常糟糕,使应用程序无法使用 . The issue was well documented here. BTW,iOS API可以产生大约5-7毫秒的延迟 .
Looking for Workarounds:
但无论如何,我正试图做低延迟音频 . Something like this answer describes.
“但是,我只能通过编写我自己的内部混音代码并且只能播放最终混合输出来访问低级音频播放API才能令人满意地实现这一目标 . 更高级别的播放声音的方式 . Net Compact Framework在理论上具有复音功能,但在实践中它们的工作非常糟糕(很多毛刺,口吃和失真) . “
这对Android有意义吗? An answer is discouraging.
所以我的问题 . Android真的没有办法实现10毫秒的音频延迟吗?
说实话,我不希望很快就会有解决方案,但只是希望一个伟大的思想能够解决这个问题 .
3 回答
android 4.1具有低延迟音频api,应该会给你低于10毫秒的延迟 . 但是 Value 因硬件而异(欢迎来到丰富多彩的android世界) .
还有“android.hardware.audio.low_latency”的特征描述符可用于过滤掉缺乏低延迟支持的设备 .
看看http://www.youtube.com/watch?v=Yc8YrVc47TI&feature=player_de%20tailpage#t=1366s
而这:http://createdigitalmusic.com/2012/07/android-high-performance-audio-in-4-1-and-what-it-means-plus-libpd-goodness-today/
目前没有办法在不修改操作系统的情况下在Android设备上获得低延迟音频,即使这样,很多延迟也可能来自硬件实现,因此软件无法解决这个问题 . 这很令人遗憾,因为Linux内核能够承受<5ms的音频延迟,并且许多ARM硬件具有良好的延迟 . 我有一个自定义Linux build running on an old Palm TX,实际上有相当不错的延迟 .
作为跟进,从Android 6开始
android.hardware.audio.pro
的功能承诺<20ms往返时间,我们可以希望单向<10ms .