首先我们得了解audio和voice除了采样率和通道数不同外,代码中的音频链路chain也是独立的,audio的链路是用于传输高品质音乐,所以里面不会有mic的连接,voice的链路需要处理声音,里面会有cvc,aec等声音处理模块,并且声音是单声道,而问题就是在这些声音处理模块。

新的ADK和旧的ADK都有一个诟病,就是做usb音频设备时,要么只能做48k采样率双声道的audio还不能用mic的声卡设备,或者是16k采样率单声道的voice带mic的声卡设备。以前的ADK是二选一,新的就弄了两个声卡。两个声卡是能满足用户既想听高品质音乐又能通话的需求,但这怪怪的,明明一个声卡能做的事,非要分两个声卡来做。暂不讨论这设计出于什么缘由,我们就自己动手改想要的功能好了。

cvc分上下行,下行就是输出到speaker的链路,其中有个cvc receiver的模块,这模块处理的采样率有8k,16k,新的芯片有支持到32k,就是没有48k,所以高通做法就是做两条音频链路,带cvc的链路就是用在voice,不带的就是audio。→_→ 但是两条不一样的链路也不一定要两个声卡呀~ 用到mic时用voice链路,不用到mic时用audio链路,代码根据mic的使用情况,自己切换音频链路,这不也挺流畅的吗(867x dongle代码就是用了这个逻辑,悄悄告诉你们ADK6.4的sink我也改成了这个逻辑,但是我不会出这部分博文啦,想要的就找我们)。另外一个方法就是,不要cvc receiver这个模块,因为即便是hfp中的voice也不怎么调到cvc receiver里面的参数,即使要调也就EQ、volume这些,这些我们用EQ和volume control模块也能实现。所以本编觉得,把cvc receiver拖出去砍了,不让这个瘟神限制采样率,下面就是介绍实现这种做法的逻辑,想要补丁的就直接跳到片尾下载。

默认代码中是有两个宏INCLUDE_USB_VOICE INCLUDE_USB_AUDIO,分别打开voice和audio声卡,因为audio没有用到mic,所以我们只打开voice,这样代码修改量较少,并只将下行(即usb到speaker)改成48k采样率和变成立体声就好了,这样就能实现48k立体声音频下行和16k单声道音频上行的功能了。那么先动的是usb的声卡参数,因为我们是要把voice的speaker当audio用,那就直接把audio speaker的声卡参数复制给voice的。接着就是修改音频链路,这里面需要注意的是,这整个音频链路由三个chain连接而成。

这三个chain会根据你的参数选择他们的子chain,例如USB RX和OUTPUT有单声道和立体声之分,CVC有单mic,双mic之分,还有采样率之分。我给的补丁,只是针对默认情况,如果有别的需求,还得看着参数依样画葫芦去改对应的chain。USB RX中stereo chain有个mixer的模块,→_→意思就是,双声道也给你搞成单声道,所以这模块要去掉,在CVC中肯定是把receiver的模块去掉。至于OUTPUT,因为他没有限定数据的模块,也不会限定声道,只要在代码中将原本设置的单声道设置成双声道就好了。最后就是在代码中将这些模块连接起来,把已经删除的模块删除掉对应的参数配置,具体代码就看补丁吧。

