位置: 编程技术 - 正文

安卓音频简析(安卓音频分析软件)

编辑:rootadmin

推荐整理分享安卓音频简析(安卓音频分析软件),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:安卓(android)系统设备中音质最优秀的音频播放器,安卓 音频播放,安卓 音频处理,安卓音频api,安卓音频简析软件,安卓音频api,安卓 音频处理,android音频,内容如对您有帮助,希望把文章链接给更多的朋友!

Android音频分析

1 安卓音频系统框架

Ø Multimedia framework:

多媒体框架负责封装了播放/录音类、连接安卓音频解码库进行音频软件解码以及连接高通OpenMaxIL接口。上层APP直接调用Multimedia framework的接口来进行音频的播放和录音。

Ø AudioService

注册安卓广播事件,获取广播事件,如蓝牙耳机插拔、USB音频设备插拔等,并调用Audio System接口来实现音频控制。

Ø AudioSystem

该类中包含了音频的基础定义,包括音频流(stream)类型,路由(Routing)类型、音频输入输出设备(device)的定义、音频设备声明(device states)以及一些音频接口函数。

Ø Audio Flinger(AF):

AudioFlinger是安卓音频的两大服务之一,另一个是AudioPolicyService,这两个服务均由mediaserver实例化(main_mediaserver.cpp)。AudioFlinger直接与HAL层通讯,所有的音频操作都需要经过AudioFlinger来控制。主要有以下功能:

1. 通过libaudio库的接口来管理所有的音频输入/输出设备;

2. 实现PCM数据的混音/输入/输出;

3. 播放时音量控制

Ø Audio Policy Manager(APM):

APM主要用于音频流的路由策略,以及用户场景的切换,最终也是和AF通讯,有AF与HAL通讯控制。AudioPolicyService.java 也会通过AudioSystem中的接口(如AudioSystem::get_audio_flinger())来获取AF实例,音量的控制也是调用AudioSystem中的接口(如AudioSystem::setVoiceVolume(data->mVolume))来控制,最终AS也是调用AF的接口来实现。

Ø AudioTrack(AT):

用于播放音频的类,通过audio_track_cblk_t 与AF共享内存,传递音频数据。

Ø AudioRecord:

用于录音的类。

2 具体分析2.1 AudioTrack(AT)分析

java层:frameworksbasemediajavaandroidmedia AudioTrack.java

JNI层: frameworksbasecorejniandroid_media_AudioTrack.cpp

库:frameworksavmedialibmediaAudioTrack.cpp

三个文件的关系:java层AudioTrack.java调用JNI层android_media_AudioTrack.cppnative函数,JNI层具体功能再调用库AudioTrack.cpp中函数来实现。

s

总的来说,audiotrack.java提供给APP用于播放音频的类,通过JNI与c&#;&#;文件通信完成具体的播放功能。

audiotrack.java主要提供以下几个方法:

getMinBufferSize():根据采样率,声道数,采样位数(采样精度)(分别对应三个形参)来计算需要的最小buffer缓冲区。

AudioTrack():构造函数,构造一个播放类;

paly():开始播放音频;

write():往AudioTrack中写入音频数据;

stop():停止播放;

pause():暂停播放;

release():释放底层的资源。

安卓音频简析(安卓音频分析软件)

AudioTrack播放音频数据时有两种方式,一种是静态模式(MODE_STATIC),另一种是流模式(MODE_STREAM)。

Ø static

静态模式就是数据一次性交付给接收方。好处是简单高效,只需要进行一次操作就完成了数据的传递;缺点当然也很明显,无法胜任数据量较大的音频回放,因而通常只用于播放铃声、系统提醒等对内存小的操作。

Ø streaming

流模式和网络上播放视频是类&#;的,即数据是按照一定规律不断地传递给接收方的。理论上它可用于任何音频播放的场景,不过我们一般在以下情况下采用:

Ø 音频文件过大

Ø 音频属性要求高,比如采样率高、深度大的数据

Ø 音频数据是实时产生的,这种情况就只能用流模式了

AudioTrack的构造函数中有一个变量用来指定buffer的大小bufferSizeInBytes。

AudioTrack在Native层会对这个变量的&#;进行有效性判断。首先,它至少要等于或者大于getMinBufferSize返回的&#;,然后它必须是frame大小的整数倍。(frame=声道数*采样位数/8)

举例说明,MODE_STREAM模式下,在JAVA层构造AudioTrack时,bufferSizeInBytes的大小设定为,在Native层调用Write方法拷贝数据至Hardware进行回放,每次拷贝的大小为.则需要拷贝到次,声卡才发出声音。即需要将数据填满缓冲区才进行播放。(*=)

See also:

Android深入浅出之Audio 第一部分 AudioTrack分析

Audio System 之一:AudioTrack如何与AudioFlinger交换音频数据

2.2 AudioFlinger(AF)

负责向下访问AudioHardwareInterface,实现音频PCM数据的混音/输入/输出以及音量调节;是底层和安卓层的桥梁。

