我们最近出了一个问题,我们点击播放音乐,然后再点击停止播放的时候,喇叭还会输出一段杂音后喇叭才会停止输出

经过排查发现,在代码里面就做了这个功能

代码在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框架还因此发现一个雷相关推荐

  1. 我发现一个新的软件,用自然语言编程!非常酷!

    周六晚上10点半, 张大胖兴冲冲地在微信上找我:"欣哥,我发现一个编程软件,非常酷!" 我:"别烦我!我忙着追剧呢." "真的非常酷,这个软件叫Met ...

  2. android tcp socket框架_花了一个星期,我终于把RPC框架整明白了

    [51CTO.com原创稿件]RPC(Remote Procedure Call):远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的思想. RPC 是一种技术思想而 ...

  3. 一篇非常有用的文章-《台湾清华彭明辉教授的研究生手册》如何发现一个研究课题?

    一.研究生期间要学什么? 我认为研究生期间学生应该学三件事情: 1)建立合理的知识结构:尽量广地涉猎学科基本知识,尽量深地了解所研究领域的方方面面过去和现在. 2)掌握独立研究的方法和技能:尽量多的学 ...

  4. 最近发现一个爬虫开源项目weixin_crawler

    最近发现一个爬虫开源项目weixin_crawler weixin_crawler weixin_crawler是一款使用Scrapy.Flask.Echarts.Elasticsearch等实现的微 ...

  5. Android系统Audio框架介绍(一)

    原址 音频基础知识 声音有哪些重要属性呢? 响度(Loudness) 响度就是人类可以感知到的各种声音的大小,也就是音量.响度与声波的振幅有直接关系. 音调(Pitch) 音调与声音的频率有关系,当声 ...

  6. Android系统Audio框架介绍

    音频基础知识 声音有哪些重要属性呢? 响度(Loudness) 响度就是人类可以感知到的各种声音的大小,也就是音量.响度与声波的振幅有直接关系. 音调(Pitch) 音调与声音的频率有关系,当声音的频 ...

  7. Android 8.1 Audio框架(二)AudioPolicy路由策略实例分析

    概述 这里以蓝牙耳机连接手机这一场景为例分析Audio路由策略是如何进行设备切换和管理输出的.蓝牙耳机连接上Android系统后,AudioService的handleDeviceConnection ...

  8. 发现一个好问题胜过一切!如何提高发现问题的能力

    一直在讲学术能力,问题太大太宽泛.很多读者听到这个概念,也许会想到我们之前讲到的逻辑思维.批判性思维.记笔记等等. 这些都是,但笔者认为,最基础的,是提出问题的能力. 爱因斯坦曾说过:"如果 ...

  9. 如何搭建python框架_从零开始:写一个简单的Python框架

    原标题:从零开始:写一个简单的Python框架 Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发. 你为什么想搭建一个Web框架?我想有下面几个原因: 有一个 ...

最新文章

  1. 湖南城市学院c语言试卷题目,英语四级、计算机二级--C语言应该怎样复习?考试有哪些题型?...
  2. python自学教程读书导图-python机器学习基础教程读书笔记八(全书总结)
  3. 解决Asp.net中的Chart控件运行出现错误提示“ ChartImg.axd 执行子请求时出错”
  4. 苹果cms的php.ini,苹果cms安装及配置详细教程
  5. 【项目管理】采购管理
  6. org.neo4j.kernel.StoreLockException: Store and its lock file has been locked by another process
  7. java国际象棋棋牌_java使用swing绘制国际象棋棋盘
  8. java中什么是线程安全_Java 多线程:什么是线程安全性
  9. python学习(六)----文件和异常
  10. android usb采集卡,手机USB视频采集卡, 支持IOS、安卓系统
  11. 光模块有什么用?什么是SFP光模块?
  12. 基于ZXing实现个性彩色好看的二维码
  13. 跑深度模型的显卡_不止显卡!这些硬件因素也影响着你的深度学习模型性能
  14. 手机android版本2.3.6可以安装哪个版本的音乐播放器,喜马拉雅fm老版本2.3.6下载...
  15. 联调QuartersII + ModelSim(下载安装)
  16. java不足位数补0
  17. 航空货代系统之日常航班管理
  18. MUR1660AC-ASEMI高压大电流快恢复二极管
  19. 410随身wifi-linux(debian系统)各个频率版释放内存版驱动全面
  20. js方法ajax return,AJAX_PJBLOG中用到的ajaxjs.几个简单的函数,function $(id) { return document.get - phpStudy...

热门文章

  1. Javascript判断object还是list/array的类型(包含javascript的数据类型研究)
  2. maven 添加本地库
  3. Stimulsoft reports .net中创建变量
  4. akshare双均线backtrader
  5. 带你理解Spring AOP
  6. xmind可以画流程图吗_新娘妆可以自己画吗?临夏化妆学校告诉你答案!
  7. 计算机二级常备知识,2020年计算机二级Office考试必备题库资料!
  8. Linux 监控命令 free
  9. aix oracle 10.2.0.1 升级 10.2.0.4,AIX Oracle RAC 升级到10.2.0.4.0要特别注意的问题 - 爱肯的专栏 ......
  10. 串口操作之API篇 CreateFile