Android蓝牙语音功能调试 电子说
一、问题描述
蓝牙功能主要问题是不能进行语音通话,其他正常,主要表现在进入腾讯会议后蓝牙不可选,没有蓝牙选项。

二、问题定位与回溯
1、蓝牙声卡没加载
2、音频部分代码没有开启蓝牙处理相关代码和配置
3、录音有杂音、不清晰
三、调试蓝牙语音功能两个重要环节
1、加载声卡


2、hal层启用相关代码,主要修改:
hardware/rockchip/audio/tinyalsa_hal/audio_hw.c
增加蓝牙配置:

添加声卡自动加载:

音频输出处理:

音频输入处理:
之前宏定义RK3399_LAPTOP没有开启,所以没有蓝牙语音功能


取消降噪,暂时没有发现对音质有啥影响

3、驱动层保证录音和播放正常
驱动这块主要是芯片原厂去调试,基于system/bt给出了替换的so文件,具体修改的不清楚。


push aic_uart_sco.ko 到板卡vendor/lib/modulespush libbluetooth 到板卡system/lib64/push fw/所有bin 到板卡vendor/etc/firmwarepush libbluetooth.so 到板卡vendor_dlkm/lib/modules/
对应源码路径:
vendor/rockchip/common/wifi/firmware/device/rockchip/rk356x/aic_uart/aic_uart_sco.kovendor/rockchip/common/bluetooth/console_start_bt/libbluetooth.so
四、调试过程
1、上层代码主要是看腾讯会议中是否可以切换蓝牙,是否有声音以及声音是否正常
2、如果上层两端都有声音,但是声音有杂音、不正常,则需要查看驱动层录音和播放是否有问题
3、底层录音调试主要是tinycap、tinyplay ,获取的是原始数据具体使用如下:
tinycap /sdcard/rec.wav -D 1 -d 0 -c 1 -r 8000 -b 16 -p 480 -n 2tinyplay /sdcard/rec.wav -D 1 -d 0 -c 1 -r 8000 -b 16 -p 480 -n 2
4、到上层还是可以通过获取pcm数据,这个数据和tinycap调用的接口基本一样,pcm数据是tinycap做了缩放处理。具体指令如下:
adb rootadb shell setenforce 0touch /data/misc/audioserver/debug_in.pcm 输入,录音touch /data/misc/audioserver/debug.pcm 接收,播放chmod 777 /data/misc/audioserver/debug.pcmchmod 777 /data/misc/audioserver/debug_in.pcmsetprop vendor.audio.record.in 5 开始setprop vendor.audio.record 5
清除数据:
cat /dev/null > /data/misc/audioserver/debug.pcmcat /dev/null > /data/misc/audioserver/debug_in.pcm
第3第4点提到的录音文件需要借助工具(audacity)播放:
正常波形:

不正常的波形,表现为失真、有杂音

造成不正常波形这个原因是因为播放的声音进行了放大处理,造成获取到的波峰波谷被截断,获取的数据不完整。
全部0条评论
快来发表一下你的评论吧 !