HI,下面来说下BES2300Z USB模式下添加第三方通话算法。出现问题打印信息和现象我就不截图了(因为作者没有机器和环境了(*^▽^*))
众所周知,BES的是可以第三方通话算法。一般情况下第三方算法公司都会将BT模式下的适配好给出来或者给出修改文档,所以在BT模式下的第三方算法不需要注意什么。
下面来说下USB模式下的通话算法适配
我们跟通话的log可以看出运行static void POSSIBLY_UNUSED usb_audio_update_codec_stream(enum AUD_STREAM_T stream)函数开始的(更底层的没有怎么看,没有修改更底层部分的code)。
下图是对USB模式下通话mic、spk通道打开函数:
下图是对USB模式下通话 spk、mic配置的设置:
SPK和MIC的配置是 static int usb_audio_open_codec_stream(enum AUD_STREAM_T stream, enum AUDIO_STREAM_REQ_USER_T user) 函数中的 stream 来决定的
AUD_STREAM_PLAYBACK 设置SPK输出
AUD_STREAM_CAPTURE 设置MIC输入
上面的函数中有对MIC采集的数据和需要输出的SPK数据处理的hadle函数进行注册,分别是
SPK数据处理函数注册如下图:
MIC数据处理函数注册如下图:
下面进入正题,适配USB模式下的适配声加算法。
在添加算法的时候就需要我们在 target.mk 文件中将USB_AUDIO_SPEECH 宏打开。
注意:在打开这个宏之后编译测试下在USB模式下通话时,电脑上是否正常。如果出现没有mic工作的情况不要着急,换台电脑就好、这是电脑的问题不是代码程序问题。(之前就是我的电脑有这样的问题,导致我弄了好久都没有弄好,后面还是在不经意间换电脑之后发现没问题)以后再USB放面出现问题先换电脑、多换电脑测试,有一些电脑系统有问题或者不适配该系统等。
打开上面的宏之后,我们在代码中搜索就可以看到有一些地方有定义
在适配声加算法是需要传入480大小的buff,默认的情况下不是这么大的。所以就需要我们修改一些原始的参数和传输速度了,如下图:
这有这样修改之后,最后传入给声加算法接口函数的大小才是480.
在修改 tx_frame_ms == 15时,会导致程序死机并且报错。所以在 speech_process_init 函数中需要将报错的打印信息的一行注释掉,如下图:
在通话算法中的采样率我们不需要担心, apeech_process_init 函数中有重采样的机制。所以不需要我们做什么。
上面初始化的部分已经完成了,这样就不用担心在刚接通的时候就出现死机、通话过程中效果不好等情况了。
下面来说下MIC和SPK的部分,主要处理是在 void speech_process_capture_run(uint8_t *buf, uint32_t *len) 和 void speech_process_playback_run(uint8_t *buf, uint32_t *len) 函数中。当然调用声加接口函数也是在这两个函数中。
以为这样就弄好了吗?No 没有弄好,还有一步没有做。下面来说下具体是哪一步
在声加的算法中是需要aec_echo_buf 传入到mic里面去进行数据处理,做到回声消除等。然而在speech_process_playback_run 函数中并没有将AEC参考数据进行保存到 aec_echo_buf 中,所以这一步需要我们添加进去,如下图:
具体修改应该就是这一个函数了。(作者没有原始代码,而且弄好很久都忘记了)
全部移植好之后,测试下dump出来的数据是不是4路数据。4路dump数据就没有问题了 ,就可以将该bin文件发送给声加工程师调试最终的效果了。