Android13 Audio框架

一、Android 13音频代码结构

1、framework:

android/frameworks/base

1.AudioManager.java :音频管理器,音量调节、音量UI、设置和获取参数等控制流的对外API

2.AudioService.java :音频系统服务(java层),音量调节、音量UI、音频设备插拔等控制流的具体实现

3.AudioSystem.java :音频控制的入口,是native层对上服务的接口

android/frameworks/av

1.AudioFlinger.cpp :音频系统的核心一,承担音频数据流AudioTrack和AudioRecord的混音、重采、输送等责任

2.AudioPolicyService.cpp :音频系统的核心二,负责音频策略,包含Audio HAL的加载,音频路由的选择等

2、HAL

android/hardware/aw/audio/ :AudioFlinger与音频驱动之间的对接层,匹配android系统与硬件的关键层

3、整体框图

其中运行在AudioServer进程中的AudioFlinger和AudioPolicyService,以及运行在SystemServer进程中的AudioService这三个模块是Android音频子系统的核心

(1)播放

通过C++类AudioTrack将音频数据写入AudioTrack和AudioFlinger都能访问的共享内存中,该共享内存由audio_track_cblk_t管理。AudioFlinger在接收到数据后,调过自己的播放线程输出

(2)录音:

硬件设备采集PCM数据,AudioFlinger使用AudioStreamIn将数据读取到共享内存,AudioRecord则从共享内存中在读取这些数据。

HAL----->AudioFlinger------->共享内存------>AudioRecord

二、ASoC音频驱动构成

1、ASoC音频驱动由三部分构成:platform,codec,machine

(1)Machine

        单独的 Platform 和 Codec 驱动是不能工作的,它必须由 Machine 驱动把它们结合在一起才能完成整个设备的音频处理工作。

Machine :可以理解为对开发板的抽象,开发板可能包括多个声卡,对应Machine部分包含多个link。

dai_link:machine驱动中定义的音频数据链路,它指定用到的cpu_dai、codec_dai

(2)Platform

        它包含了该 SoC 平台的音频 DMA 和音频接口的配置和控制(I2S,PCM 等等);一般不包含与板子或 codec 相关的代码。

        在具体实现上,ASoC又把Platform驱动分为两个部分:snd_soc_platform_driver和snd_soc_dai_driver。其中,platform_driver负责管理音频数据,把音频数据通过dma或其他操作传送至cpu dai中,dai_driver则主要完成cpu一侧的dai的参数配置,同时也会通过一定的途径把必要的dma等参数与snd_soc_platform_driver进行交互。

cpu dai:在嵌入式系统里面通常指CPU的I2S、PCM总线控制器,负责将音频数据从I2S tx FIFO搬运到CODEC(回放的情形,录制则方向相反)。cpu_dai通过snd_soc_register_dai()来注册。

(3)Codec

        它包含了一些音频的控件 (Controls),音频接口,DAMP(动态音频电源管理)的定义和某些 Codec IO 功能。为了 保证硬件无关性,任何特定于平台和机器的代码都要移到 Platform 和 Machine 驱动中。

2、PCM数据流

回放

录音

3、ASoC音频驱动注册流程

 主要步骤为下述部分:

4、 ALSA设备文件结构  

contro1C0   ------>              用于声卡的控制,例如通道选择,混音,麦克风的控制等。pcmC0D0c    ------>              用于录音的pcm设备pcmC0D0p    ------>              用于播放的pcm设备seq         ------>              音序器timer       ------>               定时器

        其中,C0D0代表的是声卡0中的设备0,pcmC0D0c最后一个c代表capture,pcmC0D0p最后一个p代表playback,这些都是alsa-driver中的命名规则。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/711143.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

多模态论文阅读-LLaVA

Visual Instruction Tuning Abstract1. Introduction2. Related Work3. GPT-assisted Visual Instruction Data Generation4. Visual Instruction Tuning4.1 Architecture4.2 Training 5 Experiments5.1 Multimodal Chatchot5.2 ScienceQA 6 Conclusion Abstract 使用机器生成…

JS中判断是否存在逗号,如果存在给去掉

.includes() 方法判断是否存在 split("需要去掉的字符串").join(" ") 去重的方法 去重复 划分后拼接

网络——DHCP服务器、DNS服务器实验

网络——DHCP服务器、DNS服务器实验 一、DHCP服务器实验 DHCP——动态主机配置协议,用来管理ip地址的分配。网络中的每台计算机都有至少一个ip地址。在Windows网络连接对话框中可以设置成自动获取ip地址,这样主机作为DHCP client就可以自动从DHCP server获取ip地址了。 DHC…

live555学习 - 环境准备

环境:Ubuntu 16.04.7 ffmpeg-6.1 1 代码下载 最新版本: http://www.live555.com/liveMedia/public/ 历史版本下载 https://download.videolan.org/pub/contrib/live555/ 选择版本live.2023.01.19.tar.gz ps:没有选择新版本是新版本在…

阿里开源的Java诊断利器Arthas

一.什么是Arthas 1.为什么需要Arthas 通常,本地开发环境无法访问生产环境。如果在生产环境中遇到问题,则无法使用 IDE 远程调试。更糟糕的是,在生产环境中调试是不可接受的,因为它会暂停所有线程,导致服务暂停。 开…

鸿蒙Harmony应用开发—ArkTS声明式开发(鼠标事件)

