Android 4.1 Audio系统变化说明之一

  次阅读 作者:智能小宝 来源:互联网 2015-09-29 10:24 我要评论(0)

Android 4.1,英文代号简称JB。在国人眼里,JB这个词还和动物有点关系。Google如此频繁修改Android,终于推出了一个可以被大家整天JB JB挂在嘴上的版本。以后我的文章也可以一面用JB表示版本号,一面用JB表示毛主席常说的 战略上的鄙视了 。请大家根据上下文揣摩我写下JB一词的心 情。

今天将稍深入得介绍一下JB 4.1在Audio系统做的翻天覆地的改动。这里先啰嗦几句:就像80后经常抱怨自己晚生了几年一样,马上就会有很多码农抱怨接触Android太晚了。 为何?JB Audio系统的难度相对4.0, 2.3, 2.2已经非常非常大了。99%的情况下,在你没有看到这个NB(这不是脏话,4.1 Audio系统中就有一个类叫NBAIO,篮球控不要搞错成NBA了,原意是Non-block Audio I/O。看到了吧, 非阻塞I/O,各位自问下,有多少人对 这个东西有深刻理解?)东西演化的基础上,不太可能能看懂JB Audio系统。所以,建议这99%中的没有见识过Audio演化历史的屌丝同学们,先仔细研究(以前我仅仅建议大家看看,现在提高要求为仔细研究)《深 入理解Android 卷I》Audio系统。 BTW,此书在某个章节里特意提醒过大家要去研究下各种I/O模型,不知道有几个人屌过我了。

本文将分几个部分,事前没有打草稿,所以会有点乱。

先从Java层AudioTrack类说起

一 AudioTrack Java类变化说明

声道数上,以前只有单声道(MONO)和立体声(STEREO),现在拓展到最NB八声道(7.1 HiFi啊)。参数名为CHANNEL_OUT_7POINT1_SURROUND。看到这个参数,我下巴咣当就掉下来了。这玩意,一时半会我还弄不明白 是个什么道理。有知晓的屌丝码农们不妨告诉大家。 当然,最终的输出还是双声道。多声道(大于2)的时候会使用downmixer处理(下变换处理,同学们可搜索之)

其他的变化也有,但不大了。我这里先挑一些吸引眼球的。BTW,放心,不会像那个泷泽萝拉首秀片子一样只让大家看见大鼻孔的。

二 AudioTrack JNI层变化说明

这一层包括JNI层和AudioTrack本身

JNI层变化不大。

Audio Native核心代码移到了framework/av下。对,你没看错。真的是av。这就是JB Audio一个比较大的变化。Audio Native核心代码全部移到了frameworks/AV目录下。

AudioTrack增加了一个变量,用于控制使用它的进程的调度优先级(前文说错了,这里确实设置的是nicer值)。如果处于播放状态的 话,将设置进程调度优先级为ANDROID_PRIORITY_AUDIO。就像你们看到马赛克时一定会嘟喃一样。我这里也要特别啰嗦几句。在单核CPU 的情况下,设置优先级是比较愚蠢的(ANDROID_PRIORITY_AUDIO的值为-16,优先级极高,单核设置个这么高的怪物,不知道其他app 还怎么玩。如果你不知道我在说什么,先看看这篇文章吧,http://blog.csdn.net/innost/article/details/6940136)。 但现在2核,4核已经比较常见了,这里就可以来玩玩调度方面的事情。对屌丝码农的真正考验是:多核并行编程,linux os的原理,需要各位屌丝同学努力掌握。Audio已经不那么能轻易被你们任意蹂躏了。另外,低端手机,求求你们别移植4.1了,这个真的不是低端能玩 的。

AudioTrack升级为父亲了。JB为它定义了一个莫名其妙的的TimedAudioTrack子类。这个类在编解码的aah_rtp(我 现在还不知道aah是什么)里边用到了。从注释上看,该类是一个带时间戳(有时间戳,就可以做同步了)的音频输出接口。详细理解的话,就需要结合具体应用 场景去分析了(主要是rtp这一块)。搞编解码的同学们,抓紧了!

另外一个超级复杂的变化,是Audio定义了几个输出flag(见audio.h的audio_output_flags_t枚举定义)。根据 注释,该值有两个作用,一个是AT的使用者可以指明自己想使用怎样的outputDevice。另外一个是设备厂商可以通过它声明自己支持的输出设备(看 来,设备初始化的时候,又增添了参数读取和配置这方面的工作)。不过,从该枚举的定义来看,我还看不出它和硬件有什么关系。它定义的值如下:

typedef enum {

AUDIO_OUTPUT_FLAG_NONE = 0x0, // no attributes

AUDIO_OUTPUT_FLAG_DIRECT = 0x1, // this output directly connects a track

// to one output stream: no software mixer

AUDIO_OUTPUT_FLAG_PRIMARY = 0x2, // this output is the primary output of

// the device. It is unique and must be

// present. It is opened by default and

// receives routing, audio mode and volume

// controls related to voice calls.

AUDIO_OUTPUT_FLAG_FAST = 0x4, // output supports "fast tracks", 《==什么叫fast track?太难理解了!目前,java层的audiotrack只会使用第一个标志。

// defined elsewhere

本站文章信息来源于网络以及网友投稿,本站只负责对文章进行整理、排版、编辑,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如果您有什么意见或建议,请联系QQ28-1688-302!

人工智能实验室
相关文章相关文章
  • 英国研发“杀生”机器人 通过生命体获取能量

    英国研发“杀生”机器人 通过生命体获取能量

  • 无人驾驶汽车如何改变城市生活?听听他们怎么说

    无人驾驶汽车如何改变城市生活?听听他们怎么说

  • 未来两年人工智能要怎么走?看这篇就够了

    未来两年人工智能要怎么走?看这篇就够了

  • 韩春雨称已能重复实验结果 近期将有消息公布

    韩春雨称已能重复实验结果 近期将有消息公布

网友点评网友点评
阅读推荐阅读推荐

据国外媒体报道,在过去两年内,聊天机器人(chatbot)、人工智能以及机器学习的研发和采用取得了巨大进展。许多初创公司正利用人工智能和...

霍金 视觉中国 图 英国著名物理学家霍金(Stephen Hawking)再次就人工智能(AI)发声,他认为:对于人类来说,强大AI的出现可能是最美妙的...

文|郑娟娟 今年,人工智能(AI) 60岁了。在AI60岁的时候,笔者想要介绍一下AI100,一个刚刚2岁的研究项目,但它的预设寿命是100年,甚至更长...

AlphaGo与李世石的人机大战,为大众迅速普及了人工智能的概念。 但对谷歌而言,除了下围棋,现在的人工智能进展到哪一步了?未来,人工智能...