智能手表上的音频(四):语音通话

news/2024/2/29 3:54:06

上篇讲了智能手表上音频文件播放。本篇开始讲语音通话。同音频播放一样有两种case:内置codec和BT。先看这两种case下audio data path,分别如下图:

                                        内置codec下的语音通话audio data path

                                     蓝牙下的语音通话audio data path

从上面两张图可以看出,这两种场景下仅仅audio driver有点差异,因此就不分别讲了。语音通话有上行(uplink,UL)和下行(downlink,DL)的概念。上行是从MIC采集到语音经处理后通过空口发送给对方,下行是通过空口收到对方发来的语音经处理后通过扬声器等播放出来。从上图可以看出上行要经过audio driver / resampler / VE(AEC/ANS/AGC) / encoder / IMS等模块,下行要经过IMS / decoder / VE(ANS/AGC) / resampler / mixer / audio driver等模块。

下图给出了语音通话时AP/ADSP/CP之间的交互:

1)  AP给ADSP发STREAM_DEV_SELECT,选择是以内置codec还是BT来采集和播放

2)  AP给CP发ENABLE_CP_STREAM,使能CP上的语音流

3)  AP给ADSP发ENABLE_ADSP_STREAM,使能ADSP上的语音流

4/5) ADSP与CP交互上下行之间的语音数据

6)  AP给ADSP发DISABLE_ADSP_STREAM,停止ADSP上的语音流

7)  ADSP给AP发DISABLE_ADSP_STREAM_ACK,告诉停止ADSP上的语音流是否OK

8)  AP给CP发DISABLE_CP_STREAM,停止CP上的语音流

9)  CP给AP发DISABLE_CP_STREAM_ACK,告诉停止CP上的语音流是否OK

4/5G上的语音通话叫VoLTE/VoNR,也就是VoIP over LTE/NR。跟传统的VoIP大体相同,主要区别是承载从以太网变成了LTE/NR,不过这对做音频的来说是黑盒不可见的,就是调调API。语音通话相对音频文件播放来说要难得多,要做好是不容易的,尤其在恶劣网络环境下要保证语音质量。VoIP涉及到的知识点又较多,我曾写过一篇文章(VoIP语音处理流程和知识点梳理)对其进行了梳理,有兴趣的可以去看看。


https://www.xjx100.cn/news/3118880.html

相关文章

c++——string字符串____迭代器.范围for.修改遍历容量操作

在成为大人的路上喘口气. 目录 🎓标准库类型string 🎓定义和初始化string对象 💻string类对象的常见构造 💻string类对象的不常见构造 💻读写string对象 🎓 string类对象的修改操作 &#x1f4…

Adobe Illustrator绘图解决卡顿问题

最近在用AI做矢量图,但是遇到了一个很难搞的问题,当我们需要分辨率较高的图片的时候,Python用Matplotlib生成pdf时dpi参数会设置为600及以上,但这样的话就造成pdf文件过大以及AI卡顿两个问题,比如,下午生成…

实现一个高并发的Redis分布式锁

1. 无锁场景 下面是一个扣减库存逻辑, 由于查库存和扣减库存两个操作不是原子的,明显存在并发超卖问题 // 假设初始库存200GetMapping("/stock")public String stock(RequestParam(value "name", defaultValue "World") String name) {String…

C语言——实现一个计算m~n(m<n)之间所有整数的和的简单函数。

#include <stdio.h>int sum(int m, int n) {int i;int sum 0;for ( i m; i <n; i){sum i;}return sum;}int main() { int m, n;printf("输入m和n&#xff1a;\n");scanf("%d,%d", &m, &n);printf("sum %d\n", sum(m, n)…

大数据学习(26)-spark SQL核心总结

&&大数据学习&& &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 承认自己的无知&#xff0c;乃是开启智慧的大门 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4dd;支持一下博主哦&#x1f91…

详解原生Spring当中的额外功能开发MethodBeforeAdvice与MethodInterceptor接口!

&#x1f609;&#x1f609; 学习交流群&#xff1a; ✅✅1&#xff1a;这是孙哥suns给大家的福利&#xff01; ✨✨2&#xff1a;我们免费分享Netty、Dubbo、k8s、Mybatis、Spring...应用和源码级别的视频资料 &#x1f96d;&#x1f96d;3&#xff1a;QQ群&#xff1a;583783…

PTApt——2023年软件设计综合实践_7(数据结构)

6-1 递增的整数序列链表的插入 本题要求实现一个函数&#xff0c;在递增的整数序列链表&#xff08;带头结点&#xff09;中插入一个新整数&#xff0c;并保持该序列的有序性。 答案&#xff1a; 语言选C(gcc) List Insert(List L, ElementType X) {List tmp (List) mal…

flink源码分析之功能组件(四)-slotpool组件II

简介 本系列是flink源码分析的第二个系列&#xff0c;上一个《flink源码分析之集群与资源》分析集群与资源&#xff0c;本系列分析功能组件&#xff0c;kubeclient&#xff0c;rpc&#xff0c;心跳&#xff0c;高可用&#xff0c;slotpool&#xff0c;rest&#xff0c;metrics&…