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

上篇讲了智能手表上音频文件播放。本篇开始讲语音通话。同音频播放一样有两种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语音处理流程和知识点梳理)对其进行了梳理,有兴趣的可以去看看。

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

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

相关文章

Unity C++交互

一、设置Dll输出。 两种方式: 第一:直接创建动态链接库工程第二:创建的是可执行程序,在visual studio,右键项目->属性(由exe改成dll) 二、生成Dll 根据选项Release或Debug,运行完上面的生成解决方案后…

主播岗位面试

一、自我介绍 在面试的开始阶段,你需要准备一个简洁而有力的自我介绍。这个自我介绍应该包括你的姓名、教育背景、工作经验以及你为何对这个主播职位感兴趣。这个自我介绍应该控制在1-2分钟之内,避免冗长的表述。 二、主播经历和特点 在这个环节&…

一文学会Aiohttp

一、什么是aiohttp库 aiohttp库官网:https://docs.aiohttp.org/en/stable/ aiohttp是一个Python的HTTP客户端/服务器框架,它基于asyncio库实现异步编程模型,可以支持高性能和高并发的HTTP通信。aiohttp用于编写异步的Web服务器、Web应用程序…

36 - 电商系统表设计优化案例分析

如果在业务架构设计初期,表结构没有设计好,那么后期随着业务以及数据量的增多,系统就很容易出现瓶颈。如果表结构扩展性差,业务耦合度将会越来越高,系统的复杂度也将随之增加。这一讲我将以电商系统中的表结构设计为例…

基于docker的onlyoffice使用--运行JavaSpringExample

背景 我之前看到有开源项目很好地集成了onlyoffice,效果要比kkfilepreview好(应当说应用场景不太一样)。本文是在window10环境,安装完Docker Desktop的基础上运行onlyoffice,并利用官网JavaSpringExample进行了集成。 …

java学习part24异常throws

127-异常处理-异常处理方式二:throws_哔哩哔哩_bilibili 1.方法throws 2.如何抉择try和throws 3.手动throw语句 抛出一些java语法上没错但是不符合实际情况的异常。 用throw手动抛,方法上必须加throws。除非是运行时异常。 4.自定义异常

Android帝国之进程杀手--lmkd

本文概要 这是Android系统启动的第三篇文章,本文以自述的方式来讲解lmkd进程,通过本文您将了解到lmkd进程在安卓系统中存在的意义,以及它是如何杀进程的。(文中的代码是基于android13) 我是谁 init:“大…

Android控件全解手册 - 多语言切换完美解决方案(兼容7.0以上版本)

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分…

在PyCharm中运行OpenCV

一、安装Anaconda配置python环境 这里选用清华大学开源软件镜像站:anaconda | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 下载的速度更快。 点击下载链接:Index of /anaconda/archive/ | 清华大学开源软件镜像站 | Tsin…

推荐一款好用的BMP转PNG工具BMP2PNG

推荐一款好用的BMP转PNG工具BMP2PNG 自己写的一个BMP转PNG工具BMP2PNG 写这个工具是因为要使用传奇的部分素材在COCOS2DX使用, 但是COCOS2DX不支持BMP 如果直接将BMP转换到PNG的话,网上找到的工具都不支持透明色转换。难道要用PS一个一个抠图吗&#xf…

arthas使用

官方文档 Github: https://github.com/alibaba/arthas 文档: https://arthas.aliyun.com/doc/ Arthas 是一款线上监控诊断产品,通过全局视角实时查看应用 load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断…

Qt MVC示例 simpletreemodel 树模型

Qt MVC示例 simpletreemodel 树模型 从文本中读取树模型数据&#xff0c;缩进代表子项 TreeItem 表示一行字符串数据 treeitem.h #ifndef TREEITEM_H #define TREEITEM_H#include <QList> #include <QVariant>//! [0] class TreeItem { public:explicit Tree…