QCC发射(TX SOURCE)USB发射A2DP音乐,实现MIC声音到主机

之前写过 CSR8670/8675 发射(TX SOURCE)USB发射A2DP音乐,实现MIC声音到主机的文章,目前把该方案移植到QCC方案(QCC3040 QCC3056)。
因 CSR8670/8675成本比较贵,现在移植到QCC平台。

由于众多游戏玩家,打游戏时需要使用USB发射器传输音频,QCC USB发射器就完美的解决了该问题。
在这里插入图片描述

但是游戏玩家还需要语音通话,即一边听声音,一边语音沟通。
为解决这个问题,大部分做法时,A2DP 切换到HFP模式,这样保证了可以听到游戏的声音,同时在连接的耳机上也可以通过MIC说话传输到游戏机上。但是这种实现方式存在二个弊端:一.A2DP 切换到HFP模式后,耳机听到的声音音质大打折扣。二.只能一对一,不能一对二。
为解决这种痛点,我们提出了新的解决MIC使用时又保证音质,又同时兼顾一对二的方案。

QCC发射A2DP时,增加本地MIC输入到游戏机。这样很好的避免了音质的降低,用户不在因为音质变差而烦恼。
Source Microphones_TurnOnMicrophone(uint16 microphone_number, microphone_user_type_t microphone_user_type)
{
Source mic_source = NULL;
PanicFalse(microphones_IsValidMicrophoneNumber(microphone_number));
PanicFalse(microphone_user_type != invalid_user);

if(((microphone_user_type > normal_priority_user) && (microphones_GetMicrophoneUserType(microphone_number) != microphone_user_type))|| (microphones_IsMicrophoneInExclusiveUse(microphone_number) == FALSE))
{const audio_mic_params * microphone_config = Microphones_GetMicrophoneConfig(microphone_number);bool already_in_use = Microphones_IsMicrophoneInUse(microphone_number);if(!already_in_use){DEBUG_LOG("Microphones_TurnOnMicrophone: microphone_number %d enum:mic_type_t:%d audio HDW instance %d",microphone_number, microphone_config->type, microphone_config->instance);AudioPluginSetMicGain(microphone_config->channel, *microphone_config);mic_source =  AudioPluginMicSetup(microphone_config->channel, *microphone_config);}else{mic_source = AudioPluginGetMicSource(*microphone_config, microphone_config->channel);}microphones_AddUser(microphone_number, microphone_user_type);
}
DEBUG_LOG("Microphones_TurnOnMicrophone: source=%p", mic_source);
return mic_source;

}
————————————————

                        版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/TengTaiTech/article/details/107282253

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

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

相关文章

Pytorch for training1——read data/image

blog torch.utils.data.Dataset create dataset with class torch.utils.data.Dataset automaticly import torch from torch.utils.data import Datasetclass MyDataset(Dataset):def __init__(self, data):self.data datadef __getitem__(self, index):# 根据索引获取样本…

一句命令pip卸载所有已安装库

pip3 list --formatfreeze | grep -v ^\-e | grep -v pip | grep -v setuptools | cut -d -f 1 | xargs -n1 pip3 uninstall -y 这个命令的解释如下: pip list --formatfreeze:列出所有已安装的库及其版本号。grep -v ^\-e:排除那些以-e开…

华为OD面试手撕算法-合并排序数组

题目描述 本题是leetcode一道简单题:合并两个有序数组,但是对于时间和空间复杂度面试官明确给出了限制。 // 给定两个排序后的数组 A 和 B,其中 A 的末端有足够的缓冲空间容纳 B。 编写一个方法,将 B 合并入 A 并排序。 // 初始化…

maya移除节点 修改节点

目录 maya移除节点 使用 Maya 用户界面: 使用脚本: maya 修改节点名字 使用 Maya 用户界面: 使用 MEL 脚本: 使用 Python 脚本: 注意事项: maya移除节点 使用 Maya 用户界面: 在“层次…

Gin框架(3)

文件上传与下载 文件上传 单文件上传 单文件上传指的是一次只上传一个文件。在Gin中,可以使用c.SaveUploadedFile方法来保存单个上传的文件。 // SaveUploadedFile uploads the form file to specific dst. func (c *Context) SaveUploadedFile(file *multipart…

对 NGINX、Kong 和 Amazon 的 API 管理解决方案进行基准测试:它们能否交付实时 API?

原文作者:Alessandro Fael Garcia of F5 原文链接:对 NGINX、Kong 和 Amazon 的 API 管理解决方案进行基准测试:它们能否交付实时 API? 转载来源:NGINX 开源社区 NGINX 唯一中文官方社区 ,尽在 nginx.org.c…

HAL STM32 硬件I2C方式读取AS5600磁编码器获取角度例程

