Android车载MCU控制音量和ARM控制音量的区别和优缺点—TEF6686 FM/AM芯片

news2024/11/22 22:22:45

不要嫌前进的慢,只要一直在前进就好

文章目录

  • 前言
  • 一、系统架构图
    • 1.MCU控制音量的架构图(老方法)
    • 2.ARM控制音量的架构图(新方法)
  • 二、为啥控制音量不是用AudioManager而是执着去直接控制TDA7729?
  • 三、MCU控制音量和ARM控制音量各自的优缺点
    • 1.MCU控制音量
    • 2.ARM控制音量
  • 总结


前言

Android车载系统开发定制晚于Android手机,但是也有10多年的时间,到8.0版本Android专门为车载添加AAOS(CarOS)分支。多年的从业经验也见证了行业的各种技术更新变化,这篇博客讲讲我个人理解的MCU控制音量和ARM控制音量的区别和优缺点。


一、系统架构图

1.MCU控制音量的架构图(老方法)

在这里插入图片描述
芯驰x9系列平台(Android 10)芯片其实是比较新的一个芯片平台,因为我司客户目标是商用车追求低成本,所以没有完全使用芯驰推荐的那套外设芯片。例如芯驰推荐的DSP是AK7738AVQ,我司用的是TDA7729。7729安卓端芯驰没有封装控制接口,我司MCU有控制7729的工作经验,故音量、音效、通道都是MCU端控制的。

音量和音效很好理解,通道没做过老式车载和车载的就很难理解,我尽量简单的把通道讲清楚。

通道:上图可以看到ARM(数字信号)和TEF6686(模拟信号)都是直连TDA7729输出声音信号,7729默认有多路声音通道,ARM默认通道0,TEF6686使用通道1。参照安卓音频交互矩阵,FM/AM和媒体(本地音乐/视频,酷狗,喜马拉雅等)相互属于独占的音频类型。
例如ARM端当前播放酷狗音乐(通道0)这时用户点想播放FM/AM,那么就需要点击Radio图标并切换到通道1才会有无线电台声音,听一会用户又点击了U盘音乐图标这时又需要切换到通道0才会有ARM端媒体声音。

我入行的时候就是用的这套MCU切通道、控制音量、音效的方法,我称之为“老方法”。

2.ARM控制音量的架构图(新方法)

在这里插入图片描述
杰发ATC8257平台(Android 9)也算是比较新的一个平台,平台的优点就是成本低,缺点也有此处不表。
这套方案杰发推荐使用TDA7729,Android端杰发也封装了java控制7729的音量、音效、增益等接口,所以项目启动的时候决定音量的控制放到ARM端。

这就有个TEF6686的音频怎样输出的新问题,杰发给的方案如上图,在ARM创建一个音频节点供6686数字音频输入(对应创建一个录音类型MediaRecorder.AudioSource.FM_CUSTOM),Android端使用AudioRecord + AudioTrack边录边播,我是参照vendor/mediatek/proprietary/packages/apps/FMRadio/这个工程完成的。

这样实现后在ARM端Radio APP跟U盘音乐、酷狗一样的是个媒体类型的APP,使用AudioManager.STREAM_MUSIC音频类型抢音频焦点播放。

从18年AAOS出来后基本都是这种ARM控制系统音量、音效的方法,我称之为“新方法”。

贴一点我当时实现数字FM/AM用的方法:
用命令可以查看pcm设备列表,杰发给的录音节点06,capture/playback 只有PCM设备才有这部分,只有c和p两种。c代表capture,说明这是一个提供录音的设备,p代表palyback,说明这是一个提供播放的设备。
1、查看当前的声卡:cat /proc/asound/cards
2、查看pcm设备列表:cat /proc/asound/pcm
3、查看当前有哪些进程占用了pcm设备节点:lsof |grep pcm
4、查看有哪些音频设备节点:ls /dev/snd/
在这里插入图片描述

Android端通过tinycap命令录制这个节点测试是否可用,tinyplay、tinymix、tinycap的使用可以先看下面这篇博客
如何查看声卡、pcm设备以及tinyplay、tinymix、tinycap的使用
用下面命令录制节点6,可录.pcm或者.wav的音频资源,录好pull出来用电脑或者发到手机微信播放,如果节点正常你可以听到6686里面FM/AM的声音。
控制搜台那些我司目前还是通过串口服务发命令给MCU来控制,后续开发ATC8025平台是打算把控制的部分也迁移到ARM端。

adb root
adb shell tinycap /data/test.pcm -D 0 -d 6 -b 16 -r 48000 -c 2
adb shell tinycap /data/radio.wav -D 0 -d 8 -b 16 -r 48000 -c 2
tinycap /data/radio.wav -D 0 -d 4 -b 16 -r 48000 -c 2
adb pull /data/test.pcm 

