蓝牙ble数据转语音实现Android AudioRecord方法推荐

蓝牙ble数据转语音实现Android AudioRecord方法推荐

欢迎走进zozo的学习之旅。

概述

蓝牙BLE又称bluetooth smart,主打的是低功耗和快速链接,所以在支持的profile并没有audio的部分,而蓝牙语音协议A2DP只在传统蓝牙中有,本文就是提供一种利用ble数据来传输压缩语音,并最终在实现用android语音框架中的AudioRecord方法来获取语音流。

主要思路

首先问题的需求是从一种非标准的协议挂载成为一个标准协议。那通过修改kernel的bluetooth协议或者是修改android的语音框架都是可以实现的,但是不论哪种方式都要耗费大量的工作,而且这两种的哪一种的修改都会给平台的更换或者是系统版本的更换带来很大的障碍。

那这里提供的一种较为简单的思路来实现:在kernel内建议一个upcm的声卡,运行一个守护进程将ble的对应数据解压后放入声卡这样AudioRecord就可以获取PCM的语音流了。另外,android语音的挂载需要添加so库,并修改Audio的配置文件audio_policy.conf来添加。

UPCM分析

upcm的源码可关注我的代码仓库

蓝牙正常 连接 log

[  633.209000] input: Broadcom Bluetooth HID as /devices/virtual/misc/uhid/input4
[  633.217000] generic-bluetooth 0005:0000:0000.0002: input,hidraw0: BLUETOOTH HID v1.01 Mouse [Broadcom Bluetooth HID] on 
[  641.437000] UPCM : snd_u_capture_open
[  641.440000] UPCM : snd_u_hw_params format 2, rate 16000, channels 1, period_bytes 2048, buffer_bytes 8192
[  641.451000] UPCM: format 0x2, rate 16000, channels 1
[  641.456000] UPCM : snd_u_pcm_prepare
[  641.460000] UPCM : snd_u_substream_capture_trigger, cmd 1
[  641.465000] UPCM: SNDRV_PCM_TRIGGER_START
[  649.407000] UPCM: upcm_char_release
[  651.592000] UPCM : snd_u_substream_capture_trigger, cmd 0
[  651.597000] UPCM: SNDRV_PCM_TRIGGER_STOP
[  651.602000] UPCM : snd_u_hw_free
[  651.605000] UPCM : snd_u_capture_close

audio daemon

蓝牙ble数据转语音实现Android AudioRecord方法推荐
Parse error on line 2:
... TD;    id1[`socket(PF_NETLINK, SOCK_DG
----------------------^
Expecting ‘SEMI‘, ‘NEWLINE‘, ‘SPACE‘, ‘EOF‘, ‘GRAPH‘, ‘DIR‘, ‘TAGEND‘, ‘TAGSTART‘, ‘UP‘, ‘DOWN‘, ‘subgraph‘, ‘end‘, ‘SQE‘, ‘PE‘, ‘-)‘, ‘DIAMOND_STOP‘, ‘MINUS‘, ‘--‘, ‘ARROW_POINT‘, ‘ARROW_CIRCLE‘, ‘ARROW_CROSS‘, ‘ARROW_OPEN‘, ‘DOTTED_ARROW_POINT‘, ‘DOTTED_ARROW_CIRCLE‘, ‘DOTTED_ARROW_CROSS‘, ‘DOTTED_ARROW_OPEN‘, ‘==‘, ‘THICK_ARROW_POINT‘, ‘THICK_ARROW_CIRCLE‘, ‘THICK_ARROW_CROSS‘, ‘THICK_ARROW_OPEN‘, ‘PIPE‘, ‘STYLE‘, ‘LINKSTYLE‘, ‘CLASSDEF‘, ‘CLASS‘, ‘CLICK‘, ‘DEFAULT‘, ‘NUM‘, ‘PCT‘, ‘COMMA‘, ‘ALPHA‘, ‘COLON‘, ‘BRKT‘, ‘DOT‘, ‘PUNCTUATION‘, ‘UNICODE_TEXT‘, ‘PLUS‘, ‘EQUALS‘, ‘MULT‘, got ‘PS‘

蓝牙ble数据转语音实现Android AudioRecord方法推荐

上一篇:Consider defining a bean of type 'com.lvjing.dao.DeviceStatusMapper' in your configuration.


下一篇:不通过百川打开淘宝app