当前位置: 首页 > news >正文

一款智能手表上语音通话时的音频设备动态切换

手机上打电话时通常会支持在扬声器和听筒以及蓝牙耳机之间的动态音频设备切换。我开发过的一款手表也有这样的功能,只不过由于是手表,没有了听筒,动态音频设备切换就变成了在扬声器以及蓝牙耳机之间了。本文就讲讲这款手表上动态切换音频设备是怎么做的。

1, 手表SoC硬件框图

switch5

这款智能手表的SoC为了降成本,把codec芯片和蓝牙芯片都集成到SoC里面,即codec芯片和蓝牙芯片内置了,示意如上图。打电话时,当声音从mic和speaker采集和播放,可以叫做codec电话。这时涉及3个core,分别是AP/ADSP/CP。当声音从蓝牙耳机采集和播放,可以叫做蓝牙电话。这时涉及4个core,分别是AP/ADSP/CP/BT。 各个核之间通过IPC交互。音频设备动态切换是指在语音通话过程中内置codec device 和蓝牙device之间的切换。

2, 语音通话相关软件模块

下图给出了语音通话时涉及到的相关软件模块:

switch2

上图中左边一列是打电话时CP的相关模块处理,中间一列是AP以及ADSP的相关模块处理,右边一列是打蓝牙电话时BT的相关模块处理。语音通话均是由phone APP (UI) 发起。当是内置codec电话时,仅涉及左边两列模块(即蓝牙相关模块不涉及)。Phone APP调用左边一列的相关模块,建立起CP上的voice path。Phone APP调用中间一列的相关模块,建立起ADSP上的voice path以及使能codec等。AP audio会给ADSP发“DEVICE_SELECT” IPC CMD,告诉ADSP选用CODEC device。当是蓝牙电话时,三列模块均涉及。Phone APP调用左边一列的相关模块,建立起CP上的voice path。Phone APP调用中间一列的相关模块,建立起ADSP上的voice path。AP audio会给ADSP发“DEVICE_SELECT” IPC CMD,告诉ADSP选用BT device。Phone APP调用右边一列的相关模块,建立起BT上的voice path。不管是codec 电话还是蓝牙电话,均是由数据消耗者来发中断驱动的。codec 电话时消耗者是codec,codec会定期的(比如每10ms)通过ADMA中断来驱动ADSP运转起来,ADSP也会给CP发中断驱动CP运转起来,完成整个通话的处理。BT 电话时消耗者是BT,BT会定期的给ADSP发中断来驱动ADSP运转起来,ADSP也会给CP发中断驱动CP运转起来,完成整个通话的处理。

下图给出了内置codec通话时的data path:

switch3

从上图看出,内置codec语音通话, 上行时mic采集语音数据通过ADMA送给ADSP,ADSP处理后通过IPC送给CP,CP处理后通过空口送给对方。下行时CP通过空口接收语音数据,处理后通过IPC把数据送给ADSP,ADSP处理后通过ADMA把数据送给扬声器播放出来。

下图给出了蓝牙通话时的data path:

switch4

从上图看出,蓝牙语音通话时,上行时蓝牙耳机采集语音数据通过蓝牙空口送给SoC上内置的BT core,BT core处理后通过IPC送给ADSP,ADSP处理后通过IPC送给CP,CP处理后通过空口送给对方。下行时CP通过空口接收语音数据,处理后通过IPC把数据送给ADSP,ADSP处理后通过IPC把数据送给BT core,BT core处理后通过蓝牙空口把数据送给蓝牙耳机播放出来。所以通话时动态切换设备,ADSP跟CP之间的交互是不需要改变,从而CP上audio相关的代码不需要改变,改变的是ADSP与codec以及BT的交互。

3, 动态切换设备处理

下面分别从控制面上和数据面上讲动态切换设备处理。

3.1 控制面上

a) 在AP/ADSP这一列上,UI通知multimedia interface 做设备切换。在BT这一列上,当从内置codec切到蓝牙时,UI通知BT adaptor enable 蓝牙。当从蓝牙切到codec时,UI通 知BT adaptor disable 蓝牙。

b) multimedia interface通知AP audio做设备切换。当从内置codec切到蓝牙时,BT adaptor 通知BT Host enable 蓝牙。当从蓝牙切到codec时,BT adaptor 通知BT Host disable 蓝牙。