-D 哪个声卡的意思, 比如usb声卡, 本机mic …
-d 当前声卡下的哪个设备录音, 一般一个声卡下会有多个设备
-c 录音通道数
-b 采样精度,一般是16bit,但是如果需要标记位就要升高精度,如24bit或32bit
-r 录音采样率
-p period size:每个中断周期需要准备的音频空间大小
-n 有多少组 period size

二、为啥控制音量不是用AudioManager而是执着去直接控制TDA7729?

1.能问出这种问题的小伙伴说明你的水平已经是个小高手,起码也是玩过Android多媒体、音量控制的工程师。我曾经也这么灵魂拷问过我的技术领导,他当时给我一个白眼,说车载就是这么做的,现在想想他还是想有所保留的。我一度反复思索多年不得要领,后面在另一家公司我又又灵魂拷问我的副总,这个副总是硬件出身,他说你不直接控制7729音量指标过不了,虽然你在Android把音量调到0但是音频芯片7729有底噪,到这时我才恍然大悟。

2.再结合Android在8.0的时候给车载开的分叉AAOS里面控制音量是CarAudioManager,CarAudioManager有耐心的小伙伴可以追踪一下代码,它也是直接控制的DSP音频芯片音量,也就是跟我前面讲的两种控制音量的方法一样的控制硬件音量,到这里突然就像打通了任督二脉懂了整个车载音频架构设计的逻辑。

3.AudioManager控制的是软件音量,我们称之为软音量;控制7729音量和AAOS的CarAudioManager控制音量都是控制硬件音量,我们称之为硬音量。

4.Android车载一定控制硬音量,不然底噪太大过不了指标。

三、MCU控制音量和ARM控制音量各自的优缺点

1.MCU控制音量

优点:从我Android软件开发工程师角度来说毫无优点,唯一的优点就是搞出产品能卖钱
缺点:APP需要通过串口服务来控制MCU从而达到控制音量,还需要通知MCU当前ARM的媒体播放状态,比较繁琐,出了问题不能快速debug

2.ARM控制音量

优点:ARM控制音量少了跟MCU交互那一层,代码逻辑更清晰明了,有问题可快速debug快速解决
缺点:无,在车载行业目前来看是无缺点,完美

总结

Android车载音频设计是最复杂、最难做、最重要的一部分,把音频部分做好这个系统基本上大差不差可以说做好了。
小伙伴们如果向往这方面发展可以先从多媒体入手,懂了多媒体模块就能懂:音频流、音频焦点,进而可以学习音量管理、音频矩阵、车载音频配置、音频控制hal、多区音频路由等等。

AAOS音频设计的部分每个版本之间也有变化,具体的可以去开源网站上学习
https://source.android.google.cn/docs/automotive?hl=zh-cn

学海无涯苦作舟!

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

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

相关文章

[数据集][目标检测]婴儿车检测数据集VOC+YOLO格式1073张5类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):1073 标注数量(xml文件个数):1073 标注数量(txt文件个数):1073 标注…

Matlab基础语法篇(下)

Matlab基础语法(下) 一、逻辑基础(一)逻辑运算符(二)all、any、find函数(三)练习 二、结构基础(一)条件结构(1)if-elseif-else-end&am…

通过albumentation对目标检测进行数据增强(简单直接)

albumentation官方文档看不懂?xml文件不知道如何操作?下面只需要修改部分代码即可上手使用 要使用这个方法之前需要按照albumentation这个库还有一些辅助库,自己看着来安装就行 pip install albumentation pip install opencv-python pip install json…

<数据集>蛋壳裂缝检测数据集<目标检测>

数据集格式:VOCYOLO格式 图片数量:2520张 标注数量(xml文件个数):2520 标注数量(txt文件个数):2520 标注类别数:2 标注类别名称:[crack, egg] 序号类别名称图片数框数1crack245128352egg25142514 使…

揭秘饲料制粒机:生产颗粒料加工的利器

随着现代畜牧业的发展,饲料的质量和加工效率成为了养殖业者关注的焦点。在这个背景下,饲料制粒机——这一饲料加工设备的核心,凭借其稳定、环保的特点,逐渐加入养殖行业中。 一、饲料制粒机的工作原理 饲料制粒机主要通过挤压、切…

msyql (8.4,9.0) caching_sha2_password 转换 mysql_native_password用户认证

mysql 前言 caching_sha2_password 主要特性 用于增强用户账户密码的存储和验证安全性。这种插件利用 SHA-256 散列算法的变体来存储和验证密码 安全的密码散列: caching_sha2_password 使用基于 SHA-256 的算法来生成密码的散列值。这意味着即使数据库被未授权访…

【JS特效之手风琴效果】基于jquery实现手风琴网页特效(附源码)

HTMLCSSJS手风琴效果目录 🍔涉及知识🥤写在前面🍧一、网页主题🌳二、网页效果🐋三、网页架构与技术3.1 脑海构思3.2 实现原理 🌈四、网页源码4.1 手风琴模块4.2 完整源码获取方式 🌅 作者寄语 &…

