我正在审查各种Android声音API,我想知道我应该使用哪一种.我的目标是获得低延迟音频,或者至少是关于播放延迟的确定性行为.
我们遇到了很多问题,似乎Android声音API是废话,所以我正在探索各种可能性.
我们遇到的问题是sound_out.write(sound_samples);扬声器播放的声音和实际声音之间存在明显的延迟.通常它大约是300毫秒.问题是在所有设备上它都是不同的; 有些人没有这个问题,但大多数人都瘫痪了(但是,CS呼叫的延迟为零).这种荒谬的延迟最大的问题是,在某些设备上,这种延迟似乎是一些随机值(即它并不总是300毫秒).
我正在阅读有关OpenSL ES的内容,我想知道是否有人有过这方面的经验,或者它是相同的东西,但包装在不同的包中?
我更喜欢本机访问,但我不介意Java层间接,只要我能获得确定性行为:延迟必须是常量(对于给定的设备),或者我想要访问当前回放位置而不是猜测误差范围为±300 ms ......
编辑:
1.5年后,我尝试了多个Android手机,看看如何为实时语音通信获得最佳延迟.使用专业工具我测量了波浪路径的延迟.最佳结果超过100毫秒,大多数手机都在180毫秒范围内.有人有想法吗?
问题:
您可能已经听说过,Android不提供低延迟音频API.低延迟音频的意思是你应该能够从麦克风获取音频信号并播放声音而中间没有太大的时间间隔(例如,5-7毫秒)
我尝试过旧的java(带有AudioRecord和AudioTrack)和"新的"OpenSL ES.它们非常糟糕,使应用程序无法使用.这个问题在这里有很好的记录.BTW,iOS API可以产生大约5-7毫秒的延迟.
寻找解决方法:
但无论如何,我正试图做低延迟音频.像这个答案描述的东西.
"但是,我只能通过编写我自己的内部混音代码并且只能播放最终的混合输出来访问低级音频播放API才能令人满意地实现这一目标.在.Net中播放声音的高级方式Compact Framework在理论上具有复音功能,但在实践中它们的工作非常糟糕(很多毛刺,口吃和失真)."
这对Android有意义吗?答案令人沮丧.
所以我的问题.Android真的没有办法实现10毫秒的音频延迟吗?
说实话,我不希望很快就会有解决方案,但只是希望一个伟大的思想能够解决这个问题.