您的位置:首页 > 其它

CSR8670 — TWS模式的应用笔记【转载】

2018-01-23 20:32 295 查看


文章出处:RyomaWang(转载文章,已通过作者授权)


1. 应用场景


1.1 非TWS会话

单个音箱最多可以连两个A2DP源。
当音箱A同时与两个A2DP源建立了连接,另一个音箱B不能与其建立TWS会话
同一时间一个音箱只能选择2个A2DP源中的一个来播放 




1.2 TWS会话


1.2.1 准备工作

单个音箱最多可以连接1个A2DP源,1组TWS会话最多连接2个A2DP源。

在进入TWS会话之前,两个A2DP源必须分别与两个音箱完成配对,否则一旦开始建立TWS会话,A2DP源无法搜索到两个音箱,也就无法配对。 




1.2.2 建立会话

两个音箱与两个A2DP源完成配对后,开始建立TWS会话:

音箱A调用EventUsrPeerSessionInquire,进入inquiry模式

音箱B调用EventUsrPeerSessionConnDisc,进入conndisc模式

音箱A搜索到音箱B,根据如下设定建立TWS连接:

链接丢失后自动回连。建议slave使能此选项,防止master出现音频抖动

使用受限呼叫访问码

连接设备过滤方式。如果音箱B的UUID能通过音箱A设定的滤波器规则,那么音箱A与音箱B开始建立TWS连接。此处的滤波器规则有设备ID和CSR对等设备服务UUID,后者是由客户定义的非零值。

配对模式 



是否支持作为音频中继者和音频被中继者

音频中继模式:双立体声、主左从右、主右从左、缩混

音量削减。TWS的音量由系统音量和削减音量控制。系统音量由AVRCP指令设定,削减音量的默认值存储在PSR配置中。master会将配置发送给slave,模式切换时master会再发送给slave 



单设备模式。此模式使能后,A2DP源的AVRCP指令可以在master,slave和A2DP源之间保持同步,否则slave接收的AVRCP指令不能中继到master 


 




1.2.3 播放音频

TWS会话建立成功后,连接两个A2DP源中的一个并播放音频文件。假设A2DP源1正在播放,那么与A2DP源1配对的音箱作为TWS会话的master,另一个音箱作为slave。A2DP1的音频数据会从master中继到slave。 



假设此时播放A2DP源2,则与源2配对的音箱作为TWS会话的master,另一个音箱自动切换成slave 



A2DP源可以是其它蓝牙设备,也可以是本地的音频接口。

蓝牙设备必须支持A2DP,AVRCP协议。可支持的蓝牙设备的音频编码方式有SBC,MP3,AAC,aptX。

本地音频接口包括USB接口和analog接口(ADC/SPDIF/I2S)。本地音频接口将音频数据缓存在内部RAM中,使用SBC编码后,通过master与slave之间建立的连接传送给slave。 



slave接收后用SBC解码,将解码后的音频数据通过DAC转换成音频信号,或是用I2S接口输出给外部音频芯片。 




1.2.4 设置命令

TWS模式支持AVRCP 1.4中定义的命令,包括快进快退,播放暂停等。 

TWS模式也支持特有的AVRCP命令如下: 


 

TWS模式支持的GAIA命令如下,且这些指令在TWS会话的两个设备之间同步(音量控制和设备音量削减控制不能同步): 



TWS模式的音量控制分两部分:

系统音量:可以通过AVRCP命令设定,如果需要同步到A2DP源,需支持AVRCP的绝对音量控制(absolute volume control)

音量削减:可以由master通过如下用户事件调用 




1.2.5 切换音频源

TWS模式建立时的默认音频源由PSR决定。可选项有auto,A2DP,USB,analog。

选择auto选项后,TWS连接建立时选择当前可用的音频源,优先级为A2DP>USB>analog。

运行时可调用下列事件以手动切换音频源: 


 

可调用EventUsrSelectAudioSourceNone再切换回自动切换模式。


1.2.6 结束TWS会话

调用EventUsrPeerSessionEnd以结束TWS会话。 

调用EventUsrEstablishPeerConnection以请求重新连接已配对完成的TWS会话。


2. 建立VM应用


2.1 修改VM应用工程properties




2.2 使能对等设备支持

设定对等设备支持“true wireless” 



使能MP3,AAC和aptX A2DP编解码 

安装对应的ADK编解码包
将对应的解码器工程包含在工作站内
申请解码算法的授权
修改speaker.mak,将kap文件加入到工程的映像文件夹

使能扩展编解码extra codec 



使能USB / 有线音频 



sbc_decoder的配置文件选择TWS_WIRED_MODE 




2.3 使能调试信息

修改sink_debug.h 

使能DEBUG_PRINT_ENABLE
使能DEBUG_PEER
使能DEBUG_PEER_SM

添加库文件 

打开库文件目录C:\ADK4.0.0\tools\lib\BlueLab-7.0.1-Release\assisted
找到libcsr_a2dp_decoder_common_plugin_stereo_tws_debug.a
xIDE->project->properties->libraries,添加csr_a2dp_decoder_common_plugin_stereo_tws_debug


3 扩展应用——analog模式的I2S接口

在CSR的官方demo中,当TWS模式的音频源是analog时,程序中设定的硬件接口是ADC。而本项目中需要用到I2S接口作为音频输入。修改步骤如下:

第一步:将CSR8670的I2S设为master,采样率设为48KHz。 



第二步:按下暂停键后,I2S时钟会消失。修改sink_audio_routing.c的代码如下: 



第三步:修改csr_a2dp_decoder_common_plugin.c的函数MusicConnectAudio如下: 



第四步:重新编译库文件。开始菜单->adk4.0.0->rebuild->vm libraries

第五步:修改sink_wired.c

1: 修改宏定义,用程序来控制ADC设备的接入检测的结果 



2: 新建函数wiredAudioSetAnalogConnect(uint8 status) 



第六步: 只有inquriy的设备才会enable analog connect,当收到发送inquiry事件的请求时,使能模拟连接;当收到发送conndisc事件的请求时,关闭模拟连接。 



第七步:如果A2DP源发生切换,master和slave的规则也会发生转换,因此需修改sink_a2dp.c的sinkA2dpSetLinkRole 




4 总结

TWS模式的特点是帧与帧之间有同步时间戳,两个音箱之间的音频数据延迟只有±5Sample。 

在使用过程中遇到过长时间不能进入TWS会话的情况,还需继续深入探寻原因
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: