Android 音频框架:

1,与应用程序开发有直接关联的是MediaPlayer,MediaRecorder。

音频系统的核心由AudioFlinger、AudioPolicyService、AudioTrack/AudioRecorder三部分构成,其中AudioFlinger、AudioPolicyService属于system service,驻留在audioserver进程,负责不断地处理AudioTrack/AudioRecorder的请求。

依据Android音频框架图的几个层次结构:应用层,framework层,库层,hal层,kernel层来细分音频系统。

1),app,比如音乐播放器

2),framework层,开发音频产品使用最多的两个类MediaPlayer,MediaRecorder;还有两个专门用于音频管理的类:AudioTrack,AudioRecorder,系统服务MediaPlayerService内部的音频实现就是通过这两个类完成的。此外,还有AudioManager,AudioService,AudioSystem类。

3),Libraries,framework层的java类只是app跟库文件的中介,这些中介并不会完全去实现相关的功能,真正的功能实现是在底层库中。跟音频相关的库很多,如:

\frameworks\av\media\libmedia,包括的类有:AudioRecorder.cpp,AudioTrack.cpp,MediaRecorder.cpp,MediaPlayer.cpp等;

音频系统的核心服务类:AudioFlinger.cpp,libaudioflinger在\frameworks\av\services\audioflinger路径下;

AudioPolicyService.cpp,libaudiopolicyservice在路径:frameworks\av\services\audiopolicy下。

还有一个重要的系统服务MediaPlayerService,libmediaplayerservic在目录:\frameworks\av\media\libmediaplayerservice下。

其中,AudioTrack,AudioRecorder,mediaPlayer,MediaRecorder是应用进程的一部分,通过Binder服务来与系统进程通信。

4),HAL,音频硬件抽象层主要分为两个核心:AudioFlinger和AudioPolicyService。AudioFlinger是硬件抽象层的服务对象,一方面AudioFlinger可以不用直接调用底层的音频驱动,另一方面AudioFlinger的上层(包括同层的MediaPlayerService)模块,只需要与他进行通信就可以实现音频相关的功能了。AudioPolicyService实际并不是一个真实的设备,只是采用虚拟设备的方式让厂商可以方便的定制自己的“音频策略”。

抽象层的任务是将AudioFlinger/AudioPolicyService真正的与硬件设备关联起来,但是又要保证底层的变化不对上层造成影响。所以Hal层提供了统一的接口来定义跟audioFlinger,AudioPolicyService之间的通信方式,这就是audio_hw_device,audio_stream_in, audio_stream_out等结构体,这些struct数据类型内部只是提供了函数指针的定义,真正的实现要在AudioFlinger、AudioPolicyService初始化时根据加载的库来填充。

