前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android 6.0以后的音频延迟改进

Android 6.0以后的音频延迟改进

作者头像
阿利民
发布2022-05-16 13:03:39
5250
发布2022-05-16 13:03:39
举报
文章被收录于专栏:阿利民阿利民

随着 Android 6.0 Marshmallow 的部署,华为 Nexus 6P 的往返音频延迟大大改善了 18 毫秒,HTC Nexus 9 的时钟延迟为 15 毫秒。在上一篇文章中提到,10毫秒以内的环路延迟才能被称为专业音频。

一秒的往返音频延迟听起来简直是永恒,250毫秒仍然很糟糕,100 毫秒是一秒的 10%,听起来仍然不可接受。在 25 毫秒时,感觉还可以接受。除非你是电影Whiplash中严格的爵士乐教练 Terence Fletcher,否则10 毫秒应该被视为瞬间。

经过测试,HTC Nexus 9的延迟还是没有达到10毫秒的标准,但14毫秒显示了Android在专业音频处理上取得的令人惊叹的进步。

Android 6.0 Marshmallow的变化

在Android 6.0上,Google对音频线程调度方面进行了改进,从而允许使用更小的缓冲区便能够正常进行工作,这意味着更低的延迟。

但是,Android多媒体服务看起来在Android 6.0上并没有显著的改变。Audio Flinger依然使用“Push”的方式工作。

要及时了解最新的 Android 音频延迟改进,您应该了解以下几点:

音频链路

例子

音频从内建的麦克风输入,内建扬声器输出

你手上的手机

音频从内建麦克风输入,耳机输出

连上耳机的手机,可能你在玩K歌APP

音频从耳麦输入,耳机输出

连上带耳麦耳机的手机

USB和MIDI外置设备

外置声卡

可能你会觉得这些链路看起来都差不多,但事实上并非如此,这几个链路在Android音频延迟上表现出了极大的差异。

音频链路

HTC Nexus 9最佳环路音频延迟 (Android 6.0)

音频从内建的麦克风输入,内建扬声器输出

26毫秒

音频从内建麦克风输入,耳机输出

14毫秒

音频从耳麦输入,耳机输出

14毫秒

USB和MIDI外置设备

无法测试

从测试结果来看,内建麦克风的延迟比外置的大得多,为什么会出现这种差异?

内置麦克风上的额外音频延迟

几乎所有的Android设备内建麦克风都会对音频进行额外的处理,以获得更好的音频质量、更好地分离扬声器和背景噪音,并减少回声。

当我们使用外置麦克风时,Android系统会跳过这种处理,从而极大降低延迟。

检测耳机是否接入

对于Android 5.0及以上的系统,提供了一个耳机接入监测的API,但是我们仍然无法知道用户接入的是什么设备,所以我们无法利用这个API针对不同的场景进行不同的音频延迟处理。

关闭内置麦克风效果处理

目前无法知道有哪些设备支持关闭这些效果,我们在使用OpenSL ES的时候可以尝试设置以下标记,这样就能跳过音频效果处理,从而获得低延迟。

代码语言:javascript
复制
SL_ANDROID_RECORDING_PRESET_VOICE_RECOGNITION

低延迟标志

表示该设备支持45毫秒或更短的稳定输出延迟时间。

代码语言:javascript
复制
val hasLowLatencyFeature: Boolean = packageManager.hasSystemFeature(PackageManager.FEATURE_AUDIO_LOW_LATENCY)

Android高性能音频特性

表示该设备支持20毫秒或更短的稳定往返延迟。

代码语言:javascript
复制
val hasProFeature: Boolean = packageManager.hasSystemFeature(PackageManager.FEATURE_AUDIO_PRO)

-- END --

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-08-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 阿利民 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档