news 2026/6/10 17:28:08

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
一款智能手表上语音通话时的音频设备动态切换

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

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就要重新做初始化。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 12:29:02

jemalloc思想的极致演绎:深度解构Netty内存池的精妙设计与实现

Netty内存池的核心设计借鉴了jemalloc的设计思想。jemalloc是由Jason Evans在FreeBSD项目中实现的高性能内存分配器,其核心优势在于通过细粒度内存块划分与多层级缓存机制,降低内存碎片率并优化高并发场景下的内存分配吞吐量。 Netty基于jemalloc的多Ar…

作者头像 李华
网站建设 2026/6/10 14:10:05

复习——共享内存

共享内存一、共享内存(Shared Memory)1.1 基本概念System V提供:UNIX操作系统的进程间通信方式特点:效率最高的IPC方式1.2 操作流程key → 申请对象 → 映射对象 → 读写对象 → 撤销映射 → 删除对象1.3 与管道的区别特性共享内存…

作者头像 李华
网站建设 2026/6/10 14:11:27

高职金融科技应用专业可考取的金融科技类证书

金融科技(FinTech)是金融与科技融合的领域,涉及数据分析、区块链、人工智能、云计算等技术。高职金融科技应用专业的学生可通过考取相关证书提升竞争力。以下为适合该专业考取的金融科技类证书,包括CDA数据分析师证书。数据分析类…

作者头像 李华
网站建设 2026/6/10 13:59:31

(100分)- 报数游戏(Java JS Python)

(100分)- 报数游戏(Java & JS & Python)题目描述100个人围成一圈,每个人有一个编码,编号从1开始到100。他们从1开始依次报数,报到为M的人自动退出圈圈,然后下一个人接着从1开始报数,直到…

作者头像 李华
网站建设 2026/6/10 13:59:20

AI Agent的概念形成:模拟LLM的抽象思维过程

AI Agent的概念形成:模拟LLM的抽象思维过程 关键词:AI Agent、大语言模型(LLM)、抽象思维过程、概念形成、智能模拟 摘要:本文聚焦于AI Agent概念形成过程中模拟大语言模型(LLM)抽象思维过程这一核心主题。首先介绍了研究的背景、目的、预期读者和文档结构。接着深入探讨…

作者头像 李华