android 音频子系统框架(一)相关推荐

  1. Android音频子系统(十二)------抖音直播功耗问题解析

    你好!这里是风筝的博客, 欢迎和我一起交流. [前提条件] 移动卡纯5G,120HZ,最小亮度,最小音量,开启定位 [操作步骤] 1.从软件商店下载最新版本APK 2.进入抖音并登录账号,点击右上方的 ...

  2. Android音频子系统(五)------AudioFlinger处理流程

    你好!这里是风筝的博客, 欢迎和我一起交流. AndioFlinger 作为 Android 的音频系统引擎,重任之一是负责输入输出流设备的管理及音频流数据的处理传输,这是由回放线程(Playback ...

  3. Android音频子系统(十四)------耳机杂音问题解析

    你好!这里是风筝的博客, 欢迎和我一起交流. 背景介绍: [前提条件]OPPO的模拟有线耳机 [操作步骤]打开全民K歌进行任意一首音乐K歌的时候 [实际结果]耳机里面有滋滋的杂音 [期望结果]耳机里面 ...

  4. Android音频子系统(九)------数字耳机功耗问题解析

    你好!这里是风筝的博客, 欢迎和我一起交流. 其实我们知道,在手机里面,除了相机和整机性能,还有一个用户最关键的地方:功耗. 功耗一直是用户在意的地方,如果用户用手机发现耗电耗得飞起,那估计在网上能把 ...

  5. Android音频子系统(十)------MTK Audio录音流程代码解析

    你好!这里是风筝的博客, 欢迎和我一起交流. Android framework中的代码每个平台基本都是大同小异,只有Hal上代码才是厂商特制,每个平台都不相同,这里以MTK平台为例,记录下MTK平台 ...

  6. Android音频子系统(十三)------audio音频测试工具

    你好!这里是风筝的博客, 欢迎和我一起交流. 测试音频延时的话,一般使用WALT来测试是最为准确的,他是借助了外部硬件来捕获音频信号,某宝上有卖: 就是有丢丢小贵,本打工人还是想想白嫖的法子- 谷歌有 ...

  7. Android音频子系统(十一)------耳机返听(耳返)原理实现

    你好!这里是风筝的博客, 欢迎和我一起交流. 耳返,也就是耳机返听,一般用在演唱会直播.手机K歌.KTV等场景. 例如在嘈杂的演唱环境里,通过佩戴耳返,歌手能清楚地听到伴奏和自己的声音,来鉴定自己有没 ...

  8. Android音频子系统(一)------openOutput打开流程

    你好!这里是风筝的博客, 欢迎和我一起交流. Audio在Android也算是比较复杂的系统,我也是一边学习一边做笔记,如果有不对的地方可以在评论区指出. 这里以Android N为例 为了防止代码看 ...

  9. Android音频子系统(十五)------Audio调试经验

    你好!这里是风筝的博客, 欢迎和我一起交流. 两年前,我初来手机厂,还不会怎么分析log,当时刚从珠海芯片厂出来,遇到问题都是接上串口线,然后自己手动复现问题,然后对着串口查看下打出来的log分析异常 ...

  10. 韦东山 android 淘宝,韦东山-android音频子系统中audio_policy.conf的usb声卡理解 - 百问网嵌入式问答社区...

    第四期视频->音频系统->5-(4/4)_项目实战1_耳麦拔插_切换声音通道流程 1.韦老师讲的声卡是指的音频编解码芯片(比如tiny4412上面指的是WM8960编解码芯片)? usb声 ...

最新文章

  1. 006_html元素
  2. application.xml定时
  3. oracle在线sql数据库设计,一款在线ER模型设计工具,支持MySQL、SQLServer、Oracle、Postgresql...
  4. 理解UI线程——SWT, Android, 和Swing的UI机理
  5. [ZJOI2010] 排列计数(dp + 组合数)
  6. 【转】C#中[STAThread]的作用
  7. Android ADB调试之无线连接设备
  8. ffempge 效率 生成_ffmpeg 编译静态库,搞了好久,终于搞成功了.根据网上教程做的 · iodefog...
  9. eclipse.ini 修改默认编码为 UTF-8
  10. libvirt 用c语言编译,基于C语言libvirt API简单小程序
  11. matlab 绘制三维空间直线
  12. 华为手机解锁码计算工具_华为高通全系列手机解锁工具
  13. 遗传算法matlab_当结构设计遇到遗传算法应用ANSYS和MATLAB联合优化设计探索(二)...
  14. 数学建模-插值与拟合模型
  15. 【蓝桥杯备考】Acwing周赛 第41场 Java题解
  16. Springboot中Bean的具体含义
  17. Spring MVC过滤器-超类
  18. 模型量化(1):模型量化简介
  19. Java面向对象编程-模拟购物车模块
  20. 阿里云云盘开通后格式化和挂载数据盘

热门文章

  1. Kaggle_Predict Future Sales_Prac 1(时间序列预测商品销量)
  2. doc 和docx的区别
  3. 永远做重要而不紧急的事
  4. 一.微信公众号迁移流程 openid转换
  5. html5怎么给视频加字幕,怎么给视频添加文字 怎么用Premiere Pro cs6给视频中添加文字...
  6. 分享这些年来第三方支付业务的申请流程及详细方案
  7. 2020 年全球移动 APT事件总结
  8. markdowm快捷键学习
  9. android修改HOLO对话框风格
  10. 逆向系列之获取任意微信小程序code