在鼠标的单个动作触发多个事件时,事件的顺序是固定的,鼠标事件默认透传。 说明: 从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。目前仅支持通过外接鼠标触发。 onHover onHover(event: …

vue中element-ui中的el-button自定义icon图标

实现&#xff1a; button的icon属性自定义一个图标名称&#xff0c;这个自定义的图标名称会默认添加到button下i标签的class上&#xff0c;我们只需要设置i标签的样式就可以了。 1. 控制台显示的代码 2 .图片展示 3. 按钮上使用自定义的icon 完整代码&#xff1a; <el-but…

postman切换成黑色主题

postman安装以后默认是白色背景&#xff0c;如果想要切换成黑色的&#xff0c;大家可以按照下图箭头指示来操作。 1打开设置 2在Themes页面选择黑色主题

Day06:基础入门-抓包技术HTTPS协议APP小程序PC应用WEB转发联动

目录 HTTP/HTTPS协议抓包工具 Web浏览器抓包 APP应用抓包 WX小程序&PC应用抓包 思维导图 章节知识点&#xff1a; 应用架构&#xff1a;Web/APP/云应用/三方服务/负载均衡等 安全产品&#xff1a;CDN/WAF/IDS/IPS/蜜罐/防火墙/杀毒等 渗透命令&#xff1a;文件上传下载…

最佳实践:Websocket 长连接状态如何保持

WebSocket 是一种支持通过单个 TCP 连接进行全双工通信的协议&#xff0c;相较于传统的 HTTP 协议&#xff0c;它更适合需要实时交互的应用场景。此协议在现代 Web 应用中扮演着至关重要的角色&#xff0c;尤其是在需要实时更新和通信的场合下维持持久连接。本文将探讨 WebSock…

安卓手机安装termux、kali linux及基本配置

相关阅读&#xff1a;Termux 高级终端安装使用配置教程 | 国光 百度安全验证 该文安装的 kali liunx 应该是简易版的&#xff0c;没有相关工具 一、下载安装termux 建议通过 f-droid 应用市场下载链接termux&#xff0c;点击即直接下载。 二、配置termux 1.更换镜像源 te…

如何访问内网服务器?

访问内网服务器是在网络架构中常见的需求。内网服务器是指在一个局域网中运行的服务器&#xff0c;可以提供各种服务&#xff0c;如文件共享、网站托管等。由于安全性的考虑&#xff0c;内网服务器一般不直接暴露在公网中&#xff0c;所以需要通过特定的方法来访问。 一种常见的…

基于语义解析的KBQA——代码和论文详细分析

根据论文&#xff1a;Semantic Parsing on Freebase from Question-Answer Pairs&#xff0c;分析其代码和步骤&#xff0c;以加强对这一流程的深入理解&#xff0c;重点关注模型的输入、输出和具体方法。 前言 提供阅读本文的前提知识&#xff0c;引用自Semantic Parsing on…

【探索AI】十二 深度学习之第2周:深度神经网络(一)深度神经网络的结构与设计

第2周&#xff1a;深度神经网络 将从以下几个部分开始学习&#xff0c;第1周的概述有需要详细讲解的的同学自行百度&#xff1b; 深度神经网络的结构与设计 深度学习的参数初始化策略 过拟合与正则化技术 批标准化与Dropout 实践&#xff1a;使用深度学习框架构建简单的深度神…

微信小程序的医院食堂订餐系统uniapp+vue+springboot/django/php

针对患者订餐的管理现状&#xff0c;本微信小程序的患者订餐主要实现以下几个目标&#xff1a; 1.系统界面简洁&#xff0c;操作简便。 2.拥有精准&#xff0c;高效的查询功能。 3.能使管理人员能够及时的获得精确的信息。 4.对数据内容的管理安全&#xff0c;…

腾讯:《智能科技 跨界相变——2024数字科技前沿应用趋势》

1月23日&#xff0c;腾讯发布了题为《智能科技 跨界相变——2024数字科技前沿应用趋势》的报告&#xff0c;报告从计算重塑、智能升维、沉浸交互、未来连接四个方面&#xff0c;对100多项未来技术和重点方向给出了趋势性判断。并表示我们正驶向一个由连接衍生交互、由计算催生智…

把简单留给用户,把复杂交给 AI

2024 年伊始&#xff0c;Kyligence 联合创始人兼 CEO 韩卿&#xff08;Luke&#xff09;分享了对 AI 与数据行业的一些战略思考&#xff0c;以及对中美企业服务市场的见解&#xff0c;引发业界同仁的广泛共鸣。正值 Kyligence 成立 8 周年&#xff0c;恰逢 AI 技术应用风起云涌…

FLask会话技术和Flask模板语言

二、FLask会话技术和Flask模板语言 1.会话技术 cookie 客户端的会话技术&#xff1a;让服务器认识浏览器&#xff0c;常用于登录 cookie本身由浏览器保存&#xff0c;通过Response将cookie写到浏览器上&#xff0c;下一次访问&#xff0c;浏览器会根据不同的规则携带cookie过…

ssm656基于JAVA的校园失物招领平台的设计与实现

** &#x1f345;点赞收藏关注 → 私信领取本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345;** 一 、设计说明 1.1 课题…

(k8s中)docker netty OOM问题记录

1、首先查看docker的内存占用情况&#xff1a; docker top 容器名 -u 查看内存cpu占用率&#xff08;容器名来自kubectl describe pod xxx或者docker ps&#xff09; 可以看出内存一直增长&#xff0c;作为IO代理这是不正常的。 2、修改启动参数和配置文件 需要注意的是为了…