干,认识Audio框架还因此发现一个雷
我们最近出了一个问题,我们点击播放音乐,然后再点击停止播放的时候,喇叭还会输出一段杂音后喇叭才会停止输出。
经过排查发现,在代码里面就做了这个功能
代码在AudioFlinger.h 里
frameworks/av/services/audioflinger/AudioFlinger.h
为啥有这个功能?
我咨询了一个大佬,是这样回复的
这个操作应该是做来解决一直开关导致的po音的 看看有没有数据帧的callback在停的时候有没有再被调用,你关了3S秒是有可能有popo音的
再声明下,这个 3s 的时间是Google默认设定的时间,如果是做音频的同学,可以关注一下这个特性,而且是自己的产品的话,需要根据自己的要求进行修改。
来一张audio框架图片
Audio代码位置
AudioTrack.java
framework/base/media/java/com/android/media/AudioTrack.javaandroid_media_track.cpp
framework/base/core/jni/android_media_track.cppMemoryHeapBase
framework/base/libs/binder/MemoryHeapBase.cppMemoryBase.h
framework/base/include/binder/MemoryBase.hAudioTrack.cpp
framework/base/libmedia/AudioTrack.cppaudio_track_cblk_t声明
framework/base/include/private/media/AudioTrackShared.haudio_track_cblk_t定义
framework/base/media/libmedia/AudioTrack.cppMain_MediaServer.cpp
framework/base/media/mediaserver/Main_MediaServer.cppAudioFlinger.cpp
framework/base/libs/audioFlinger/AudioFlinger.cppAudioHardwareInterface.h 不同厂商的HAL位置会不同
hardware/libhardware_legacy/include/hardware_legacy/AudioHardwareInterface.hAudioMixer.cpp
framework/base/libs/audioflinger/AudioMixer.cppAudioSystem.h
framework/base/include/media/AudioSystem.hAudioSystem.cpp
framework/base/media/libmedia/AudioSystem.cppAudioPolicyInterface.h
hardware/libhardware_legacy/include/hardware_legacyAudioPolicyManagerBase.cpp
framework/base/libs/audioflinger/AudioPolicyManagerBase.cppAudioService.java
framework/base/media/java/com/android/media/AudioService.javaAndroid_media_AudioSystem.cpp
framework/base/core/Jni/Android_media_AudioSystem.cpp
主要要关注audioflinger和audiopolicy这两个服务
再看看一些调用关系的图片
AudioTrack
AudioTrack属于Audio系统对外提供的API接口类,在java层和native层都有对应类。
AudioFlinger
AudioFlinger是audio的核心,AudioTrack的数据需要经过AudioFlinger进行混音等处理,这里的数据最终会写入到Audio 的HAL层。
audioFlinger和audiopolicy实例化
AudioFlinger::instantiate();
AudioPolicyService::instantiate();
AudioPolicy
AudioFlinger控制的是输入和输出,AudioPolicyService控制着整个音频系统,所以AudioPolicy创建完成后,音频系统也就开始工作了。
我们在很多地方看到有资料说的,AudioPolicy是音频系统的策略管理系统,也就是这个意思。
推荐阅读:
专辑|Linux文章汇总
专辑|程序人生
专辑|C语言
嵌入式Linux
微信扫描二维码,关注我的公众号
干,认识Audio框架还因此发现一个雷相关推荐
- 我发现一个新的软件,用自然语言编程!非常酷!
周六晚上10点半, 张大胖兴冲冲地在微信上找我:"欣哥,我发现一个编程软件,非常酷!" 我:"别烦我!我忙着追剧呢." "真的非常酷,这个软件叫Met ...
- android tcp socket框架_花了一个星期,我终于把RPC框架整明白了
[51CTO.com原创稿件]RPC(Remote Procedure Call):远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的思想. RPC 是一种技术思想而 ...
- 一篇非常有用的文章-《台湾清华彭明辉教授的研究生手册》如何发现一个研究课题?
一.研究生期间要学什么? 我认为研究生期间学生应该学三件事情: 1)建立合理的知识结构:尽量广地涉猎学科基本知识,尽量深地了解所研究领域的方方面面过去和现在. 2)掌握独立研究的方法和技能:尽量多的学 ...
- 最近发现一个爬虫开源项目weixin_crawler
最近发现一个爬虫开源项目weixin_crawler weixin_crawler weixin_crawler是一款使用Scrapy.Flask.Echarts.Elasticsearch等实现的微 ...
- Android系统Audio框架介绍(一)
原址 音频基础知识 声音有哪些重要属性呢? 响度(Loudness) 响度就是人类可以感知到的各种声音的大小,也就是音量.响度与声波的振幅有直接关系. 音调(Pitch) 音调与声音的频率有关系,当声 ...
- Android系统Audio框架介绍
音频基础知识 声音有哪些重要属性呢? 响度(Loudness) 响度就是人类可以感知到的各种声音的大小,也就是音量.响度与声波的振幅有直接关系. 音调(Pitch) 音调与声音的频率有关系,当声音的频 ...
- Android 8.1 Audio框架(二)AudioPolicy路由策略实例分析
概述 这里以蓝牙耳机连接手机这一场景为例分析Audio路由策略是如何进行设备切换和管理输出的.蓝牙耳机连接上Android系统后,AudioService的handleDeviceConnection ...
- 发现一个好问题胜过一切!如何提高发现问题的能力
一直在讲学术能力,问题太大太宽泛.很多读者听到这个概念,也许会想到我们之前讲到的逻辑思维.批判性思维.记笔记等等. 这些都是,但笔者认为,最基础的,是提出问题的能力. 爱因斯坦曾说过:"如果 ...
- 如何搭建python框架_从零开始:写一个简单的Python框架
原标题:从零开始:写一个简单的Python框架 Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发. 你为什么想搭建一个Web框架?我想有下面几个原因: 有一个 ...
最新文章
- 湖南城市学院c语言试卷题目,英语四级、计算机二级--C语言应该怎样复习?考试有哪些题型?...
- python自学教程读书导图-python机器学习基础教程读书笔记八(全书总结)
- 解决Asp.net中的Chart控件运行出现错误提示“ ChartImg.axd 执行子请求时出错”
- 苹果cms的php.ini,苹果cms安装及配置详细教程
- 【项目管理】采购管理
- org.neo4j.kernel.StoreLockException: Store and its lock file has been locked by another process
- java国际象棋棋牌_java使用swing绘制国际象棋棋盘
- java中什么是线程安全_Java 多线程:什么是线程安全性
- python学习(六)----文件和异常
- android usb采集卡,手机USB视频采集卡, 支持IOS、安卓系统
- 光模块有什么用?什么是SFP光模块?
- 基于ZXing实现个性彩色好看的二维码
- 跑深度模型的显卡_不止显卡!这些硬件因素也影响着你的深度学习模型性能
- 手机android版本2.3.6可以安装哪个版本的音乐播放器,喜马拉雅fm老版本2.3.6下载...
- 联调QuartersII + ModelSim(下载安装)
- java不足位数补0
- 航空货代系统之日常航班管理
- MUR1660AC-ASEMI高压大电流快恢复二极管
- 410随身wifi-linux(debian系统)各个频率版释放内存版驱动全面
- js方法ajax return,AJAX_PJBLOG中用到的ajaxjs.几个简单的函数,function $(id) { return document.get - phpStudy...
热门文章
- Javascript判断object还是list/array的类型(包含javascript的数据类型研究)
- maven 添加本地库
- Stimulsoft reports .net中创建变量
- akshare双均线backtrader
- 带你理解Spring AOP
- xmind可以画流程图吗_新娘妆可以自己画吗?临夏化妆学校告诉你答案!
- 计算机二级常备知识,2020年计算机二级Office考试必备题库资料!
- Linux 监控命令 free
- aix oracle 10.2.0.1 升级 10.2.0.4,AIX Oracle RAC 升级到10.2.0.4.0要特别注意的问题 - 爱肯的专栏 ......
- 串口操作之API篇 CreateFile