c) 为了避免POP 音,AP audio 给ADSP发“MUTE” IPC CMD,让ADSP把voice stream的音量缓降为0。

d) AP audio 给ADSP发“DEVICE_SELECT” IPC CMD,把voice stream要用的新device带给ADSP。 BT Host通知BT Controller enable(当从内置codec切到蓝牙时)或者disable(当从蓝牙切到codec时) BT上的voice path。

e) ADSP收到“DEVICE_SELECT” IPC CMD,发现voice stream 已被使能且当前使用的设备和带下来的设备不一致,就知道要做设备切换。当从内置codec切到蓝牙时,将codec disable,同时做蓝牙通话的一些初始化。当从蓝牙切到内置codec时,做蓝牙通话的清除,同时将codec enable。

f) AP audio 给ADSP发“UNMUTE” IPC CMD,让ADSP把voice stream的音量从0缓变为正常值。

3.2 数据面上

前文说过,不管是codec 电话还是蓝牙电话,均是由消耗者给ADSP发中断来驱动的。Codec电话时是给ADSP发ADMA中断来驱动,蓝牙电话时是给ADSP发BT IPC中断来驱动。ADSP的这些中断服务程序以及通话处理等在动态设备切换这个功能前就有,均不需要改动。唯一需要改动的是语音增强(voice enhancement,VE)中profile的改变以及VE要重新初始化。Codec电话和蓝牙电话属于不同的场景,有不同的profile。当是codec电话时,VE在ADSP上做,当是蓝牙电话时,VE在蓝牙耳机里做。当场景改变时,VE的profile就要跟着变。profile变了,相应的VE就要重新做初始化。

http://www.cnnetsun.cn/news/174815.html

相关文章:

  • 【python大数据毕设实战】哮喘患者症状数据可视化分析系统、Hadoop、计算机毕业设计、包括数据爬取、数据分析、数据可视化、机器学习
  • 9 个降AI率工具,MBA 必备避坑指南
  • Windows系统文件inetmib1.dll丢失损坏 下载修复方法
  • Boost电路的右半平面零点
  • 【全球AI伦理治理】
  • 毕业季必看!7款免费AI写论文神器实测,一站式搞定选题、大纲到降重
  • LLMs之Survey之Agent:《Measuring Agents in Production》翻译与解读
  • 零代码上手Google Gemini 3:5种实用方法大揭秘
  • “你用的那个AI,到底把你坑了还是救了?”——解锁宏智树论文的协作新范式
  • 好写作AI:别等学校采购了!你的论文“救命神器”自己就能用上
  • Windows系统文件GdiPlus.dll丢失或损坏 下载修复方法
  • 研究生必备8款AI写论文神器:5分钟生成25000字问卷类论文,自动生成高信度数据
  • 【BuildFlow 筑流】unitrix_macros库 Cargo.toml 配置详解及依赖库用法
  • 《开发者出海必看:如何优雅地搞定海外服务支付?(保姆级干货)》
  • Thinkphp和Laravel企业防爆安全设备信息系统
  • Thinkphp和Laravel全家桶鲜花售卖商城系统vue
  • 记录我适配iOS26遇到的一些问题
  • 通过命令模拟pod创建
  • 同步机无感 STM32 低成本 MD500E 永磁同步控制方案大揭秘
  • 小宝玩具 【通达信、源码 、主图、附图】
  • 使用 Github Pages 和 Hexo
  • 审稿 一区期刊注意事项: journal offers the option to connec;please note, reviewers are not expected 是什么意思
  • 线性代数:多维世界的变形工具箱
  • 力扣题目142. 环形链表 II​的解法分享,附图解
  • MATLAB电力系统继电保护之自动重合闸
  • 10 个AI写作工具,助你轻松搞定继续教育论文!
  • 【开题答辩全过程】以 基于Vue的茶道知识科普网站的设计与实现为例,包含答辩的问题和答案
  • 主动配电网两阶段鲁棒恢复:Matlab 代码探索之旅
  • ICG-20660L加速度+陀螺仪六轴IMU传感器原理图设计,已量产(加速度传感器)
  • 百度AI架构师亲授:Agentic智能体在医疗领域的落地(附诊断案例)