-static void kymeraUsbVoice_CreateUsbRxChain(uint8 usb_rx_channels, Sink usb_voice_mono_receive)
+static void kymeraUsbVoice_CreateUsbRxChain(uint8 usb_rx_channels, Sink usb_voice_receive_left, Sink usb_voice_receive_right)
 {
     DEBUG_LOG_INFO("kymeraUsbVoice_CreateUsbRxChain: usb_rx_channels %d", usb_rx_channels);
 
@@ -129,8 +129,10 @@ static void kymeraUsbVoice_CreateUsbRxChain(uint8 usb_rx_channels, Sink usb_voic
     kymeraUsbVoice_SetUsbRxChain(PanicNull(ChainCreate(config)));
 
     Source usb_voice_rx_out  = ChainGetOutput(kymeraUsbVoice_GetUsbRxChain(), EPR_USB_RX_RESAMPLER_OUT);
+    Source usb_voice_rx_out2  = ChainGetOutput(kymeraUsbVoice_GetUsbRxChain(), EPR_USB_RX_RESAMPLER_OUT2);
 
-    PanicNull(StreamConnect(usb_voice_rx_out, usb_voice_mono_receive));
+    PanicNull(StreamConnect(usb_voice_rx_out, usb_voice_receive_left));
+    PanicNull(StreamConnect(usb_voice_rx_out2, usb_voice_receive_right));
 }
 static const output_registry_entry_t output_info =
 {
     .user = output_user_usb_voice,
-    .connection = output_connection_mono,
+    .connection = output_connection_stereo,
 };

以上是本期博文的全部内容,如有疑问就别在博文下方评论留言了,有什么疑问或想了解的当面和我说

高通蓝牙ADK-- 48k的usb voice相关推荐

  1. 欢迎加入高通蓝牙SoC学习小组

    欢迎加入高通蓝牙SoC技术交流群,分享开发经验. QQ群号:743434463 如需获取独家资料,可购买思度科技开发板: shop149363097.taobao.com/category-11892 ...

  2. pcm5102a解码芯片音质评测_简单测评200元档可能是唯一搭载高通QCC3020芯片的真无线蓝牙耳机...

    这个耳机目前挺火的,200元档可能是唯一搭载高通(原CSR)QCC3020芯片的TWS耳机.6月1日首发的5.0 TWS蓝牙耳机新品,貌似预定可以17x左右到手,我没跟风,看看第一波吃螃蟹的反应再说( ...

  3. 高通SDX12平台:启动流程梳理

    高通SDX12平台 启动流程梳理 1. 高通平台CPU类型介绍 通常我们所说的CPU如高通平台MSM8998.苹果A12, 华为海思平台(麒麟980.990)等,这些我们虽然叫CPU,但并不是只有一个 ...

  4. csr8675高通qcc5125修改蓝牙的usb声卡的ID方法

    csr8675和高通qcc5125修改蓝牙的usb声卡ID方法 分两种,csr和qcc,实际都是高通的了.简单区分来说,就是使用的烧录器不一样. spi烧录器:csr8670.8675-这些都适用 ① ...

  5. mtk一键usb驱动_6寸三防手持终端 Windows系统 安卓系统,高通 MTK 条码扫描 NFC

    亿道信息研发生产基地 深圳市亿道信息股份有限公司,是亿道集团子公司,成立于2008年,目前拥有200多人的团队,是研发三防手持终端&平板&笔记本的高科技公司,同时也是国内较大的行业定制 ...

  6. 戴尔7400笔记本WIN10蓝牙突然不见了,高通QCA61X4A无线网卡

    问题:蓝牙突然不见了,设备管理也没有,更新驱动也不显示蓝牙 解决方法: 1:拆开电脑,拆下无线网卡,再装回去.在重启查看 2:进BIOS,关闭无线网卡蓝牙等,重启,再进BIOS打开.再进系统查看 3: ...

  7. 【高通QCC5171earbuds例程搭配QCC3086的USB LE AUDIO dongle跑通例程】

    1 环境 a.工具: MDE:Qualcomm_MDE.WIN.2.8 Installer_2.8.0.37 ADK_TOOLKIT:ADK_Toolkit.WIN.1.2 Installer_1.2 ...

  8. 美国公布自动驾驶政策 高通推出aptX Voice音频技术

    2020.1.09 周四 #今日要闻# 1.美国公布自动驾驶重大发展政策AV 4.0 1月9日消息,据外媒报道,周三,美国交通部部长公布了美国联邦政府对无人驾驶汽车的最新政策体系--被称为" ...

  9. 高通:蓝牙5.0将可同时连接两个设备

    2019独角兽企业重金招聘Python工程师标准>>> 腾讯数码讯(亦九)高通最新骁龙845芯片做出了许多创举,一些过去做不到或者要借助其它硬件才能做到的事,有了骁龙845都变得轻而 ...

最新文章

  1. 把对像生成json并存储到文件
  2. Mask_RCNN安装与踩过的坑
  3. 设置cookie存活时间_Django之cookie、session、token
  4. 打造实用的Fedora 10
  5. android7.0 ActivityManagerService(AMS)启动流程
  6. B 站 CEO 的身份证被上传到 GitHub 了?这个火了
  7. 软件測试自学指南---从入门到精通
  8. 音视频即时通讯开发中使用P2P技术的好处
  9. 离散数学大作业代码及感想
  10. 什么是LAMP架构?
  11. 全通阅卷系统服务器配置,网上阅卷系统建设方案(24页)-原创力文档
  12. linux输出文件首行,Linux:提取文件的第一行
  13. oracle计算本年第几周,详细讲解“Oracle”数据库的“周数计算”
  14. 线缆束的辐射与抗干扰
  15. 第21节迁移学习原理及实例
  16. 关于uboot的简介——uboot常用的命令
  17. listview(retrofit)
  18. 在控制台程序中隐藏控制台窗口!
  19. Linux 监听进程状态
  20. PWM波控制舵机总结

热门文章

  1. OAuth2.0 第三方登录
  2. 计算机编程概率论,程序员的数学:线性代数和概率统计
  3. 纯净版xp系统在局域网共享需要密码如何解决
  4. android 音乐播放工具类MediaPlayer
  5. 探索大寰夹爪| 大寰PGE-5平行夹爪亮点与指示灯判断
  6. 智能云原生应用的崛起
  7. python-收集雨水问题
  8. 污水除磷主要方法,磷酸盐的深度去除,正磷、次磷、亚磷树脂吸附
  9. 某大牛的个人入侵经验
  10. 树莓派桌面没有时间_三、屏幕连接树莓派无法显示桌面问题解决