HAL STM32 硬件I2C方式读取AS5600磁编码器获取角度例程 📍相关篇《STM32 软件I2C方式读取AS5600磁编码器获取角度例程》 ✨stm32使用硬件I2C去读取角度数据,通过STM32CubeMX工具配置工程,读取角度数据,只需要调用一个函数&#xf…

常见的服务器技术

常见的服务器技术 1.虚拟化技术:虚拟化技术允许在一台物理服务器上创建多个虚拟服务器,每个虚拟服务器都可以独立运行不同的操作系统和应用程序。这大大提高了服务器的资源利用率,并提供了更好的灵活性、可扩展性和可靠性。 2.负载均衡技术&…

谷歌(Google)技术面试——在线评估问题(一)

谷歌(Google)面试过程的第一步,你可能会收到一个在线评估链接。 评估有效期为 7 天,包含两个编码问题,需要在一小时内完成。 以下是一些供你练习的在线评估问题。 在本章结尾处,还提供了有关 Google 面试不…

使用 RisingWave、NATS JetStream 和 Superset 进行实时物联网监控

在物联网(IoT)背景下,处理实时数据会遇到一些特定的障碍,如边缘计算资源不足、网络条件限制、扩展性存在问题、设备间有多样性差异。要克服这些挑战,需要高效的边缘计算技术、强大的安全措施、标准化协议、可扩展的管理…

接口自动化框架搭建(六):多进程执行

1,背景目的 当测试用例太多之后,想缩短执行时间,就需要多线程或者多进程执行。 多线程执行: 每条测试用例是独立的,测试用例之间的参数不能共同使用 采坑举例:接口自动化中请求头是公共参数,…

Sqlite插入单引号和双引号,防止sql注入

1. 方法1 sqlite3_mprintf替换sprintf,%q替换%s. 1.1. 举例 修改前代码 //修改前, hello123写入失败char sql[1000]char* sql sprintf("UPDATE table SET name %s WHERE name_id %d","hello123", 1);rc sqlite3_exec(db, sql, NULL, NULL, &err…

WebGIS 地铁交通线网 | 图扑数字孪生

数字孪生技术在地铁线网的管理和运维中的应用是一个前沿且迅速发展的领域。随着物联网、大数据、云计算以及人工智能技术的发展,地铁线网数字孪生在智能交通和智慧城市建设中的作用日益凸显。 图扑软件基于 HTML5 的 2D、3D 图形渲染引擎,结合 GIS 地图…

人人都离不开的算法:AI 时代的生存指南

文章目录 一、算法在生活中的“无处不在”二、算法在工作学习中的“智慧助力”三、算法在社会发展中的“驱动力量”四、算法带来的“双刃剑”效应五、应对算法挑战的策略《人人都离不开的算法——图解算法应用》编辑推荐1、通俗易懂2、技术科普3、贴近时代、贴近生活4、启发思考…

List、Set、Map 之间的区别是什么?

List、Set和Map之间的主要区别体现在它们的定义、特性、用途和常见实现上。 首先,List、Set和Map都是Java集合框架中的重要接口,用于存储和操作数据,但它们各自有不同的特性。 List(列表)是一个有序的集合&#xff0…

婴儿沐浴椅CPC认证 亚马逊沐浴椅子CPC认证

婴儿沐浴椅 如果您在亚马逊商城发布商品,则必须遵守适用于这些商品和商品信息的所有联邦、州和地方法律以及亚马逊政策(包括本政策)。 本政策适用的婴儿沐浴椅 婴儿沐浴椅是一种用于浴缸、盥洗盆或类似沐浴设备中的一种支撑物,…

深入剖析JavaScript中的this(上)

在Javascript中,this 关键字是一个非常重要的概念,this这个关键字可以说是很常见也用的很多,说它简单也很简单,说它难也很难。我们经常会用到this,也经常会因为this头疼,是一个经常被误解和误用的概念&…

基于DWT(离散小波变换)的图像加密水印算法,Matlab实现

博主简介: 专注、专一于Matlab图像处理学习、交流,matlab图像代码代做/项目合作可以联系(QQ:3249726188) 个人主页:Matlab_ImagePro-CSDN博客 原则:代码均由本人编写完成,非中介,提供…

einops中的rearrange的使用方法

einops中的rearrange的使用方法 在 einops 中,rearrange 函数用于对张量进行重排操作,即重新排列张量的维度顺序或形状。它的语法如下: einops.rearrange(tensor, pattern)tensor:要重排的张量。 pattern:用于指定重排…

“继承MonoBehavior的泛型单例“本质上是一个单例模板

"继承MonoBehavior的泛型单例"本质上是一个单例模板,它可以用于管理其他所有继承自MonoBehaviour的单例类。通过继承这个泛型单例模板,可以确保每个单例类只有一个实例,并且这些实例在整个Unity应用程序中都是唯一的。这种模式使得…