机械学习—零基础学习日志(高数05——函数概念与特性)

零基础为了学人工智能,真的开始复习高数 本小节讲解隐函数,有点神奇,我竟然完全没有隐函数记忆了。 隐函数 隐函数,我个人通俗理解就是,在复杂的环境里,发现纯净天地。例如,在外太空的某个大陆…

《JavaSE》---14.<面向对象系列之(附:this和super关键字)>

目录 系列文章目录 前言 一、为什么要有this引用 1. 用代码看有this与无this的区别 1.1 代码示例 1.2 输出结果: 1.3 代码示例: 1.4 输出结果: 2. this深度理解 3. 什么是this引用 3.1 this引用的概念 4. this引用的特性 二、th…

【TAROT学习日记】韦特体系塔罗牌学习(5)——皇帝 THE EMPEROR IV

韦特体系塔罗牌学习(5)——皇帝 THE EMPEROR IV 目录 韦特体系塔罗牌学习(5)——皇帝 THE EMPEROR IV牌面分析1. 基础信息2. 图片元素 正位牌意1. 关键词/句2.爱情婚姻3. 学业事业4. 人际财富5. 其他象征意 逆位牌意1. 关键词/句2…

大盘周期性复苏之际,英诺赛科的新叙事如何开讲?

半导体行业已经开始周期性复苏。 据同花顺iFinD统计,截至目前,已有37只半导体个股披露了上半年业绩预告,其中27股预喜,或扭亏或预增,预喜率超七成,长川科技净利预增幅度位居第一,暂列上半年半导…

Cadence OrCAD Capture原理图搭建及仿真方法

1 安装Cadence Allegro 略。 2 搭建原理图 2.1 打开软件 1、点击Capture CIS。 2、在弹出的产品选择栏点击OrCAD Capture,点击OK。 打开的软件界面如下: 2.2 新建工程 1、点击左上角File,New,Project,或者直接点…

王权与自由Steam国际服下载教程分享

王权与自由,一款集合了所有mmorpg游戏内玩法的游戏,包含爬塔、小队副本、团队副本、休闲竞技、装备打造、人物养成、攻城战、大型的pvp团战等多种游戏玩法,在游戏中只有我们想不到的内容,没有游戏不包含的内容,而且有意…

【Git远程操作】克隆远程仓库 https协议 | ssh协议

目录 前言 克隆远程仓库https协议 克隆远程仓库ssh协议 前言 这四个都是Git给我们提供的数据传输的协议,最常使用的还是https和ssh协议。本篇主要介绍还是这两种协议。 ssh协议:使用的公钥加密和公钥登录的机制(体现的是实用性和安全性&am…

AIGC工具:IPAdapter和ControlNet 指导控制生成工具

ControlNet强调对生成过程的直接控制,如通过线条、边缘、形状等信息;而IPAdapter侧重于风格迁移和内容的间接引导。 IPAdapter 它专注于通过迁移图片风格来生成新的图像内容。IPAdapter的强项在于能够将一张图片的风格迁移到另一张图片上,实现风格融合,甚至可以进行多图风格…

【Android】ConstrainLayout约束布局基本操作

文章目录 介绍约束条件添加方式外边距设置删除方式 添加约束条件父级位置对齐方式基线对齐引导线约束屏障约束 约束偏差使用链控制线性组 介绍 约束布局ConstraintLayout是 Android Studio 2.3 起创建布局后的默认布局 主要是为了解决布局多层嵌套问题,以灵活的方式…

【你也能从零基础学会网站开发】 SQL Server 2000企业管理器基本介绍

🚀 个人主页 极客小俊 ✍🏻 作者简介:程序猿、设计师、技术分享 🐋 希望大家多多支持, 我们一起学习和进步! 🏅 欢迎评论 ❤️点赞💬评论 📂收藏 📂加关注 SQL Server 20…

idea 配置jdk21 后 控制台中文乱码问题

1、 选择 add VM 填写:-Dfile.encodingGBK -Dfile.encodingGBK

Node对接支付宝沙箱完成支付完整流程

沙箱支付完整流程 一、进入支付宝沙箱网站二、进入沙箱环境三、下载【支付宝开放平台开发助手】四、打开【支付宝开放平台开发助手】工具,进行设置五、点击生成密钥点击打开文件位置 六、密钥格式转换七、回到沙箱配置密钥八、粘入应用工具九、需要应用的信息十、进…

算法:队列+宽搜

目录 题目一:N 叉树的层序遍历 题目二:二叉树的锯齿形层序遍历 题目三:二叉树最大宽度 题目四:在每个树行中找最大值 题目一:N 叉树的层序遍历 给定一个 N 叉树,返回其节点值的层序遍历。(…