聊聊Android 5的音频延迟和SRC问题
农步祥 于 2015.02.02 00:59:19 | 源自:www.soomal.com | 版权:原创 | 平均/总评分:05.77/225
  • 2014年6月,Google在I/O大会上公布了Android L开发者预览版,也是Android 5.0的首次正式亮相,而随着11月新一代Nexus智能手机和平板产品Nexus 6、Nexus 9等正式上市,多款设备得到了Android 5的正式版在线OTA更新推送。 目前,可以随着Andorid 5版本更新同步的主要设备有摩托罗拉Moto X、G以及Nexus4、5、 6、7[2013版]。

    从在Nexus 7的实践[当时仍是预览版固件,和现在有所不同]和Nexus 6的音质测评中,我们也体验了Android 5的音频系统的特色,并发现了一些问题,时至今日,可以来简单回顾一下“棒棒糖”的音频系统存在的问题。原生Android 5的音频子系统在日常的音乐欣赏和视频娱乐应用是否得到提升?

    低延迟音频

    Android的音频延迟有多糟糕?如果你尝试过在Android设备上K歌,那感受就非常明显《vivo X5智能手机K歌功能体验报告与消费提示 》[作者:Soomal ] 。一般说法是Android 4.X的音频延迟普遍在200毫秒以上,但这里的延迟仅仅是录入延迟,并不包含屏幕操作的响应时间。在iPad普及的一段时间,经常有使用iOS的各种乐器类应用进行即兴演奏的视频展示[包括苹果自己的视频广告],这是Android难以做到的。而另一个影响使用体验的是视频的声画延迟,难以保证显示和音频同步,用Android平板看视频的用户应该对这种现象应该已经习以为常。

    要解决延迟问题,首先要知道原因,在2013年的Google I/O上,Google的两个技术攻城狮就详细解释了当时的Android为何无法实现高性能音频处理,如性能、耗电、爆音等问题。当然这些缺点基本是继承了Linux系统的先天不足,iOS和WindowPhone上确实有着更好的优势。音频延迟的首要原因来自底层驱动,Android采用HAL架构进行应用架构和驱动通信,最底层音频CODEC驱动仍基于Linux核心,绝大多数使用的Linux内核中的ALSA。ALSA本身就是比较臃肿,性能不佳的音频驱动架构,这里不再展开叙述。但也有例外,例如联发科的音频CODEC硬件驱动就比较另类,内核驱动架构类似OSS[Open Sound System],延迟在Android体系中表现相对较好一些。

    在Google官方的技术资料中,Android确实有OpenSL ES[针对嵌入式系统的开放音频库]的音频API提供低延迟音频实现,但目前并不被主流音频应用所接受,而关于Android 5的改进部分,Google的详细技术资料也主要强调的是输入延迟的改善——因此这意味着音频输出延迟并没有什么变化,而屏幕操作问题依旧,下面的一段视频可以带来比较直观的体验,Android在这方面还有很长的路要走,在可以预见的未来,音频延迟仍将会是短板。

    Android SRC问题回归?

    在去年,我们测试的Android手机产品中,已经有相当比例的产品解决了SRC问题。我们曾乐观地预计,到2015年,SRC将不再成为Android的短板。再提SRC就是老皇历和炒旧饭了。但现实是随着Android 5.0的更新推送,包括Soomal在内的不少注重音质的用户还是发现了新的问题。

    Nexus 6是Nexus中的高端旗舰机型,售价昂贵,集成了大量新技术,力图打造Android的形象产品。由摩托罗拉设计的Nexus 6,应该说是在一定程度上重视了音质的,达到常规音频硬件架构设计的一流水平并不是问题。但遗憾的是,在播放44.1kHz采样的音频时,出现了音质劣化的现象。

    这是个体现象还是操作系统的问题?Nexus 6的表现与高通SRC的特征与并不符合,也和过去的Android SRC表现不一样,Nexus 6在44.1kHz下谐波并没有那么明显,但高频衰减严重,音质劣化仍然明显可闻。随后我们测试了Nexus 4、Nexus 7和Galaxy Nexus[使用非官方Android 5.0固件,CyanogenMod12],我们甚至尝试了外接USB声卡[XMOS芯片]。

  • 经过反复测试,表现基本一致,通过查看系统ALSA驱动信息得知,输出采样率被锁定在48kHz,播放音乐会经过SRC采样率转换,在输出电平较高的XMOS声卡上,谐波相对更明显。Galaxy Nexus使用欧盛的CODEC,XMOS数字声卡使用USB通用音频架构,和手机内置CODEC驱动已经没有什么联系了,而在Google网站上,已有人将此问题提交至官方,测试设备为安装CM12固件的三星i9001,因此可以基本排除高通的责任。原生Android 5.0系统目前采样率输出被锁定为单一的48kHz,并非底层硬件驱动的责任。即使外接USB声卡,也无法避免操作系统层强制转换成单一采样率输出的问题,自然也无法满足对音质要求更高的应用。

    总结

    由于Android 5系统锁定单一采样率输出至48kHz,在目前已经支持的设备中[包括CyanogenMod12固件]的音质表现相比Android 4.4版本均为退步,让我们感到有点意外,对于想尝鲜Android L或CM12系统,又多少有点在意手机音质的用户,在系统升级时需要慎重考虑。对于类似Nexus 6等无法使用低版本系统的机型,只能寄希望于系统更新解决,或是安慰一下自己,至少Android 5的SRC品质要比过去强不少。

    对于手机厂商,也要提个醒,今年普及Android 5是必然趋势,厂商在进行手机系统升级的同时应该留个心眼[尤其是采用了独立DAC运放等变态设计的机型],多多发挥主观能动性对源代码进行调整,规避Android SRC的问题,避免掉进这个大坑。

    请评分
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    03
    我用07MP接一加的USB OTG(刷的CM12夜版),07MP的屏幕上显示的是192哦,好像没有锁定频率啊
    发表于2015.04.20 17:33:45
    78
    解决了也就那样,真的在意音质干嘛用手机
    发表于2015.04.08 21:41:25
    77
    222.064.067.***
    222.064.067.***
    发表于2015.03.28 22:59:09
    76
    03
    在2013年的Google I/O上,Google的两个技术攻城狮就详细解释了当时的Android为何无法实现高性能音频处理......试想一下,高大上的“攻城狮”能有什么工作成就?
    发表于2015.03.25 13:07:23
    75
    220.168.***.***
    220.168.***.***
    还是买个MP3去听音乐吧,就不用去纠结这个了。
    发表于2015.03.09 20:47:01
    74
    03
    不用Android真好
    发表于2015.02.15 19:28:02
    72
    03
    发表于2015.02.14 15:40:07
    71
    124.227.038.***
    124.227.038.***
    发表于2015.02.10 17:50:13
    70
    03
    发表于2015.02.10 13:32:10
    69
    223.156.046.***
    223.156.046.***
    发表于2015.02.07 23:48:50
    67
    03
    为下层硬件提供抽象才是重点,google希望不要让每个应用都接触shell,这也是为什么android比其他GNU linux发行版稳定的原因,你去用了就会发现非稳定和非长期支持的发行版几乎没法日用,很大程度上HAL降低了驱动开发难度,把上层接口封装好,增强了内核稳定性。
    但是驱动也不是说google不搞,如果同样是s800平台那么其他厂商就可以般来很多aosp的源码。高通之所以让google放开源镜像很大程度就是google也在参与对驱动的开发。
    发表于2015.02.07 08:29:34
    66
    113.064.061.***
    113.064.061.***
    发表于2015.02.06 08:11:38
    65
    03
    发表于2015.02.05 18:56:22
    64
    03

    此帖使用XT1031提交
    发表于2015.02.05 17:17:21
    63
    03
    所谓的hal不过google为了闭源的方便捣鼓出来的东西,基于linux的。东西都是飞来的,没有自己费心力开发的东西,很多驱动的东西也不是google自己能亲自去搞的。
    发表于2015.02.05 09:48:01
    62
    119.247.219.***
    119.247.219.***
    发表于2015.02.04 19:24:12
    61
    221.238.***.***
    221.238.***.***
    59
    提示
    本贴不可匿名回复,回复等级为:1 ,您现在正处在潜水状态
    回复
    验证码
    1877 为防止广告机贴垃圾,不得已而为之
    表情
    正文