文件位置: frameworksavservicesaudioflinger AudioFlinger.cpp

See also:

Android Audio System 之二:AudioFlinger

Audio System 之一:AudioTrack如何与AudioFlinger交换音频数据

第二部分 AudioFlinger分析

受用的评论:参见

2.3 AudioPolicyService(APS)

AudioPolicyService主要完成以下任务:

JAVA应用层通过JNI,经由IAudioPolicyService接口,访问AudioPolicyService提供的服务 输入输出设备的连接状态 系统的音频策略(strategy)的切换 音量/音频参数的设置

AudioPolicyManager

AudioPolicyService的很大一部分管理工作都是在AudioPolicyManager中完成的。包括音量管理,音频策略(strategy)管理,输入输出设备管理。

See also:

Android Audio System 之三: AudioPolicyService 和 AudioPolicyManager

Android快速开发之appBase——(4).详解com.snicesoft.Application和BaseActivity 转载请注明本文出自JFlex的博客

android 加载的一些收藏 第一种普通的ProgressBar:ProgressBarandroid:id=@+id/right_progressstyle=?android:attr/progressBarStyleSmallandroid:layout_width=dpandroid:layout_height=dpandroid:layout_marginRight=.0dipa

Android中Activity生命周期 转自:

标签: 安卓音频分析软件

本文链接地址:https://www.jiuchutong.com/biancheng/386758.html 转载请保留说明!

上一篇:Android Volley完全解析(一),初识Volley的基本用法(android 全局viewmodel)

下一篇:Android快速开发之appBase——(4).详解com.snicesoft.Application和BaseActivity(安卓快速开发平台)

  • 企业所得税视同销售的会计处理是?
  • 什么情况下一般纳税人可以简易征收
  • 医院能否开具增值税专用发票
  • 个税系统中的离线算税和在线算税结果一样吗
  • 电子银行承兑汇票查询
  • 一般纳税人厂房出租怎么开票
  • 发票一年不能开超多少才不扣税费
  • 货车压线行驶怎么处罚
  • 未加工食材
  • 主营业务收入如何红冲
  • 生产成本里面的工会经费
  • 福利费可以抵扣个税吗
  • 商城退换货
  • 进项税额转出怎么申报
  • 旧发票专用章如何处理
  • 建筑行业一般纳税人税率是多少
  • 小规模纳税人会计核算健全,能够提供准确
  • 月销售额未超过10万的免征税怎么算
  • 个体户怎么核定开多少票
  • 怎么远程重装win10
  • 上月有留底税额,这个月有销销没有进项怎么做账
  • psr.exe是什么意思
  • php parse_url
  • 如何查看自己的qq密码
  • PHP:oci_bind_array_by_name()的用法_Oracle函数
  • 其他应付款在现金流量表怎么填
  • 金枝玉叶怎么养才爆盆
  • PHP:imagepalettecopy()的用法_GD库图像处理函数
  • 偿还债券本金和利息
  • 进料加工贸易方式
  • vscode调试在哪
  • 自然人税收管理系统扣缴客户端app
  • PHP面向对象程序设计
  • 叮咚你有一份好运请查收图片
  • thinkphp框架结构
  • 应交土地增值税税率
  • 出入库单可以用机打的吗
  • python怎么设置窗口界面
  • 织梦tag标签怎么用
  • 织梦如何给栏目增加缩略图
  • 印花税申报的流程有哪些
  • 房地产企业政府返还款
  • sqlserver游标实例
  • 专用发票什么意思
  • 企业选择的短期调整
  • 试分析营改增的重大意义
  • 在建工程的
  • 车子以旧换新还能贷款吗
  • 电子承兑汇票做账看哪个日期
  • 交车辆购置税需要什么材料
  • 会计科目用错如何改正
  • 领用自产产品用于固定资产
  • 企业获得小微企业补贴
  • 红字发票填开说明是?
  • 初次建账应准备哪几种会计本
  • sqlserver管理工具有哪些
  • 服务器 安装win10
  • SQL Server2005、2008如何彻底删除卸载并重新安装?
  • 64位win8怎么安装南天PR2E针式打印机驱动?
  • Windows Server 2008网络中禁止迅雷下载
  • 最新bios界面
  • 因以下文件的损坏或者丢失,windows无法启动hal.dll
  • win8怎么打开远程连接
  • win10预览文件怎么显示内容
  • cocos2dx环境搭建
  • 我是如何从0开始做到年入1000+万的
  • unity接收udp
  • Python爬取微信视频号
  • python 嵌套
  • js脚本使用教程
  • javascript基础类型
  • 河南电子税务局开票流程
  • 税务财务负责人承担什么责任
  • 境外付汇税务备案要多久
  • 动漫企业的增值税率
  • 企业所得税季度申报表填报说明
  • 福州电动车怎么报废处理
  • 个人所得税是按实发工资还是应发
  • 软件企业专项审计
  • 湖北国税发票手机查询
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设